Commande 'chmod g + s'

45

Bonjour, je veux comprendre le rôle de la chmod g+scommande sous Unix.

J'aimerais aussi savoir ce qu'il fait dans ce contexte particulier:

cd /home/canard;
touch un;
chgrp canard .;
chmod g+s .;
touch deux ;

Je comprends tous les rôles des commandes sauf pour chmod g+set je veux connaître les différences entre les fichiers unet deuxrésultant de cette série de commandes.

Otus
la source

Réponses:

61
chmod g+s .;

Cette commande définit l'ID de groupe (setgid) sur le répertoire en cours, écrit en tant que ..

Cela signifie que tous les nouveaux fichiers et sous-répertoires créés dans le répertoire en cours héritent de l'ID de groupe du répertoire, plutôt que de l'ID de groupe principal de l'utilisateur qui a créé le fichier. Cela sera également transmis aux nouveaux sous-répertoires créés dans le répertoire actuel.

g+s affecte l'ID de groupe du fichier mais n'affecte pas l'ID du propriétaire.

Notez que cela ne s'applique qu'aux fichiers nouvellement créés . Les fichiers déplacés ( mv) dans le répertoire ne sont pas affectés par le paramètre setgid. Les fichiers copiés ne cp -psont également pas affectés.

Exemple

touch un;
chgrp canard .;
chmod g+s .;
touch deux ;

Dans ce cas, deuxappartiendra au groupe canardmais unappartiendra au groupe de l'utilisateur qui le crée, quel qu'il soit.

Note mineure sur l'utilisation des points-virgules dans les commandes Shell

Contrairement à cou perl, une commande shell n'a besoin d'être suivie d'un point-virgule que si une autre commande shell la suit sur la même ligne de commande. Ainsi, considérons la ligne de commande suivante:

chgrp canard .; chmod g+s .;

Le point-virgule final est superflu et peut être supprimé:

chgrp canard .; chmod g+s .

De plus, si nous devions placer les deux commandes sur des lignes séparées, le point-virgule restant est inutile:

chgrp canard .
chmod g+s .
John1024
la source
1
Les fichiers copiés (par exemple par cp) sont en fait nouvellement créés. S'ils n'héritent pas de l'autorisation du groupe, le programme de copie joue à des jeux, comme copier dans un fichier temporaire puis le déplacer dans le répertoire cible.
Kaz
1
@Kaz Bon point. J'ai mis à jour la réponse pour préciser que c'est ce cp -pqui annule le paramètre setgid.
John1024
Mais cp -premplace-t-il le paramètre setgid? Sur chaque implémentation Unix existante? POSIX dit qu'il n'est pas spécifié si un échec de copie de l'ID utilisateur ou de l'ID de groupe sous cp -p entraîne un message de diagnostic! Cependant, les bits S_SUID et S_SGID, respectivement, doivent être effacés dans cette situation (c.-à-d. Si un fichier est setuid bob, mais que la propriété de bob ne peut pas être copiée de sorte que le fichier appartient à janet, ne le rendez pas setuid jan.)
Kaz
" cp -premplace-t-il le paramètre setgid?" Selon la spécification POSIX, c'est ce qu'il est censé faire. C'est le cas sur tous les systèmes Unix que j'ai utilisés. Vous avez cité la partie de la spécification concernant les mesures à prendre pour protéger la sécurité dans le cas où l'ID de groupe ne peut pas être dupliqué. Je n'ai jamais rencontré une telle situation "impossible", n'est-ce pas?
John1024
7

Vous pouvez modifier les autorisations de fichiers avec la commande chmod. Sous Unix, les autorisations sur les fichiers, qui déterminent qui peut avoir différents types d'accès à un fichier, sont spécifiées à la fois par les classes d'accès et les types d'accès. Les classes d'accès sont des groupes d'utilisateurs, chacun pouvant se voir attribuer un type d'accès spécifique.

Unix / Linux a des utilisateurs et des groupes d’utilisateurs pouvant être attribués pour l’accès aux fichiers

les options g + s sont les suivantes:

g - les permissions que les autres utilisateurs du groupe de fichiers ont pour cela

s - définit l'identifiant de l'utilisateur ou du groupe lors de l'exécution

voici un exemple d'utilisation:

chmod =rwx,g+s filename

