На 64-битном хосте CentOS я использую скриптmake_chroot_jail.sh
поместить пользователя в тюрьму, не позволяя ему видеть ничего, кроме своего дома /home/jail/home/user1
.
Я сделал это, набрав следующее:
sudo ./make_chroot_jail.sh user1
после этого при первой попытке подключиться к user1 я получал ошибку типа:
/bin/su: user guest does not exist
Я исправил это, скопировав некоторые пропущенные библиотеки:
sudo cp /lib64/libnss_compat.so.2 /lib64/libnss_files.so.2 /lib64/libnss_dns.so.2 /lib64/libxcrypt.so.2 /home/jail/lib64/
sudo cp -r /lib64/security/ /home/jail/lib64/
Но теперь, когда я пытаюсь подключиться к пользователю user1, набирая его имя su user1
, а затем вводя его пароль, я получаю эту ошибку:
could not open session
Итак, вопрос в том, как подключиться к user1 в этой ситуации?
P.S. Вот разрешения некоторых файлов, это может быть полезно для поиска решения:
-rwsr-xr-x 1 root root /home/jail/bin/su
drwxr-xr-x 4 root root /home/jail/etc
-rw-r--r-- 1 root root /home/jail/etc/pam.d/su
-rw-r--r-- 1 root root /home/jail/etc/passwd
-rw------- 1 root root /home/jail/etc/shadow
ОБНОВЛЕНИЕ1
После некоторых изменений мне удалось подключиться к user1, но сессия сразу же закрывается! Я предполагаю, что это проблема PAM, однако не могу найти способ ее исправить.
Вот запись в журнале для действия закрытия /val/log/secure
:
Oct 6 15:19:42 localhost su: pam_unix(su:session): session closed for user user1
Что заставляет сессию завершаться сразу после запуска?
решение1
Чтобы исправить could not open session
проблему, не отказываясь полностью от make_chroot_jail.sh, вам также нужно скопировать /usr/lib/libcrack*
библиотеки. Отредактируйте скрипт, где он имеет:
# If you are using a 64 bit system and have strange problems with login comment
# the following lines in, perhaps it will work (motto: if you can't find the
# needed library just copy all of them)
#
# cp /lib/*.* ${JAILPATH}/lib/
# cp /lib/lib64/*.* ${JAILPATH}/lib/lib64/
Изменить на:
cp /lib/*.* ${JAILPATH}/lib/
cp /lib64/*.* ${JAILPATH}/lib64/
cp -rp /lib64/security ${JAILPATH}/lib64/
cp /usr/lib64/libcrack* ${JAILPATH}/usr/lib64/
Просто небольшое дополнение, вышеизложенное исправило эту проблему с 64-битной SuSE - SLES 11 sp2. Я также переименовал в $JAILPATH/lib
. $JAILPATH/lib64
И для этой ОС мне пришлось добавить пустой файл /etc/profile в джейл (вы можете использовать его для вставки приглашения PS1).
решение2
Я нашел решение.
Прежде всего, вам следует забыть о make_chroot_jail.sh и использоватьJailkit.
У меня возникли некоторые проблемы при использовании, но в итоге все заработало.
Вот шаги, которые я выполнил с помощью Jailkit и как я исправил возникавшие проблемы:
А. Сделайте ./configure; make; make install
так, как описано в INSTALL.txt
.
Б. Добавить, /usr/sbin
если $PATH
его еще нет.
В. Сделайте это:
jk_init -v -j /home/jail basicshell editors extendedshell netutils ssh sftp scp
Это может привести к сбою с таким сообщением об ошибке:
`ERROR: configfile /usr/jk_init.ini does not exist`
Чтобы исправить это, /usr/sbin/jk_init
измените INIPREFIX='/usr'
на INIPREFIX='/etc/jailkit'
и повторите попытку.
D. Сделайте это:
jk_jailuser -v -m -j /home/jail customer01
Это может привести к сбою с таким сообщением об ошибке:
invalid shell, /home/jail/usr/sbin/jk_lsh does not exist
Чтобы исправить, сделайте следующее:
jk_init -v -j /home/jail jk_lsh
и попробуйте еще раз. Вместо этого вы можете добавить jk_lsh
в список на шаге C.
E. Теперь при попытке подключения к customer01 соединение может выйти сразу после запуска. Чтобы исправить эту проблему, /home/jail/etc/passwd
измените оболочку customer01 и установите ее на bash следующим образом:
customer01:x:518:601::/home/customer01:/bin/bash
вместо этого:
customer01:x:518:601::/home/customer01:/usr/sbin/jk_lsh