Попытка настроить 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 / входящий в системе.