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

Надеюсь, что вы, ребята, можете помочь и посмотреть, сделал ли я здесь что-то странное, я пытаюсь войти в систему с пользователем, которого я настроил, 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 ответ

Решение

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

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

# groupadd sftpusers

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

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

Следующая команда создает guestuser, назначает этого пользователя в группу sftpusers, создает / входящий в качестве домашнего каталога, устанавливает /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, упомянутых в этом списке самых популярных клиентов sftp.

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

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

Измените файл /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. Укажите каталог Chroot для группы

Вы хотите поместить только определенных пользователей (то есть пользователей, принадлежащих к группе 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 - запускает выполнение internal-sftp и игнорирует любые команды, упомянутые в файле ~ /.ssh / rc.

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

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

# mkdir /sftp

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

# mkdir /sftp/guestuser

Таким образом, / sftp / guestuser эквивалентен / для 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, они действительно будут находиться в каталоге / sftp / guestuser / входящий в системе.

Другие вопросы по тегам