Изменение разрешений на запись для защищенного SFTP запрещает вход в систему

14

Я изучил многие веб-сайты и форумы о том, как настроить пользователя SFTP, который помещен в определенный каталог с помощью CHROOT. Вот шаги, которые я выполнил, но я не могу получить разрешение на запись для работы.

Настроить

sshd_config

#Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp


Match group webmaster
        X11Forwarding no
        ChrootDirectory %h
        AllowTcpForwarding no
        ForceCommand internal-sftp

Создать папку

mkdir /var/www/sites

Создать пользователя и группу

useradd uploader
passwd uploader
usermod -d /var/www/sites uploader
groupadd webmaster uploader
groupadd www-data uploader

Разрешения и владение

chown root:root /var/www
chmod 755 /var/www/sites

Теперь с этими настройками пользователь может загружать SFTP в домашний каталог, но не может записывать в каталог.

Возникают 2 типичные ошибки: я либо не могу войти, либо у меня нет прав на запись.

Ошибка входа

Error:    Network error: Software caused connection abort
Error:    Could not connect to server


Changing permissions of /var/www/sites to 775 or 777 causes login error.
chown /var/www/sites to uploader:root causes login error.
chwon root:webmaster or root:www-data I have no write permissions

Я в конце концов пытаюсь понять это, и если бы кто-то мог указать мне правильное направление, я был бы очень признателен.

Спасибо.

onggie
источник

Ответы:

16

Обнаружил решение. Пользователь заключен в тюрьму /var/www/sites. Затем я создал еще одну папку /var/www/sites/site1.

Я использую:

chown root:webmaster /var/www/sites/site1 
chmod 775 /var/www/sites/site1

Это позволило домашнему каталогу иметь правильные разрешения для входа в систему, а затем иметь возможность записи в следующую папку.

Если пользователю требуется доступ с правом записи /var/www/sites, то вы должны заключить в тюрьму пользователя, у /var/wwwкоторого есть root:rootправо владения и права 755. Затем вам нужно предоставить /var/www/sitesправо владения root: (ваша группа) и разрешениями 775.

onggie
источник
1

Возможно самое лучшее решение:

mkdir /var/www/sites/myfirstuser/hisownsite
mkdir /var/www/sites/myseconduser/hisownsite

...

chown root:root /var/www/sites /var/www/sites/{myfirstuser,myseconduser} && chmod 755 /var/www/sites/{myfirstuser,myseconduser}

chmod 775 /var/www/sites/myfirstuser/hisownsite
chmod 775 /var/www/sites/myseconduser/hisownsite
chgrp www-data /www/sites/myfirstuser/hisownsite /var/www/sites/myseconduser/hisownsite

Добавьте пользователей:

useradd -d /var/www/sites/myfirstuser -s /bin/false -g www-data  dev1
useradd -d /var/www/sites/myseconduser -s /bin/false -g www-data dev2
passwd dev1
passwd dev2

Затем для каждого созданного вами пользователя добавьте тег ssh, например, такой: (вы также можете использовать директиву Match Group, как в вашем примере, вместо «Match User»)

Match User dev1
    ChrootDirectory %h
    ForceCommand internal-sftp
    AllowTcpForwarding no

Match user dev2
    ChrootDirectory %h
    ForceCommand internal-sftp
    AllowTcpForwarding no

Таким образом, вы можете управлять всеми нужными пользователями в изолированной среде.

Hth, Фабрицио

fabreg
источник
Ваш последний блок кода: они Matchподдерживают несколько целей в списках, разделенных запятыми, поэтому мы могли бы значительно упростить / привести в порядок, имея один набор переопределений для обоих пользователей, по заголовкуMatch User dev1,dev2
underscore_d
1
Итак, как вы установите его так, чтобы они были заблокированы в папке, к которой у них есть права на чтение / запись?
Кевин Би Бернс