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

Попытка настроить SFTP только в chroot jail для одного пользователя

Надеюсь, вы, ребята, сможете помочь и посмотреть, не сделал ли я здесь что-то странное. Я пытаюсь войти в систему с пользователем, которого я настроил, FileZilla показывает мне:

Command:    open "///@///" Command: Pass: ********
Status: Connected to ///
Error:  Connection closed by server with exitcode 1
Error:  Could not connect to server

Итак, я зашел в auth.log и вижу следующее:

Feb 12 11:08:49 sshd[12056]: Accepted password for /// from /// port /// ssh2
Feb 12 11:08:49 sshd[12056]: pam_unix(sshd:session): session opened for user /// by (uid=0)
Feb 12 11:08:50 sshd[12164]: subsystem request for sftp by user ///
Feb 12 11:08:50 sshd[12056]: pam_unix(sshd:session): session closed for user ///

Это запись passwd для рассматриваемого пользователя:

///:x:666:666:///,,,:/chroot:/usr/bin/rssh

Если я попробую запустить rssh сам, я получу Allowed commands: sftp так что кажется, что он настроен правильно. Что касается папки, которую я установил в качестве домашней папки, она принадлежит группе "sftp", членом которой является пользователь.

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

редактировать: Он отлично работает, если я изменю / usr / bin / rssh на / bin / bash, но пользователь по-прежнему может просматривать всю систему, что не идеально. По сути, я хочу, чтобы пользователь заходил прямо в каталог, делал там все, что захотел, вплоть до чтения и записи файлов, но не мог переходить в файловую систему, запускать другие двоичные файлы и так далее.

1. Создайте новую группу

Создайте группу под названием sftpusers. Только пользователи, принадлежащие к этой группе, будут автоматически ограничены в среде chroot SFTP в этой системе.

# groupadd sftpusers

2. Создать пользователей (или изменить существующего пользователя)

Допустим, вы хотите создать пользователя-гостя, которому должно быть разрешено только выполнение SFTP в среде chroot, и ему не должно быть разрешено выполнять SSH.

Следующая команда создает guestuser, назначает этого пользователя группе sftpusers, делает / incoming в качестве домашнего каталога, устанавливает / sbin / nologin в качестве оболочки (что не позволит пользователю использовать ssh и получить доступ к оболочке).

# useradd -g sftpusers -d /incoming -s /sbin/nologin guestuser
# passwd guestuser

Убедитесь, что пользователь был создан правильно.

# grep guestuser /etc/passwd
guestuser:x:500:500::/incoming:/sbin/nologin

Если вы хотите изменить существующего пользователя и сделать его только пользователем sftp и поместить его в тюрьму chroot sftp, сделайте следующее:

# usermod -g sftpusers -d /incoming -s /sbin/nologin john

Кстати, если вам нужно перенести файлы из Windows в Linux, используйте любой из клиентов sftp, упомянутых в этом списке 7 лучших клиентов sftp.

3. Настройте подсистему sftp-server в sshd_config

Вы должны указать sshd использовать внутренний sftp для sftp (вместо sftp-server по умолчанию).

Измените файл / etc / ssh / sshd_config и закомментируйте следующую строку:

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

Затем добавьте следующую строку в файл / etc / ssh / sshd_config

Subsystem       sftp    internal-sftp

Должно получиться так:

# grep sftp /etc/ssh/sshd_config
#Subsystem      sftp    /usr/libexec/openssh/sftp-server
Subsystem       sftp    internal-sftp

4. Укажите корневой каталог для группы.

Вы хотите поместить только определенных пользователей (то есть пользователей, принадлежащих к группе sftpusers) в среду chroot jail. Добавьте следующие строки в конец / etc / ssh / sshd_config

Match Group sftpusers
        ChrootDirectory /sftp/%u
        ForceCommand internal-sftp

Выше:

  • Match Group sftpusers - указывает, что следующие строки будут сопоставлены только для пользователей, которые принадлежат к группе sftpusers
  • ChrootDirectory / sftp /% u - это путь, который будет использоваться для chroot после аутентификации пользователя. % u указывает пользователя. Итак, для джона это будет / sftp / john.
  • ForceCommand internal-sftp - принудительное выполнение внутреннего sftp и игнорирование любых команд, упомянутых в файле ~ / .ssh / rc.

5. Создайте домашний каталог sftp.

Поскольку мы указали / sftp как ChrootDirectory выше, создайте этот каталог (который является эквивалентом вашего обычного каталога / home).

# mkdir /sftp

Теперь в / sftp создайте отдельные каталоги для пользователей, которые входят в группу sftpusers. то есть пользователи, которым будет разрешено только выполнять sftp и будут находиться в среде chroot.

# mkdir /sftp/guestuser

Итак, / sftp / guestuser эквивалентен / для гостевого пользователя. Когда guestuser sftp входит в систему и выполняет «cd /», он будет видеть только содержимое каталогов в «/ sftp / guestuser» (а не реальный / системы). В этом сила chroot.

Итак, в этом каталоге / sftp / guestuser создайте любой подкаталог, который вы хотите, чтобы пользователь видел. Например, создайте входящий каталог, в котором пользователи могут изменять свои файлы.

# mkdir /sftp/guestuser/incoming

6. Настройте соответствующие разрешения

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

Установите принадлежность пользователю и сгруппируйте его в группу sftpusers, как показано ниже.

# chown guestuser:sftpusers /sftp/guestuser/incoming

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

# ls -ld /sftp/guestuser/incoming
drwxr-xr-x 2 guestuser sftpusers 4096 Dec 28 23:49 /sftp/guestuser/incoming

Разрешение для каталога / sftp / guestuser будет выглядеть следующим образом

# ls -ld /sftp/guestuser
drwxr-xr-x 3 root root 4096 Dec 28 23:49 /sftp/guestuser

# ls -ld /sftp
drwxr-xr-x 3 root root 4096 Dec 28 23:49 /sftp

7. Перезапустите sshd и протестируйте Chroot SFTP.

Перезагрузите sshd:

# service sshd restart

Протестируйте среду chroot sftp. Как вы видите ниже, когда gusetuser выполняет sftp и выполняет «cd /», они будут видеть только входящий каталог.

# sftp guestuser@thegeekstuff.com
guestuser@thegeekstuff's password:

sftp> pwd
Remote working directory: /incoming

sftp> cd /
sftp> ls
incoming

Когда guestuser передает какие-либо файлы из sftp в каталог / incoming, они действительно будут находиться в каталоге / sftp / guestuser / incoming в системе.