web-dev-qa-db-fra.com

Commande 'chmod g + s'

Bonjour je veux comprendre le rôle du chmod g+s commande sous Unix.

J'aimerais également 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 de commandes sauf pour chmod g+s et je veux connaître les différences entre les fichiers un et deux résultant de cette série de commandes.

46
otus
chmod g+s .;

Cette commande définit l'ID de groupe (setgid) sur le répertoire courant, écrit comme ..

Cela signifie que tous les nouveaux fichiers et sous-répertoires créés dans le répertoire actuel 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 courant.

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

Notez que cela s'applique uniquement 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. Fichiers copiés avec cp -p ne sont pas non plus affectés.

Exemple

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

Dans ce cas, deux appartiendra au groupe canard mais un appartiendra au groupe de l'utilisateur qui le crée, quel qu'il soit.

Remarque mineure sur l'utilisation des points-virgules dans les commandes shell

Contrairement à c ou Perl, une commande Shell n'a besoin d'être suivie d'un point-virgule que si une autre commande Shell la suit sur la ligne de commande même. Considérez donc 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 distinctes, le point-virgule restant est inutile:

chgrp canard .
chmod g+s .
64
John1024

Vous pouvez modifier les autorisations de fichier avec la commande chmod. Sous Unix, les autorisations de fichier, 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, et chacun peut se voir attribuer des types d'accès spécifiques

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

les options g + s sont les suivantes:

g - les autorisations accordées aux autres utilisateurs du groupe du fichier

s - définir l'ID utilisateur ou groupe lors de l'exécution

voici un exemple d'utilisation:

chmod =rwx,g+s filename

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

Pour définir/modifier les autorisations d'un fichier, vous devez utiliser le programme chmod. Bien sûr, seul le propriétaire d'un fichier peut utiliser chmod pour modifier les autorisations d'un fichier. chmod a la syntaxe suivante: chmod [options] fichier (s) de mode La partie 'mode' spécifie les nouvelles autorisations pour le ou les fichiers qui suivent comme arguments. Un mode spécifie les autorisations utilisateur à modifier, puis les types d'accès à modifier. Disons par exemple: chmod a-x 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, il peut s'agir de l'un des éléments suivants:

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

Elle est suivie d'une instruction de changement qui se compose d'un + (bit réglé) ou bit effacé) et de la lettre correspondant au bit qui doit être changé. 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 chiffres étranges ... Vous avez peut-être rencontré des choses comme le fichier chmod 755 et bien sûr, vous vous demanderez ce que c'est. Le fait est que vous pouvez modifier le modèle d'autorisation complet d'un fichier en une seule 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 à n'importe quel mode. Chacun des trois chiffres du numéro de mode correspond à l'un des trois triplets d'autorisation. (u, g et o) Chaque bit d'autorisation dans 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 qu'en fait, le nombre d'un triplet est la valeur octale correspondant au modèle à trois bits - si vous ne savez pas ce qu'est une valeur octale, cela n'a pas vraiment d'importance, suivez simplement les instructions ) Donc, si un fichier a les autorisations rwxr-xr-x, nous faisons le calcul suivant:

Triplet pour u: 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 fait: 755

Ainsi, 755 est une façon laconique de dire "Je ne me dérange pas si d'autres personnes lisent ou exécutent ce fichier, mais seulement je devrais pouvoir le modifier" et 777 signifie "tout le monde a un accès complet à ce fichier"

--- (référence parfaite

7
parallaxis

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

chmod g + s., fait que la création de fichier/répertoire suivante hérite de l'ID de groupe du dossier parent et si la chose créée est un répertoire, elle obtient également g + s défini comme parent.

Ici touchez deux, crée deux, avec le groupe canard.

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

0
Nizam Mohamed

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

g + s définira sgid dans le fichier. Consultez ici pour plus d'informations sur SUID SGID

donc si votre umask par exemple est 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
0
Romeo Ninov