(autoriser tout le monde à lire, écrire et exécuter un fichier particulier et activer l'identifiant de groupe défini)

Pour définir / modifier les autorisations d'un fichier, vous devez utiliser le programme chmod. Bien entendu, seul le propriétaire d'un fichier peut utiliser chmod pour modifier les autorisations d'un fichier. La syntaxe de chmod est la suivante: chmod [options] mode fichier (s) La partie 'mode' spécifie les nouvelles autorisations pour les fichiers qui suivent comme arguments. Un mode spécifie les autorisations de l'utilisateur à modifier, puis les types d'accès à modifier. Disons par exemple: chmod ax socktest.pl

Cela signifie que le bit d'exécution doit être effacé (-) pour tous les utilisateurs. (propriétaire, groupe et reste du monde) Les autorisations commencent par une lettre spécifiant quels utilisateurs doivent être affectés par la modification. Cette autorisation peut être l'une des suivantes:

u the owner user
g the owner group
o others (neither u, nor g)
a all users

Ceci est suivi d'une instruction de changement composée d'un + (bit de réglage) ou - (bit d'effacement) et de la lettre correspondant au bit à modifier. Voyons quelques exemples:

$ ls -l socktest.pl 
-rwxr-xr-x   1 nick     users         1874 Jan 19 10:23 socktest.pl*

$ chmod a-x socktest.pl 
$ ls -l socktest.pl 
-rw-r--r--   1 nick     users         1874 Jan 19 10:23 socktest.pl

$ chmod g+w socktest.pl 
$ ls -l socktest.pl 
-rw-rw-r--   1 nick     users         1874 Jan 19 10:23 socktest.pl

$ chmod ug+x socktest.pl 
$ ls -l socktest.pl 
-rwxrwxr--   1 nick     users         1874 Jan 19 10:23 socktest.pl*

$ chmod ug-wx socktest.pl 
$ ls -l socktest.pl 
-r--r--r--   1 nick     users         1874 Jan 19 10:23 socktest.pl

Des nombres étranges ... Vous avez peut-être rencontré des problèmes tels que chmod 755 et, bien sûr, vous vous demanderez de quoi il s'agit. Le fait est que vous pouvez changer le modèle de permission d'un fichier en une fois en utilisant un numéro comme celui de cet exemple. Chaque mode a un numéro de code correspondant et, comme nous le verrons, il existe un moyen très simple de déterminer quel numéro correspond à un mode. Chacun des trois chiffres du numéro de mode correspond à l'un des trois triplets de permission. (u, g et o) Chaque bit d'autorisation d'un triplet correspond à une valeur: 4 pour r, 2 pour w, 1 pour x. Si le bit d'autorisation, vous ajoutez cette valeur au numéro du triplet d'autorisation. S'il est effacé, vous n'ajoutez rien. (Certains d'entre vous remarqueront peut-être qu'en fait,

Triplet pour vous: rwx => 4 + 2 + 1 = 7

Triplet pour g: r-x => 4 + 0 + 1 = 5

Triplet pour o: r-x => 4 + 0 + 1 = 5

Ce qui rend : 755

Donc, 755 est une façon laconique de dire: «Cela ne me dérange pas que d’autres personnes lisent ou exécutent ce fichier, mais je suis le seul à pouvoir le modifier» et 777 signifie «tout le monde a accès à ce fichier».

référence parfaite

parallaxe
la source
0

Le résultat de la commande ls dépendra de umask.

g + s mettra sgid dans le fichier. Vérifiez ici des informations plus détaillées sur SUID SGID

Donc si votre umask est par exemple 022, le résultat sera quelque chose comme:

-rw-r--r--    1 romeo    canard     0 Jan 31 20:58 deux
-rw-r-Sr--    1 romeo    UsersGrp   0 Jan 31 20:58 un
Romeo Ninov
la source
0

Sous Linux, l’une des options de montage par défaut pour ext? fs est 'nogrpid | sysvgroups '. Donc, la première fois que vous touchez, crée un fichier avec un identifiant de groupe égal à fsgid du processus de création où fsgid = egid.

chmod g + s., fait en sorte que la création de fichier / répertoire suivante hérite de l'identifiant de groupe du dossier parent. Si l'élément créé est un répertoire, il reçoit également g + s en tant que parent.

Ici touchent deux, crée deux, avec groupe canard.

La sémantique change si l'option de montage était 'grpid | bsdgroups 'dans ce cas, la nouvelle création de fichier / répertoire hériterait du groupe id de son dossier parent même sans définir g + s pour le parent lui-même.

Nizam Mohamed
la source