пятница, 25 апреля 2008 г.

Про chroot и ssh

Раз уж начал темы об администрировании...
Понадобилось третьего дня дать человеку доступ в некую папку на сервере. Причем ввиду особой секретности - что б он по другим папкам не ходил особо.
Стандартный sshd, что имеется в установке freebsd 7 для таких целей не годится, ставить ftp - вроде особо и не хочется. Реализовал вот так:
cd /usr/ports/security/ssh2
make install WITHOUT_X11=yes
make clean
adduser
#делаем из человека user'a
vi /usr/local/etc/ssh2/sshd2_config
#снимаем комментарии и меняем вот эти вот строчки
Port 22
ListenAddress 127.0.0.2
#старый sshd я не сносил, просто повесил новый на другой адрес
AllowedAuthentications publickey,password
ChRootUsers user
subsystem-sftp internal://sftp-server
vi /etc/rc.conf
#инаблим sshd2
sshd2_enable="YES"
#запускаем сервис
/usr/local/etc/rc.d/sshd2 start
Теперь довольный пользователь сможет приконнектится по SFTP и получит доступ только в свою папочку.

FastCGI External server - что и как

В свое время, переводя ряд проектов под FastCGI решали задачу, как многочисленные external fastcgi сервера связать с вебниками.
Для nginx'a есть вменяемый мануальчик, по которому все делается и работает. Выглядит это так:
server {
listen 127.0.0.1:80;
server_name mysite.ru;
root /var/home/www/;
index index.php;
location ~ .php$ {
fastcgi_pass unix:/var/home/www/php.socket;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/home/www/$fastcgi_script_name;
fastcgi_param PATH_TRANSLATED /var/home/www/$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param REDIRECT_STATUS 200;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param SERVER_SOFTWARE "nginx/0.3.15";
fastcgi_param GATEWAY_INTERFACE "CGI/1.1";
fastcgi_param SERVER_NAME $server_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param REMOTE_USER $remote_user;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_connect_timeout 360;
fastcgi_send_timeout 360;
fastcgi_read_timeout 360;
include /usr/local/etc/nginx/fastcgi_params;

}

}


А вот для апача однозначного мануала по работе с fastcgi external не нашлось. Методом проб и - гм - ошибок была сделана вот такая вот конфа:

httpd.conf:

AddType application/x-httpd-fastphp .php

httpd-vhost.conf:


ServerAdmin admin@mysite.ru
ServerName mysite.ru
ServerAlias www.mysite.ru
DocumentRoot "/var/home/www"
ErrorLog /var/log/httpd-mysite-error.log
CustomLog /var/log/httpd-mysite-access.log common
FastCgiExternalServer /var/home/www/php.socket_notfound -socket /var/home/www/php.socket
ScriptAlias /php-fastcgi /var/home/www

Options -Indexes FollowSymLinks -MultiViews
AllowOverride All
Order allow,deny
Allow from all


SetHandler fastcgi-script
Allow from all

Action application/x-httpd-fastphp /php-fastcgi/php.socket_notfound



Как ни странно, эта конфигурация позволяет обозначать свой external server для каждого vhost'а :) Однако относятся обе конфигурации только к ситуации, когда fastcgi external выступает php. Для ряда приложений, отличных от php-интерпретатора, конфигурации в обоих случаях будут несколько иными.

четверг, 24 апреля 2008 г.

Про rewrite, apache, root и directory

Третьего дня понадобилось перенаправлять все, что в / сайта ходит - на /levaia_dira.
Тупил хер, получая невразумительные урлы.
А ларчик просто открывался:
RewriteEngine on
#инаблим реврайт
RewriteCond %{HTTP_HOST} ^sait.ru$
#все, что ходит на домен
RewriteCond %{REQUEST_URI} !^/levaia_dira/
#но не в levaia_dira
RewriteRule ^(/)?$ /levaia_dira/ [R]
#отправляем куда нам надо

Сперва думал, есть решение через Redirect. Однако, не нашел.