ディレクトリ内のファイル/ディレクトリの所有権を変更する権限をユーザーに付与する方法

ディレクトリ内のファイル/ディレクトリの所有権を変更する権限をユーザーに付与する方法

特定のディレクトリ内のファイルとディレクトリのユーザーおよびグループの所有権を変更する権限を特定のユーザーに付与するにはどうすればよいですか?

Googleで検索してみたら、こんなものがあることがわかりましたsetfaclユーザーにファイルやディレクトリの権限を変更する権限を与えることができます。ただし、私が読んだところによると、このコマンドでは chown 権限を付与できないようです。

例えば、ファイルに

user1 user1 theFile1
user1 user1 theDirectory1

次のコマンドを発行すると失敗します。

[user1@THEcomputer]$ chown user2 theFile

私にはコンピューターのルートアクセス権があります。ユーザーにchownディレクトリ内でコマンドを発行する権限を与える方法はありますか?

更新: ユーザーをグループに追加する方法。

こちらは記事datamoverグループに追加するために使用しましたhts

[root@Venus ~]# usermod -a -G datamover hts
[root@Venus ~]# exit
logout
[hts@Venus Receive]$ groups
hts wireshark datamover
[hts@Venus Receive]$ 

更新 (RuiFRibeiro によるコメントへの対応):

ディレクトリの所有権をディレクトリに変更しても機能しません。スクリーンショットを参照してください。

[datamover@Venus root]$ ls -la
total 311514624
drwxrwxrwx. 6 datamover datamover         4096 Oct 14 14:05 .
drwxr-xr-x  4 root      root              4096 Aug 20 16:52 ..
-rwxrwxrwx. 1 datamover datamover          674 Aug 31 16:47 create_files.zip
drwxrwxrwx  2 datamover datamover         4096 Oct 17 17:07 dudi
-rwxrwxrwx. 1 datamover datamover 318724299315 Oct 13 15:47 Jmr400.mov
-rwxrwxrwx. 1 datamover datamover    182693854 Aug 31 16:47 Jmr_Commercial_WithSubtitles.mov
-rwxrwxrwx. 1 datamover datamover     80607864 Aug 31 16:47 Jmr_DataMover_Final.mov
drwxrwxrwx. 2 datamover datamover       122880 Aug 23 11:54 ManyFiles
drwxrwxrwx. 3 datamover datamover         4096 Oct 25 07:18 Receive
drwxrwxrwx  2 datamover datamover         4096 Oct 14 13:40 sarah
-rwxrwxrwx  1 datamover datamover      3184449 Oct 14 14:05 SourceGrid_4_40_bin.zip
[datamover@Venus root]$ cd ./Receive/
[datamover@Venus Receive]$ ls -la
total 178540
drwxrwxrwx. 3 datamover datamover      4096 Oct 25 07:18 .
drwxrwxrwx. 6 datamover datamover      4096 Oct 14 14:05 ..
-rwxrwxrwx  1 hts       hts       182693854 Oct 25 07:18 Jmr_Commercial_WithSubtitles.mov
drwxrwxrwx  2 datamover datamover    122880 Oct 23 13:33 ManyFiles
[datamover@Venus Receive]$ chown datamover:datamover ./Jmr_Commercial_WithSubtitles.mov
chown: changing ownership of './Jmr_Commercial_WithSubtitles.mov': Operation not permitted

ファイルの所有者としての試みは次のとおりです。

[hts@Venus Receive]$ chown datamover:datamover Jmr_Commercial_WithSubtitles.mov
chown: changing ownership of 'Jmr_Commercial_WithSubtitles.mov': Operation not permitted

ご覧のとおり、どちらの可能性も機能しません。

更新(カウンターモードの回答をアドレスする)

グループの所有権は、ファイル所有者 (および root) によって変更できます。ただし、これは所有者が所属するグループに制限されます。

はい、まずログアウトする必要があります。私の試みの結果は次のとおりです。

