web-dev-qa-db-ja.com

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

this の有用な投稿を使用するデフォルトのグループとファイルのアクセス許可をフォルダに設定できます。

デフォルトの所有者(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)ではありません。

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

13
a coder

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

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

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

18

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

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

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

これには、sermodとパラメーター-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
1
sinkmanu

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

0
jirib