読み取りアクセス権を持たないディレクトリで「which」がコマンドをどのように検索しますか?

読み取りアクセス権を持たないディレクトリで「which」がコマンドをどのように検索しますか?

マイタスクコンピュータで、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/logrotatewhichコマンドは、存在するかどうかとユーザーに実行権限があることを確認するだけで動作します。

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もっと議論してみてください。

関連情報