[hts@Venus ~]$ groups hts
hts : hts wireshark datamover
[hts@Venus ~]$ cd /mnt/DataMover/root/Receive/
[hts@Venus Receive]$ ls -la
total 178540
drwxrwxrwx. 3 datamover datamover      4096 Oct 25 07:18 .
drwxrwxrwx. 6 datamover datamover      4096 Oct 14 14:05 ..
-rwxrwxrwx  1 hts       hts       182693854 Oct 25 07:18 Jmr_Commercial_WithSubtitles.mov
drwxrwxrwx  2 datamover datamover    122880 Oct 23 13:33 ManyFiles
[hts@Venus Receive]$ chown hts:datamover ./Jmr_Commercial_WithSubtitles.mov 
[hts@Venus Receive]$ ls -la
total 178540
drwxrwxrwx. 3 datamover datamover      4096 Oct 25 07:18 .
drwxrwxrwx. 6 datamover datamover      4096 Oct 14 14:05 ..
-rwxrwxrwx  1 hts       datamover 182693854 Oct 25 07:18 Jmr_Commercial_WithSubtitles.mov
drwxrwxrwx  2 datamover datamover    122880 Oct 23 13:33 ManyFiles
[hts@Venus Receive]$ chown datamover:datamover ./Jmr_Commercial_WithSubtitles.mov 
chown: changing ownership of ‘./Jmr_Commercial_WithSubtitles.mov’: Operation not permitted
[hts@Venus Receive]$ 

hts をデータムーバー グループに追加すると、グループ部分の所有権を変更できるようになります。これで、ステートメントの部分的な回答と検証ができました。

答え1

ファイルの所有権を変更する権限を持つのは、root だけです。Linux の比較的新しいバージョンでは、このCAP_CHOWN機能が提供されています。この機能を持つユーザーは、任意のファイルの所有権を変更することもできます。権限はCAP_CHOWNグローバルであり、一度付与されると、ローカル ファイル システム内のすべてのファイルに適用されます。

グループの所有権は、ファイル所有者 (および root) によって変更できます。ただし、これは所有者が属するグループに制限されます。したがって、ユーザー U がグループ A、B、C に属しているが D には属していない場合、U は所有するファイルのグループを A、B、C に変更できますが、D には変更できません。任意の変更が必要な場合は、これがCAP_CHOWN適切な方法です。

注意 CAP_CHOWN重大なセキュリティ上の問題があるため、シェルを持つユーザーはCAP_CHOWNroot 権限を取得できます。(たとえば、chown自分自身に libc をインストールし、トロイの木馬にパッチを当ててchown元に戻し、root プロセスがそれを取得するのを待ちます。)

特定のディレクトリへの所有権変更を制限したい場合、すぐに利用できるツールはどれも役に立ちません。代わりに、意図した制限に対応する独自のバージョンを作成することができます。このプログラムには、たとえば次のようなchown機能が必要です。CAP_CHOWN

setcap cap_chown+ep /usr/local/bin/my_chown

注意 あなたのプログラムはおそらく本物を模倣するでしょうchown、例えばmy_chownuser:group filename(s)入力検証は慎重に実行してください。各ファイルが意図した制限を満たしているかどうかを確認し、特に範囲外を指すソフト リンクには注意してください。

プログラムへのアクセスを特定のユーザーに制限したい場合は、特別なグループを作成し、 のグループ所有権をmy_chownこのグループに設定し、権限を 0750 に設定して、このグループに許可されているすべてのユーザーを追加します。または、sudo適切なルールで を使用することもできます (この場合も機能マジックは必要ありません)。さらに柔軟性が必要な場合は、 に想定しているルールをコード化する必要がありますmy_chown

答え2

私も同じ問題に遭遇したことがあり、すでに ACL を使用しています。これはあなたの状況には当てはまらないかもしれませんが、私の場合、特定のユーザーにはディレクトリ ツリーへの書き込みアクセス権があり、他のすべてのユーザーには読み取りアクセス権があるため、私の戦略は、呼び出し元のユーザーの書き込みアクセス権をチェックし、他のユーザーの読み取りアクセス権を変更できるようにする小さな setuid プログラムを作成することです。

これについて議論している質問はここにあります:

ユーザーが所有していないディレクトリに ACL を設定できるようにするにはどうすればよいでしょうか?

関連情報