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

Chroot SFTP - можно разрешить пользователю писать в текущий (chroot) каталог

В настоящее время у меня РАБОТАЮЩАЯ учетная запись SFTP, использующая закрытый ключ для входа в систему, и пользователь chroot'ed в своем домашнем каталоге.

Цель: сохранить пользовательский chroot, но разрешить WRITE доступ к относительному каталогу chroot без необходимости указывать какой-либо путь или компакт-диск где-либо.

Другими словами, когда пользователь sftp входит в систему, я не хочу, чтобы ему приходилось переходить по другому пути, чтобы загрузить файл.

Из-за того, что каталог chroot требует полного владения root (из-за дизайна chroot), я не уверен, возможно ли это вообще.

В / etc / passwd:

sftpuser:x:1006:1006:,,,:/home/sftpuser:/bin/false

Ключ для входа пользователя находится в:

/home/sftpuser/.ssh/authorized_keys

Правила chroot в sshd_confg:

Match User sftpuser
    ChrootDirectory /home/sftpuser
    ForceCommand internal-sftp
    AllowTCPForwarding no
    X11Forwarding no

Разрешения для домашнего каталога:

# ls -l /home/ |grep sftpuser
drwxr-xr-x 5 root      root     4096 May  4 11:24 sftpuser

# ls -l /home/sftpuser/
total 4
drwxrw-r-x 3 sftpuser sftpuser 4096 May  4 11:23 sftp_share

Пример текущего рабочего процесса:

Connected to sftp.example.com.
sftp> ls
sftp_share

sftp> put testfile.txt
Uploading testfile.txt to /testfile.txt
remote open("/testfile.txt"): Permission denied

sftp> cd sftp_share

sftp> put testfile.txt
Uploading testfile.txt to /sftp_share/testfile.txt
testfile.txt

Желаемый рабочий процесс:

Connected to sftp.example.com.
sftp> put testfile.txt
Uploading testfile.txt to /testfile.txt
testfile.txt

Есть ли способ разрешить загрузку (размещение) в каталог по умолчанию без предварительного chdir?

У меня есть возможность перемещать эти каталоги. Например, каталог chroot sftp не обязательно должен находиться в домашнем каталоге пользователя, я даже могу изменить домашний каталог пользователя (но пользователь все равно должен иметь возможность использовать authorized_keys для входа в систему).

Пожалуйста, обратите внимание: Я понимаю многих клиентов SFTP, а клиент SFTP командной строки позволяет определять относительный путь при входе в систему. Это выходит за рамки этого вопроса, я хочу, чтобы эта конфигурация была выполнена на стороне сервера, и клиенту просто нужно войти в систему.

Привет, @emmdee Мне потребовалась целая вечность, чтобы понять, что в этом есть простой и приятный трюк. Вам просто нужно сделать root владельцем родительской папки, в которой вы хотите использовать sFTP, а затем использовать команду force, чтобы указать конкретному пользователю загрузить определенный DIR внутри каталога CHROOT.

В вашем случае, если вы хотите /home/sftpuser чтобы быть записываемым каталогом, вам нужно будет сделать корень владелец /home каталог, затем продолжайте и Force Command он /sftpuser как целевой каталог для этого пользователя или группы.

Ваш /etc/ssh/sshd_conf будет выглядеть так:

Match User sftpuser
    ChrootDirectory /home
    ForceCommand internal-sftp -d /sftpuser
    AllowTCPForwarding no
    X11Forwarding no

Как только это будет сделано, вы должны предоставить правильные разрешения, как было сказано ранее, корень должен владеть родительским (chroot) каталогом. /home в то время как пользователю должен принадлежать последний (-d) каталог /sftpuser. Я собираюсь предположить, что у вас есть группа пользователей sFTP под названием sftpusers, если не; просто опустите группу из следующих команд или замените ее пользователями (корень в первом и sftpusers во-вторых). Поскольку мы используем -R в командной строке для наследования, вам нужно будет начать с корневого владения перед владением пользователем следующим образом:

sudo chown -R root:sftpusers /home

затем для пользователя вы можете запустить:

sudo chown -R sftpuser:sftpusers /home/sftpuser

Я не уверен, что это необходимо, но вы всегда можете перезапустить службу sshd, чтобы убедиться, что все настройки снова перезагружены:

sudo systemctl restart sshd.service

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

Ура!

Я знаю, что прошло уже пару лет, но этот пост помог мне на 98%. после долгих поисков.

Чтобы сделать так, чтобы у меня были пользователи chroot и автоматически помещали их в их собственный каталог с разрешениями на запись, я использовал метод, предложенный African Idiot, а также создал исходный каталог chroot, принадлежащий пользователю root и группе ftp.

Но ключевым моментом для меня, чтобы сохранить их в этой папке и не иметь возможности .. и попытаться просмотреть папки других пользователей, было сделать папку chmod 710 (rwx--x---) чтобы группа ftp выполняла команду internal-sftp -d /% u (т.е. cd в подкаталог пользователей), и теперь, если я попытаюсь cd .. в верхний каталог, потому что никто не читает, кроме root, он не выполняется.

drwx--x---  6 root        sftpusers   uarch  6 Feb 19 15:34 ./
drwxr-xr-x  5 root        root        uarch  5 Feb  4 09:13 ../
drwxrwx---  3 anotheruser anotheruser uarch  3 Feb 24 15:34 anotheruser/
drwxrwx---  3 ftpuser     ftpuser     uarch 12 Feb 25 10:55 ftpuser/

надеюсь, это тоже поможет кому-то другому.