Я думаю, если вы добавите
if grep "\\<${USER}\\>" /etc/jailbirds > /dev/null
then
echo I am not a crook
else
exec chroot $CWD
endif
до конца вашего /etc/profile
вы можете получить то, о чем просите, но у него могут быть некоторые побочные эффекты, о которых я не знаю (захват оболочки /etc/profile
может вызвать проблемы). В этом случае вам нужно будет создать файл /etc/jailbirds
который представляет собой список пользователей, для которых вы хотите использовать chroot. Вам также нужно убедиться, что этот файл существует, и решить, что делать в случае ошибок при доступе к нему, чтобы другие пользователи (особенно root) не были заблокированы chroot.
Кроме того, это будет сложно. Пользователь не сможет получить доступ к /proc
что приведет к тому, что многие утилиты оболочки (такие как ps
, top
и многие другие) не будут работать. Пользователь также не сможет получить доступ к /dev/null
, что сломает много вещей.
Пользователь также не сможет получить доступ к /dev/tty
который будет ломаться все less
и more
при использовании со стандартным вводом. Пользовательские приложения будут наследовать дескрипторы открытых файлов stdin, stdout и stderr от до chroot, но меньше открывают /dev /tty, чтобы пользователь мог получать нажатия клавиш для перенаправления stdin из канала.
Вы также не сможете получить доступ к каким-либо программам, общим библиотекам или множеству файлов, которые находятся в каталоге /etc (например, /etc /protocol), который используется многими программами.
Все это вещи, которые вы можете обойти, но в конечном итоге вам нужно будет сделать гораздо больше работы, чтобы сделать среду пользователя удобной в использовании, чем, я думаю, вы рассматривали.
Если вы попробуете мое предложение, я предлагаю вам быть очень осторожным. Было бы легко ошибиться и все испортить. Я не проверял это, кстати.