マイタスクコンピュータで、whichコマンドが読み取り権限のないディレクトリに実行可能ファイルを見つけることができることがわかりました。
$ export PATH=/usr/sbin:$PATH
$ ls /usr/sbin
ls: cannot open directory '/usr/sbin': Permission denied
$ which logrotate
/usr/sbin/logrotate
どのように動作しますか?素直に、私はlogrotate
それが変数のディレクトリにリストされているファイルの1つであることを確認することによってこれを行います$PATH
。これで失敗します。
答え1
/usr/sbin/logrotate
whichコマンドは、存在するかどうかとユーザーに実行権限があることを確認するだけで動作します。
chmod -r /usr/sbin
読み取り権限()が不足すると、/usr/sbin
ディレクトリのリストが表示されず、タブの完成やワイルドカードの拡張が防止されますが、特定の名前が存在することを確認するには実行ビット(chmod +x /usr/sbin
)のみが必要です。これにより、既知の名前のファイルメタデータへのアクセスが許可されます。
一方、ディレクトリに対する実行権限を無効にすると、which
ユーザーがファイルに対する実行権限を持っていてもコマンドが見つからず実行できなくなります。私たちはもはやそれにアクセスできません。
$ sudo chmod -x /usr/sbin/
$ which logrotate # finds nothing
$ logrotate
Command 'logrotate' not found, but can be installed with:
sudo apt install logrotate
バラよりhttps://unix.stackexchange.com/a/62476/120312もっと議論してみてください。