%20%E3%81%AE%E3%83%AD%E3%82%B0%E3%82%A4%E3%83%B3%20%E3%82%B7%E3%82%A7%E3%83%AB%E3%81%AB%20rbash%20%E3%81%8C%E5%88%B6%E9%99%90%E3%82%92%E9%81%A9%E7%94%A8%E3%81%97%E3%81%AA%E3%81%84%E3%81%AE%E3%81%AF%E3%81%AA%E3%81%9C%E3%81%A7%E3%81%99%E3%81%8B%3F.png)
deploy
私は Debian 9 (Stretch) を使用しています。シェルを に設定したユーザーがいます/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
これがログイン シェルの場合、制限が適用されないのはなぜですか?
答え1
Bash マニュアルより:
Bash が という名前で起動された場合
rbash
、または起動時に--restricted
または-r
オプションが指定された場合、シェルは制限されます。
さて、「名前から始まった」というのは$0
、またはの0番目の要素argv
はその名前です。しかし、su
がログイン シェルとして起動すると、名前が に設定されます-su
。また、-r
オプションも使用されなかったため、 がログイン シェルを起動するときには、制限付きシェルを起動するどちらの方法も使用されませんでしたsu
。
他の適切なログイン手段 (SSH やlogin(1)
TTY 経由など) でも有効になるはずです。