シナリオは次のとおりです。ルートとして実行できないコマンドラインプログラムがあります。要件の一部は、特定のフォルダ/ファイルに対する書き込み権限を持つ他のユーザーに警告することです。
例えば
- root ではなくユーザー A として実行しています。
- 「ユーザーBにフォルダFへの書き込み権限がありますか?」という質問に対する答えを得たいと思います。
だから私の質問は
- rootでも実行できますか?それではどうでしょうか?
- root以外のユーザーでこれを行う方法はありますか?
ベストアンサー1
一般に、ユーザーBがディレクトリDに書き込むことができるかどうかを知る唯一の方法は、ユーザーBがディレクトリDに書き込もうとすることです。
したがって、rootとしてsu
そのユーザーとして試すことができます。これは100%正確ではないかもしれませんが、ユーザーがログインしてパスワードを入力すると状況が変わる可能性があります(たとえば、pamモジュールはユーザーのパスワードに基づいて暗号化キーを設定できます)。
ほぼルートほど正確なので、システムコールや同様のコマンドをsu
ユーザーにaccess(2)
使用できます。test -w
マン/usr/bin/test
ページで警告されているように、NFSv2では実際スキャンはサーバー上で実行されますが、access
システムコールのテストはローカルで行われるため、間違っている可能性があります。同様に、FUSEファイルシステムも同じことができます。
(access(2)
マンページには、現在実行中の作業に重要な競合条件も記載されています。Dに対するBの権限は、確認する時間とBが実際にDに書き込もうとする時間の間で変更されることがあります。)
それに加えて、次のことをどれだけ正確に受け入れるかを決定する必要があります。
- ディレクトリ数を計算し、ユーザーとグループを確認できます(他のいくつかの回答に表示されます)。
- ディレクトリでACLを確認することもできます。
しかし、そうしても、次のような状況が問題を引き起こす可能性があります。
- NFSや他のさまざまなネットワークファイルシステムを介して仕える人アクセスを許可するかどうかを決定します。必要な方法で決定を下すことができます。たとえば、さまざまなPumpkin NFSエクスポートオプションを考えてみましょう。
- 権限の確認は実際にはファイルシステムによって行われます。 Unix以外のファイルシステムは予期しない答えを提供する可能性があります(UnixユーザーはどのようにNTFS SIDにマップしますか?)。すべての賭けはFUSEファイルシステムにあります。