为什么 rbash 在 Debian 9 (Stretch) 上不对登录 shell 应用任何限制?

为什么 rbash 在 Debian 9 (Stretch) 上不对登录 shell 应用任何限制?

我使用的是 Debian 9(Stretch)。我有一个deploy用户,我已将 shell 设置为/bin/rbash.这是来自的行/etc/passwd

deploy:x:9000:9000::/home/deploy:/bin/rbash

如果我是 root 用户,并且运行su - deploysu -l deploy,那么它将启动rbashecho $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),它应该仍然有效。

相关内容