
Пускане на Апах с рестриктнат юзер под Линукс
Apache с mpm_itk, работещ като потребител с орязани права
Използвайки Линукс лесно може да ограничим достъпа на потребителите с публичен достъп, какъвто е потребителя, с който е стартиран даден сайт. В примера ще ползваме потребителя laravel-vue.eu, който ще го ограничим да използва само scp/sftp достъп и само до неговата домашна директория.
- инсталираме rssh в различните дистрибуции е различно, аз ползвам Gentoo:
emerge app-shells/rssh # добавяме го към шеловете echo "/usr/bin/rssh" >> /etc/shells
- Създаваме потребителя:
useradd -d /home/laravel-vue.eu -m -s /usr/bin/rssh laravel-vue.eu # задаваме парола на потребителя passwd laravel-vue.eu
сега може да прабвате ограничението на rssh:
su laravel-vue.eu -
- излиза надписThis account is restricted by rssh. This user is locked out. If you believe this is in error, please contact your system administrator.
- Добавяне на mpm_itk - модул към апаха, който позволява всеки сайт да се стартира като различен потребител:
emerge www-apache/mpm_itk # за да го активирате трябва да промените в /etc/conf.d/apache2: APACHE2_OPTS="-D DEFAULT_VHOST -D SECURITY -D PHP -D MPM_ITK" # редактирайте и /etc/apache2/modules.d/00_mpm_itk.conf като въведете за минимални стойности uid/gid на апаха <IfDefine MPM_ITK> LoadModule mpm_itk_module modules/mpm_itk.so LimitUIDRange 81 2000 LimitGIDRange 81 2000 </IfDefine>
При някой дистрибуции вместо редакция на
/etc/conf.d/apache2
трябва да пуснете модула чрезa2emod mpm_itk
- Създайте нужните директории, в които ще се хоства сайта и дайте права на laravel-vue.eu само върху нея, домашната директория я правим собственост на рут. това е изискване за да може да ограничим sftp/scp достъпа само до тази директория
mkdir /home/laravel-vue.eu/public chown -R laravel-vue.eu:laravel-vue.eu /home/laravel-vue.eu/public chown root:root /home/laravel-vue.eu
- Ограничаваме достъпа през ссх на laravel-vue.eu като в /etc/ssh/sshd_config добавяме
Match User laravel-vue.eu ForceCommand internal-sftp PasswordAuthentication yes ChrootDirectory /home/laravel-vue.eu PermitTunnel no AllowAgentForwarding no AllowTcpForwarding no X11Forwarding no
рестартираме ссх, за да имат ефект новите настройки:
rc-service sshd restart
-
Променяме конфигурацията на апаха за сайта:
<VirtualHost laravel-vue.eu:80> ServerName laravel-vue.eu ServerAdmin admin@design-m.eu DocumentRoot "/home/laravel-vue.eu/public" setenvIf Request_URI ".(jpg|jpeg|png|css|gif|ico|js)$" dontlog ErrorLog "/var/log/apache2/01.lv.err.log" LogFormat "%v %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" VLOG=%{VLOG}e" combined CustomLog "/var/log/apache2/01.lv.acc.log" combined env=!dontlog <Directory "/home/laravel-vue.eu/public"> Options FollowSymLinks AllowOverride All Require all granted </Directory> AssignUserID laravel-vue.eu laravel-vue.eu </VirtualHost>
Добавяме някакво судържание, за да тестваме сайта
echo "laravel-vue.eu" > /home/laravel-vue.eu/public/index.php
, рестартираме апаха и готово. SFTP/SCP достъпа трябва да е с директория само/public
, тъй като сме ограничили достъпа чрез ссх конфигурацията