Я хочу ограничить пользователей SFTP их домашней папкой, чтобы они не видели чужие папки / домашние каталоги. К сожалению, все пользователи SFTP в данный момент могут видеть папки других пользователей. Все сообщения и примеры указывают ChrootDirectory
но по какой-то причине я не могу заставить его работать.
$ sudo nano /etc/ssh/sshd_config
Subsystem sftp internal-sftp
Match Group sftp
ChrootDirectory %h # The %h causes "Broken pipe" error while trying to login
ChrootDirectory /var/sftp # This allows login but all SFTP folders are visible to all user
X11Forwarding no
AllowTcpForwarding no
AllowAgentForwarding no
PermitTunnel no
ForceCommand internal-sftp
Пользователи, разрешения и папки
Я использовал команду ниже для создания пользователей и папок.
sudo useradd -m -d /var/sftp/hello -G sftp hello --shell /usr/sbin/nologin
Результат
ubuntu@linux:~$ grep hello /etc/passwd
hello:x:1001:1002::/var/sftp/hello:/usr/sbin/nologin
ubuntu@linux:~$ grep world /etc/passwd
world:x:1002:1003::/var/sftp/world:/usr/sbin/nologin
ubuntu@linux:~$ ls -l /var/
drwxr-xr-x 4 root root 4096 May 7 14:48 sftp
ubuntu@linux:~$ ls -l /var/sftp/
drwxr-xr-x 3 hello sftp 4096 May 7 14:01 hello
drwxr-xr-x 2 world sftp 4096 May 7 14:48 world
РЕШЕНИЕ
Проблема в том, что я должен был позволить root:root
владеть домашней папкой моих пользователей и создать другую папку в домашней папке пользователей (например, uploads
), тогда владейте им как hello|world:sftp
. Первоначально домашние папки принадлежали hello|world:sftp
.
По соображениям безопасности пользователи под chroot
не должен иметь возможность создавать произвольные файлы (например /etc/shadow
и бесчисленное множество других). Вот почему sshd вынуждает вас лишить права владения и записи самого chrooted каталога:
chown root:root /var/sftp/hello
chmod o-w /var/sftp/hello
Альтернативное решение, без sshd ChrootDirectory
зависит от того, что пользователь может перечислить каталог только в том случае, если у него есть r
разрешение, при его использовании требуется только x
разрешение:
chown root:root /var/sftp
chmod o=x /var/sftp # implicitly removes rw, sets only x