Пользователь SFTP с доступом только к определенной папке — запрещено создавать файлы

Пользователь SFTP с доступом только к определенной папке — запрещено создавать файлы

Итак, я пытаюсь создать пользователя, который имеет доступ только к определенной папке внутри моей public_htmlпапки. Я успешно создал пользователя и могу войти в систему. У меня были некоторые проблемы со входом в систему в начале, потому что папка должна была принадлежать root, прежде чем пользователь sftp мог выполнить sftp.

Поэтому я следовал этому руководству:https://serverfault.com/questions/584986/bad-ownership-or-modes-for-chroot-directory-component- с указанием изменить владельца папки на root.

После этого я могу успешно войти в систему, однако после входа я не могу добавлять файлы или делать что-либо в этой папке, так как она принадлежит пользователю root.

Я попробовал создать группу и добавить пользователя root и пользователя sftp в качестве членов этой группы, но это тоже не сработало.

Я решил обойти эту проблему, создав еще один каталог внутри папки sftp, используя пользователя root, а затем изменив владельца на пользователя sftp, но мне это кажется слишком хакерским и дополнительно добавляет еще одну папку в древовидную структуру, что мне не очень нравится.

Есть идеи, как разрешить пользователю sftp доступ на запись в папку, при этом root останется владельцем?

решение1

На нескольких сайтах обмена стеками много разговоров об этом. Но если это не дубликат...

В моем CentOS 7, когда вы используете ChrootDirectory для ограничения пользователя каталогом, этот каталог должен принадлежать root и не может разрешить запись любому другому пользователю ни по разрешениям, ни по FACL. Вы можете настроить символическую ссылку, но пользователь sftp не сможет перейти по ней, если он/она ограничен каталогом. Поэтому вам придется сделать это.

Создать пользователя

useradd ftp_user

установить пароль

passwd ftp_user

Настройте разрешения. Его домашний каталог станет его тюрьмой.

chown root:root /home/ftp_user
chmod 0755 /home/ftp_user

Ограничьте пользователя этой зоной сейчас

vi /etc/ssh/sshd_config

Изменить это:

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

к

Subsystem sftp internal-sftp

Добавлять

Match User ftp_user
    ChrootDirectory %h
    ForceCommand internal-sftp
    AllowTCPForwarding no
    X11Forwarding no

Сохраните и выйдите из vi.

Не забудьте:

systemctl restart sshd 

Теперь мы обманем их. Допустим, у вашего клиента есть веб-сайт, с которым вы собираетесь позволить ему продолжать играть по адресу /var/www/corny_website

Убедитесь, что у него есть разрешения на этот каталог.

setfacl -m u:ftp_user:rwx /var/www/corny_website
setfacl -d -m u:ftp_user:rwx /var/www/corny_website

Теперь вы монтируете его, а не создаете на него символическую ссылку.

mkdir /home/ftp_user/corny_website
mount --bind /var/www/corny_website /home/ftp_user/

Теперь, когда пользователь зайдет по sftps, он не получит эту ошибку о сломанном канале, и он сможет видеть только /home/ftp_user и, что еще важнее, он сможет загружать или скачивать только с /var/www/corny_website, который он видит как /corny_website.

Связанный контент