
特定のディレクトリ内のファイルとディレクトリのユーザーおよびグループの所有権を変更する権限を特定のユーザーに付与するにはどうすればよいですか?
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_CHOWN
root 権限を取得できます。(たとえば、chown
自分自身に libc をインストールし、トロイの木馬にパッチを当ててchown
元に戻し、root プロセスがそれを取得するのを待ちます。)
特定のディレクトリへの所有権変更を制限したい場合、すぐに利用できるツールはどれも役に立ちません。代わりに、意図した制限に対応する独自のバージョンを作成することができます。このプログラムには、たとえば次のようなchown
機能が必要です。CAP_CHOWN
setcap cap_chown+ep /usr/local/bin/my_chown
注意
あなたのプログラムはおそらく本物を模倣するでしょうchown
、例えばmy_chown
user:group filename(s)
入力検証は慎重に実行してください。各ファイルが意図した制限を満たしているかどうかを確認し、特に範囲外を指すソフト リンクには注意してください。
プログラムへのアクセスを特定のユーザーに制限したい場合は、特別なグループを作成し、 のグループ所有権をmy_chown
このグループに設定し、権限を 0750 に設定して、このグループに許可されているすべてのユーザーを追加します。または、sudo
適切なルールで を使用することもできます (この場合も機能マジックは必要ありません)。さらに柔軟性が必要な場合は、 に想定しているルールをコード化する必要がありますmy_chown
。
答え2
私も同じ問題に遭遇したことがあり、すでに ACL を使用しています。これはあなたの状況には当てはまらないかもしれませんが、私の場合、特定のユーザーにはディレクトリ ツリーへの書き込みアクセス権があり、他のすべてのユーザーには読み取りアクセス権があるため、私の戦略は、呼び出し元のユーザーの書き込みアクセス権をチェックし、他のユーザーの読み取りアクセス権を変更できるようにする小さな setuid プログラムを作成することです。
これについて議論している質問はここにあります: