我想创建一个具有受限 shell 的新用户,因此我:
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
但是之后我可以通过 cd 进入任意位置。看来受限 shell 不起作用。为什么?
答案1
在中man bash
,限制壳被提及如下:
If bash is started with the name rbash, or the -r option is supplied at invocation, the shell becomes restricted.
但是,Ubuntu 18.04 中的版本似乎su
用 替换了 shell 的名称su
;因此当 bash 查看它时,argv[0]
它会看到su
(或在用、或选项之一调用的-su
情况下) 而不是(或)。su
-
-l
--login
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
我无法说这是否是一个好主意,或者是否会产生其他意想不到的后果。请注意,Ubuntu 的较新版本可能使用不同的实现/bin/su
(来自util-linux
包),可能不会表现出相同的行为。