Comment umask est-il calculé sous Linux?

15

Je sais donc que je umaskpeux restreindre les utilisateurs privilégiés, en utilisant ce format umask ugo.

Je comprends que read = 4, write = 2 et exec = 1. Cependant, lorsque je tape umask, il renvoie 4 chiffres qui sont 0022ou 0073. Je ne comprends pas comment cela fonctionne maintenant car il y a un chiffre supplémentaire. Qu'est-ce que ce chiffre supplémentaire et que 0022signifie-t-il?

Braiam
la source

Réponses:

18

Supposons que le masque par défaut est 0666. umask0022 rendrait le nouveau masque 0644 (0666-0022 = 0644), ce qui signifie que le groupe et les autres ont des autorisations de lecture (pas d'écriture ni d'exécution).

Le chiffre "extra" (le premier nombre = 0), indique qu'il n'y a pas de modes spéciaux.

Si le mode commence par un chiffre, il sera interprété comme octal, sinon il est censé être symbolique.

0 est un chiffre, tout comme 1 (pour le bit collant) ou 6 (pour SGID). Une commande telle que celle qui chmodpeut être appelée par d'autres méthodes, telle que l' chmod ug+rw mydirendroit où vous ajouteriez les autorisations de lecture et d'écriture à l'utilisateur et au groupe. Notez que le mode dans ce cas (ug + rw) ne commence pas par un chiffre, ne serait donc pas interprété comme octal mais plutôt symbolique.

Voir en.wikipedia.org/wiki/Chmod#Symbolic_examples pour la symbolique ainsi que www.lifftercoffee.com/2007/03/20/special-permission-modes-in-linux-and-unix/ pour un peu sur les modes spéciaux.

Je ne sais pas si vous démasqueriez le premier morceau avec umask, mais techniquement vous pourriez. Cela expliquerait pourquoi vous le voyez presque toujours comme un zéro.

Crédit à pinkfloydx33

Le premier chiffre du masque concerne les autorisations spéciales qui ne rentrent pas aussi bien dans le modèle propriétaire / groupe / autre. Lorsque quatre chiffres sont fournis pour une autorisation de fichier, le premier fait référence à ces valeurs spéciales:

4000 = SUID
2000 = SGID
1000 = sticky bit

Le bit SUID, abréviation de set-user-ID, provoque l'exécution d'un programme exécutable avec l'ID utilisateur effectif (uid) du propriétaire - en d'autres termes, peu importe qui l'exécute, le programme s'exécute avec les droits du propriétaire. Cela se voit généralement dans les programmes qui font des choses qui nécessitent des privilèges root, mais qui sont destinés à être exécutés par des utilisateurs normaux: passwdc'est un exemple.

Le bit SGID, abréviation de set-group-ID, est très similaire, mais s'exécute avec l' identifiant de groupe effectif (gid) du propriétaire.

Le bit collant est un peu plus compliqué, si vous voulez plus d'informations à ce sujet, vous pouvez lire la page de manuel pour sticky.

Ces bits peuvent également être utilisés avec des répertoires, mais leur signification change.

Je ne crois pas que vous puissiez réellement définir le umaskpour vous permettre d'activer l'un de ces bits supplémentaires par défaut, mais vous ne voudrez probablement jamais le faire de toute façon.

Crédit à l' utilisateur470379

Braiam
la source
1
En fait, vous ne pouvez pas fournir une valeur non nulle autre que dans les 3 derniers chiffres. Selon Posix: "L'interprétation des valeurs de mode qui spécifient des bits de mode de fichier autres que les bits d'autorisation de fichier n'est pas spécifiée." Selon man 2 umask(l'appel système correspondant) "seuls les bits d'autorisation de fichier de masksont utilisés". Dans bash, umask 1000 génère une erreur: "nombre octal hors limites". Alors pourquoi le 0 supplémentaire? Je pense que c'est juste pour montrer que le nombre est en octal.
rici
que pastebin n'a aucune référence à umask, donc je ne vois pas comment c'est pertinent. chmod permet de définir les trois premiers bits, mais umask ne permet pas de les masquer. (c'est-à-dire que vous auriez pu écrire chmod 6777 dropbox. Et, au fait, aussi chmod ug+s.)
rici
Ouais, tu as raison, je ne sais pas à quoi je pensais.
Braiam
@Braiam: Votre formule pour calculer un nouveau masque est fausse, ce n'est pas 0666-0022le cas 0666 & ~0022.
cuonglm
1
Je pense que l'objection n'est pas la façon dont les nombres sont écrits, mais l'utilisation de l'opérateur de soustraction (-) au lieu de bit à bit et (&).
BowlOfRed