Назад | Перейти на главную страницу

Каковы правильные разрешения Linux внутри chroot jail с помощью userpec

Я пытаюсь настроить 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