ディレクトリの作成を制限せずにディレクトリ内のファイルの生成を制限するために権限またはfaclを使用できますか?

ディレクトリの作成を制限せずにディレクトリ内のファイルの生成を制限するために権限またはfaclを使用できますか?

私は、さまざまなユーザーが作成したファイル(スクリプト)でいっぱいのかなり許容できる権限を持ついくつかのディレクトリを持っています。私は人々に独自のサブディレクトリを作成し、その中にファイルを追加することをお勧めしますが、一部の人はそうしないため、ルートスクリプトディレクトリが他の人にとって興味深いものでいっぱいになることがあります。

人々がルートディレクトリにファイルを作成するように説得するには限られた成功がありましたが、まだすべてのユーザーがすべてのスクリプトにアクセスできる必要があるため、次のようにサブディレクトリにスクリプトを作成するポリシーを適用できることを願っています。権限またはアクセス制御のリスト。

もしそうなら、ユーザーはルートスクリプトフォルダにのみディレクトリを作成でき、これらのサブディレクトリにのみスクリプトを作成できますか?

ベストアンサー1

これは素晴らしい解決策ではありませんが、次のようになります。

  • あなた、名前付きユーザー、または擬似ユーザーまたはグループ(自分のメンバーがメンバーではない)だけがディレクトリに書き込むことができます。
  • これに対するラッパーを注意深く作成し、mkdirsetuidまたはsetgidを使用してインストールします。


  • group/setgid オプションを選択すると、次のように簡単になります。
    mkdir("root_script/<ユーザーフォルダ名>",0755);

    そして、フォルダを作成したユーザーがフォルダを所有することに興味がない場合は、プログラムがsetuidであれば実行する必要があります。そうでなければ、
  • プログラム setuid ルートを作成する場合は、非常に注意して、不適切な使用を確認してください。
    mkdir("root_script/<ユーザーフォルダ名>",0755);
    chown(「ルート_スクリプト/<ユーザーフォルダ名>」、<ユーザーのUID><ユーザーのGID>);
  • プログラムをroot以外のユーザーに設定した場合は、ディレクトリroot_scripts(またはその下のどこかに)にグローバルに書き込み可能なサブディレクトリを作成し、次の操作を実行します。
    euid = geteuid();
    ruid = getruid();
    seteuid(ruid); //プログラムを実行している人
    mkdir("root_scripts/.writable_subdir/<ユーザーフォルダ名>",0755);
    seteuid(euid); // プログラムの所有者と最上位ディレクトリ
    rename("root_scripts/.writable_subdir/<ユーザーフォルダ名>、「ルートスクリプト/<ユーザーフォルダ名>");

おすすめ記事