...

Пускане на Апах с рестриктнат юзер под Линукс

Apache с mpm_itk, работещ като потребител с орязани права
преди 7 месеца

Използвайки Линукс лесно може да ограничим достъпа на потребителите с публичен достъп, какъвто е потребителя, с който е стартиран даден сайт. В примера ще ползваме потребителя laravel-vue.eu, който ще го ограничим да използва само scp/sftp достъп и само до неговата домашна директория.

  1. инсталираме rssh в различните дистрибуции е различно, аз ползвам Gentoo:
    emerge app-shells/rssh
    # добавяме го към шеловете
    echo "/usr/bin/rssh" >> /etc/shells
  2. Създаваме потребителя:
    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.
  3. Добавяне на 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

  4. Създайте нужните директории, в които ще се хоства сайта и дайте права на 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
  5. Ограничаваме достъпа през ссх на 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

  6. Променяме конфигурацията на апаха за сайта:

    <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, тъй като сме ограничили достъпа чрез ссх конфигурацията