Я пытаюсь настроить chroot jail, потом сделал:
which binary
ldd /bin/binary
Тогда я сделал:
cp /lib64/{libs} $jail/lib64
cp /usr/lib64/{libs} $jail/usr/lib64
PS: Во время этой настройки я обнаружил, что / lib64 требует специальных разрешений r-x, только r-- не будет работать (внутри или вне chroot).
Скопировал двоичный файл в $ jail, создал / home / jailuser.
Создал proc, dev, sys и смонтировал их.
Найдены uid и gid для jailuser: users
Сменил владельца домашнего каталога:
chown jailuser:users
chmod 700 (for dirs)
chmod 600 (for files)
Сменил владельца других файлов на root: root, а о разрешениях см. Вперед.
Потом под root попал в тюрьму:
export USER=jailuser (and I did the same with LOGNAME, HOME)
cd $jail
chroot --userspec=$uid:$gid $jail $jail/binary
Это сработало, но:
В моем локальном ящике работал только со всеми разрешениями не jailuser как 005.
В KVM VPS попробовал то же самое, но единственное разрешение, которое сработало, было 050!
Пожалуйста, кто-нибудь знает:
1) Почему локальный работает только с минимум 005, а удаленный работает только с минимум 050 (обе системы одинаковы)?
2) Есть ли лучший способ настроить разрешения внутри chroot jail? (Но сохраняя root: права собственности root, поэтому пользователь / процесс не может изменять "системные" файлы) ...
3) Есть ли лучший способ запустить эту тюрьму от имени непривилегированного пользователя, кроме использования опции --userspec?
Спасибо!
Думаю, я понял! Я предполагаю, что иногда системе нужно перейти на пользователя, который находится внутри корневой группы и нуждается в библиотеках (может быть, система или никто?), И поэтому lib64 и usr / lib64 действительно нуждаются как минимум в 050 разрешениях.
Мой последний сценарий для установки разрешений таков (протестирован и работает):
#Create vars
u=jailuser
g=users
home=/home/$u
jail=$home/jail
#Set normal home
u=jailuser
g=users
cd $home
find . -type d -exec chown $u:$g {} +
find . -type f -exec chown $u:$g {} +
find . -type d -exec chmod 700 {} +
find . -type f -exec chmod 600 {} +
#Set jail
u=root
g=root
cd $jail
find . -type d -exec chown $u:$g {} +
find . -type f -exec chown $u:$g {} +
find . -type d -exec chmod 511 {} +
find . -type f -exec chmod 100 {} +
#Set lib64
cd $jail/lib64
find . -type f -exec chmod 555 {} +
#Set usr/lib64
cd $jail/usr/lib64
find . -type f -exec chmod 555 {} +
#Set binary
chmod 511 $jail/binary
#Set etc
chmod 544 $jail/etc/passwd
chmod 544 $jail/etc/group
#Set tmp
chmod 777 $jail/tmp
#Set jailed home
u=jailuser
g=users
cd $jail$home
find . -type d -exec chown $u:$g {} +
find . -type f -exec chown $u:$g {} +
find . -type d -exec chmod 700 {} +
find . -type f -exec chmod 600 {} +
cd $home