ディレクトリ内のファイルのデフォルトのユーザー名とグループを設定する


13

この役立つ投稿を使用して、フォルダにデフォルトのグループとファイルの権限を設定できます。

デフォルトの所有者(teamlead uid 1234)を設定できません。

setfacl -d -m g::rwx /my/test/folder
setfacl -d -m o::rx /my/test/folder

getfacl /my/test/folder

# file: /my/test/folder
# owner: teamlead
# group: web_prod
# flags: -s-
user::rwx
group::r-x
other::r-x
default:user::rwx
default:group::rwx
default:other::r-x

それと:

[mary@boxen]# touch /my/test/folder/somefile
[mary@boxen]# ll /my/test/folder/somefile
-rw-rw-r--. 1 mary web_prod 0 Nov  6 08:58 somefile

したがって、正しいグループが割り当てられますが、新しいファイルには、ファイルを作成したユーザーの所有権があります。新しく作成したファイルにteamlead:web_prod所有者/グループを持たせたい。

その表示されsetfaclすぎて、デフォルトのユーザーを設定するために使用することができます。既存のフォルダacl config(上記)を使用:

[mary@boxen]# setfacl -d -m u:1234:rwx /my/test/folder

次に、別のユーザーとしてファイルを作成します。teamlead:web_prodの所有権があることを期待しています。

[mary@boxen]# touch /my/test/folder/anotherfile
[mary@boxen]# ll /my/test/folder/anotherfile
-rw-rw-r--+ 1 mary web_prod 0 Nov  6 08:58 somefile

新しいファイルには、ファイルを作成した所有者の所有権があり、uid 1234(teamlead)ではありません。

私が望んでいることは可能ですか、それとも私がこれについて間違っているのですか?

回答:


18

setfaclを使用すると、デフォルトの権限を設定できますが、新しく作成されたファイルのデフォルトの所有者/グループは設定できません。

新しいファイルを特定のユーザーが所有するようにするには、ディレクトリのsetgidビットのように機能するsetuidビットが必要です。残念ながらそれは実装されていません。

setfaclを使用すると、ほとんどのシナリオでほぼ同等の処理を実行できますdefault:user:teamlead:rwx。次のようなACLを設定できます。そうすれば、誰かがそれを所有していても、指名されたユーザーが新しいファイルを書き込むことができます。


コマンドでこの回答を更新して、「default:user:teamlead:rwx」をディレクトリ「/ foo」に適用してください
user319862

10

新しいファイルは常に、ファイルを作成するプロセスが実行されているユーザーに属して作成されます。(正確には実効ユーザーID。)ユーザーが他のユーザーに属するファイルを作成できるようにすることはroot以外のユーザーがファイルを渡すこと許可するのと同様に、セキュリティホールになるため変更できません。

何をしようとしても、これを行う必要はありません。ACLは、後でファイルを読み取るために必要なものに十分なアクセス許可を与えるのに十分です。作成したユーザーがファイルを所有したままにします。


「ACLは、後でファイルを読み取るために必要なものに十分なアクセス許可を与えるのに十分です。いいえ。新しいファイルのグループは、ユーザーのデフォルトグループになります。共同作業を行うユーザーのデフォルトグループが異なる場合、お互いのファイルにアクセスできなくなります。親フォルダーのグループをすべての子に「固定」するには、setgidが必要です。
bviktor 2017

@bviktor ACLでも同じ効果が得られます。
Gilles「SO-邪悪なことをやめなさい」

ACLで新しいファイルの所有者とグループをどのように指定しますか?
bviktor 2017

@bviktor所有者はファイルを作成した人であり、変更されません。従来の権限でファイルを所有するグループは関係ありません。新しいファイルのACLは、ディレクトリのデフォルトACLです。これは、新しいファイルの所有グループがディレクトリの所有グループであり、BSDセマンティクス(g+s)であるのと同じです。
Gilles「SO-邪悪なことをやめなさい」

@ギレスいいえ。新しいファイルのグループは、親フォルダのグループではなく、作成者ユーザーの「初期ログイングループ」になります。説明する動作(つまり、新しいファイルは親ディレクトリのグループを取得する)では、親にsetgidを設定する必要があります。また、ユーザーが共同作業を行っている場合、グループが異なるとお互いのファイルにアクセスできないため、グループは非常に関連性があります。あなたのファイルが世界中からアクセス可能である場合を除いて、これは正確に良い考えではありません。
bviktor 2017

1

新しいファイルを新しいグループで作成する場合は、プライマリグループを変更する必要があります。

これには、usermodとパラメーター-gを使用できます。

   -g, --gid GROUP
       The group name or number of the user's new initial login group. The group must exist.
       Any file from the user's home directory owned by the previous primary group of the user will be owned by this new group.
       The group ownership of files outside of the user's home directory must be fixed manually.

例えば

test2@kinakuta:/tmp$ id
uid=1002(test2) gid=1002(test2) grupos=1002(test2),1003(testgroup)
test2@kinakuta:/tmp$ touch test2
test2@kinakuta:/tmp$ ls -la test2
-rw-r--r-- 1 test2 test2 0 nov 23 22:26 test2
root@kinakuta:/tmp# usermod -g testgroup test2
root@kinakuta:/tmp# su test2
test2@kinakuta:/tmp$ touch test2_1
test2@kinakuta:/tmp$ ls -la test2_1 
-rw-r--r-- 1 test2 testgroup 0 nov 23 22:27 test2_1

0

Linuxでは、ファイルのグループを継承するには、親ディレクトリにsgidが必要です。(BSDシステムでは、ディレクトリにsgidは必要ありません。)


問題は、新しく作成されたファイルに所有権を割り当てることです。グループは既に正しく割り当てられています。
コーダー、2013年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.