Définition du nom d'utilisateur et du groupe par défaut pour les fichiers du répertoire

13

En utilisant ce message utile, je suis en mesure de définir un groupe par défaut et des autorisations de fichier dans un dossier.

J'ai du mal à définir un propriétaire par défaut (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

Avec ça:

[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

Le bon groupe est donc attribué, mais le nouveau fichier appartient à l'utilisateur qui crée le fichier. Je voudrais que les fichiers nouvellement créés soient associés à teamlead: web_prod owner / group.

Il semble que vous setfaclpuissiez également définir un utilisateur par défaut. Avec le dossier existant acl config (ci-dessus):

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

Maintenant, pour créer un fichier en tant qu'utilisateur différent. Je m'attends à ce qu'il ait le teamlead: propriété de 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

Le nouveau fichier appartient toujours au propriétaire qui a créé le fichier, et non à l'ID 1234 (teamlead).

Est-ce que ce que je recherche est même possible, ou est-ce que je me trompe?

un codeur
la source

Réponses:

18

Avec setfacl, vous pouvez définir des autorisations par défaut mais pas le propriétaire / groupe par défaut pour les fichiers nouvellement créés.

Pour que de nouveaux fichiers appartiennent à un utilisateur spécifique, vous avez besoin d'un bit setuid qui fonctionne comme le bit setgid sur les répertoires. Malheureusement, cela n'est pas mis en œuvre.

Avec setfacl, vous pouvez faire quelque chose qui est presque équivalent dans la plupart des scénarios: vous pouvez définir une ACL comme default:user:teamlead:rwx. De cette façon, l'utilisateur nommé peut écrire les nouveaux fichiers, même si quelqu'un d'autre en est propriétaire.

Michael Suelmann
la source
Veuillez mettre à jour cette réponse avec la commande pour appliquer le 'default: user: teamlead: rwx' au répertoire '/ foo'
user319862
10

Un nouveau fichier est toujours créé appartenant à l'utilisateur sous lequel s'exécute le processus de création du fichier. (L'ID utilisateur effectif, pour être précis.) Cela ne peut pas être changé, car permettre aux utilisateurs de créer des fichiers appartenant à d'autres utilisateurs serait une faille de sécurité, similaire à permettre aux utilisateurs non root de donner un fichier .

Quoi que vous essayiez de faire, vous n'avez pas besoin de le faire. Les listes de contrôle d'accès sont suffisantes pour garantir que tout ce qui devra être lu ultérieurement aura les autorisations suffisantes. Laissez le fichier appartenant à l'utilisateur qui l'a créé.

Gilles 'SO- arrête d'être méchant'
la source
"Les listes de contrôle d'accès sont suffisantes pour garantir que tout ce qui devra être lu ultérieurement aura les autorisations suffisantes." Faux. Le groupe de votre nouveau fichier sera le groupe par défaut de votre utilisateur. Si les utilisateurs qui collaborent ont des groupes par défaut différents, vous ne pourrez pas accéder aux fichiers les uns des autres. Vous avez besoin de setgid pour que le groupe du dossier parent "colle" à tous les enfants.
bviktor
@bviktor Vous pouvez obtenir le même effet avec ACL.
Gilles 'SO- arrête d'être méchant'
Comment spécifiez-vous le propriétaire et le groupe pour les nouveaux fichiers avec ACL?
bviktor
@bviktor Le propriétaire est celui qui crée le fichier, cela ne change pas. Le groupe qui possède le fichier dans les autorisations traditionnelles n'est pas pertinent. L'ACL sur les nouveaux fichiers est l'ACL par défaut du répertoire, de la même manière que le groupe propriétaire sur les nouveaux fichiers est le groupe propriétaire du répertoire avec la sémantique BSD ( g+s).
Gilles 'SO- arrête d'être méchant'
@Gilles non. Le groupe de nouveaux fichiers sera le "groupe de connexion initial" de l'utilisateur créateur, pas le groupe du dossier parent. Le comportement que vous décrivez (c'est-à-dire que le nouveau fichier obtient le groupe du répertoire parent) nécessite que setgid soit défini sur le parent. Et le groupe est très pertinent car lorsque les utilisateurs collaborent, ils ne peuvent pas accéder aux fichiers les uns des autres si le groupe est différent. À moins que vos fichiers ne soient accessibles au monde, ce n'est pas vraiment une bonne idée.
bviktor
1

Si vous souhaitez que les nouveaux fichiers soient créés avec le nouveau groupe, vous devez modifier le groupe principal.

Pour cela, vous pouvez utiliser usermod et le paramètre -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.

par exemple

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
Sinkmanu
la source
0

Sous Linux, vous devez avoir sgid sur le répertoire parent pour hériter du groupe de fichiers. (Bien que vous n'ayez pas besoin de sgid sur le répertoire sur les systèmes BSD.)

jirib
la source
La question concerne l'attribution de la propriété aux fichiers nouvellement créés. Le groupe est déjà correctement attribué.
un codeur