I want to create a new user with a restricted shell so I :
ln -s bash rbash # create a symbolic link to bash with a name "rbash"
useradd -s /bin/rbash student # add a new user with a shell pointing to that symlink I've created
passwd student # create a password
su - student # Login as a user
However afterwards I can cd into wherever I want. Похоже, ограниченная оболочка не работает. Зачем ?
В man bash
ограниченная оболочка упоминается следующим образом:
Если bash начинаются с имени rbash, или опция -r указана в вызов, оболочка становится ограниченной.
Однако, похоже, что версия su
в Ubuntu 18.04 заменяет имя оболочки на su
; поэтому, когда bash смотрит на свой argv [0]
, он видит su
(или -su
в случае, когда su
был вызван с одним из -
, -l
или - параметры входа
) вместо rbash
(или -rbash
) .
Вы действительно можете изменить это поведение, отредактировав файл /etc/login.defs
и закомментировав настройку SU_NAME
:
# If defined, the command name to display when running "su -". For
# example, if this is defined as "su" then a "ps" will display the
# command is "-su". If not defined, then "ps" would display the
# name of the shell actually being run, e.g. something like "-sh".
#
# SU_NAME su
Является ли это хорошей идеей, или может иметь другие непредвиденные последствия, я не могу сказать.