我使用的是 Debian 9(Stretch)。我有一个deploy
用户,我已将 shell 设置为/bin/rbash
.这是来自的行/etc/passwd
:
deploy:x:9000:9000::/home/deploy:/bin/rbash
如果我是 root 用户,并且运行su - deploy
或su -l deploy
,那么它将启动rbash
(echo $SHELL # => /bin/rbash
),但命令不受限制:
~$ echo $SHELL
/bin/rbash
~$ cd /tmp
/tmp$ echo asdf > /tmp/file
/tmp$ /bin/cat /tmp/file
asdf
# (Should not allow any commands with a slash)
如果我只是跑su deploy
:
~$ echo $SHELL
/bin/rbash
~$ cd /tmp
rbash: cd: restricted
~$ /bin/cat /etc/passwd
rbash: /bin/cat: restricted: cannot specify `/' in command names
rbash
如果这是登录 shell,为什么不应用任何限制?
答案1
来自 Bash 手册:
如果 Bash 以 name 启动
rbash
,或者在调用时提供--restricted
或-r
选项,则 shell 会受到限制。
现在,“从名字开始”意味着$0
,或者的第零个元素argv
是那个名字。但是当su
它作为登录 shell 启动时,它会将名称设置为-su
.并且该选项也没有使用,因此在启动登录 shell-r
时,没有使用启动受限 shell 的方法。su
对于其他正确的登录方式(例如 SSH 或login(1)
通过 TTY),它应该仍然有效。