私たちは、ユーザーが作成した特定のファイルのファイル権限を変更できるアプリケーションを開発しています。
たとえば、ユーザー「Bob」が/ srv / share /にファイルを作成する場合、bobは自分が作成したファイルの所有者であり、そのユーザーとrootだけが適切な権限を設定できます。
今、いくつかのセキュリティ問題のためにアプリケーションをrootとして実行したくありません。それでは、Linuxでは、ユーザーの「アプリケーション」が/ srv / shareディレクトリにある他のユーザーが作成したファイルの権限を変更できると言えますか?そしてそこだけ?そうでなければ、ユーザーの「アプリケーション」は特定のシステムファイルを変更し、自分自身のルートになる可能性がありますが、これはもちろん意図されていません。
Bobが次の権限を使用して/ srv/share/に "test.txt"ファイルを生成するとします。 UserOwner: Bob GroupOwner: AGroupName 権限: 755
ここで、アプリケーションが「test.txt」ファイルの権限を770に変更したいとします。これは、アプリケーションがrootとして実行されている場合にのみ可能です。新しく作成されたファイルのデフォルト権限が変更されるようにumaskを変更するか、デフォルトのACLを使用できることを知っていますが、特定のファイルの権限を動的に変更する必要がある別のユースケースがあります。
現在、カーネル4.9.0-6でDebian Stretch 9.3を実行しています。
では、これを行う方法を知っている人はいますか?それとも、これは単に不可能ですか?
編集://いくつかを明確にします。私たちは、グループがボブのファイルにアクセスしたりディレクトリに書き込むことを許可したくありません。自分自身(Bob)とルート以外のユーザーにのみルートを許可するようにファイル権限を変更したいと思います。その特定のディレクトリでのみ可能です。
答え1
「コラボレーションフォルダ」を試してみることができます。たとえば、「Projects」グループがフォルダにアクセスできるようにし、Projectグループ(したがってグループのすべてのメンバー)がファイルを変更できるようにしたいとします。最も重要なのはchmod 2770です。これは2(sgid、ファイルはグループ所有者によって作成されます)を意味し、770はuidとgidへの読み書きアクセスです。
mkdir /projectfolder
groupadd project
chmod 2770 /projectfolder
グループプロジェクトがフォルダを使用しているがグループの他のメンバーのファイルを削除しないようにするには、sgid + stickyを使用します。
mkdir /projectfolder
groupadd project
chmod 3770 /projectfolder
もちろん、グループプロジェクトにボブを追加してください。
これがうまくいかない場合(私が知っている限り)、唯一の解決策はsudoです。これにより、グループと特定のコマンドを割り当てることができます(例:visudoを使用して編集)。
User_Alias PROJECT = bob
Cmnd_Alias BOBCMD = /sbin/chmod
bob ALL= BOBCMD
特定のフォルダでのみchmodを使用する必要がある場合は、bashスクリプトを作成してsudoコマンドとして使用できます。スクリプトは、ユーザーが正常であるか、ディレクトリが正常であるかを制御した後にchmodコマンドを実行する必要があります。