Назад | Перейти на главную страницу

Ограничьте пользователей SFTP их домашней папкой

Я хочу ограничить пользователей 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