Не удалось su после создания chroot тюрьмы
На 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 в этой ситуации?
PS Вот разрешения для некоторых файлов, это может быть полезно для решения проблемы:
-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
Update1
После некоторых изменений мне удалось подключиться к user1, но сессия сразу же закрывается! Я предполагаю, что это проблема PAM, однако не могу найти способ исправить это.
Здесь запись в журнале для близких действий от /val/log/secure
:
Oct 6 15:19:42 localhost su: pam_unix(su:session): session closed for user user1
Что заставляет сеанс выходить сразу после запуска?
2 ответа
Чтобы исправить 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).
Я нашел решение.
Прежде всего вы должны забыть о make_chroot_jail.sh и использовать Jailkit.
Я столкнулся с некоторыми проблемами при его использовании, но в конце концов все работает.
Вот шаги, как я использовал Jailkit и как я устранял возникающие проблемы:
А. До ./configure; make; make install
как это описано в INSTALL.txt
,
Б. Добавить /usr/sbin
к $PATH
если это еще не там.
C. Сделай это:
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