220 votes

Qu'est-ce que "umask" et comment ça marche ?

Je crois que umask est quelque chose qui contrôle les autorisations des fichiers, mais je ne le comprends pas entièrement.

Après avoir exécuté umask 0644 dans un terminal, je ne peux pas lire les fichiers que je crée avec l'éditeur de texte en ligne de commande nano. J'ai remarqué que les autorisations de ce fichier sont définies sur 0022 au lieu du 0755 par défaut.

Comment umask fonctionne-t-il ? Je pensais que je pouvais simplement retirer chaque chiffre du umask de 0777, 7 - 6 = 1 et 7 - 4 = 3, donc je m'attends à ce que les autorisations soient 0133, mais apparemment, ce n'est pas le cas.

  1. En quoi consiste exactement umask ? Expliquez-le moi comme si j'étais un "débutant en Linux"
  2. Comment calculer avec umask ?
  3. Quels sont les cas d'utilisation pour umask ?

167voto

radius Points 140

La umask agit comme un ensemble d'autorisations que les applications ne peuvent pas définir sur les fichiers. C'est un masque de création de mode de fichier pour les processus et ne peut pas être défini pour les répertoires eux-mêmes. La plupart des applications ne créeraient pas de fichiers avec les autorisations d'exécution définies, donc ils auraient par défaut 666, qui est ensuite modifié par la umask.

Comme vous avez défini la umask pour supprimer les bits de lecture/écriture pour le propriétaire et les bits de lecture pour les autres, un valeur par défaut telle que 777 dans les applications entraînerait les autorisations du fichier étant 133. Cela signifierait que vous (et d'autres) pourriez exécuter le fichier, et que d'autres pourraient y écrire.

Si vous voulez faire en sorte que les fichiers ne soient pas lus/écrits/exécutés par quiconque sauf le propriétaire, vous devriez utiliser une umask comme 077 pour désactiver ces autorisations pour le groupe et les autres.

En revanche, une umask de 000 rendrait les répertoires nouvellement créés lisibles, inscriptibles et descendant pour tout le monde (les autorisations seraient 777). Une telle umask est très peu sécurisée et vous ne devriez jamais définir la umask sur 000.

La umask par défaut sur Ubuntu était 022 ce qui signifie que les fichiers nouvellement créés sont lisibles par tout le monde, mais seulement inscriptibles par le propriétaire :

user@computer:~$ touch nouveau-nom-de-fichier
user@computeur:~$ ls -dl nouveau-nom-de-fichier
-rw-r--r-- 1 utilisateur utilisateur 0 Avr  1 19:15 nouveau-nom-de-fichier

À partir d'Ubuntu Oneiric (11.10), la umask par défaut a été assouplie à 002, ce qui étend l'accès en écriture au groupe du propriétaire :

user@computer:~$ touch nouveau-nom-de-fichier
user@computer:~$ ls -dl nouveau-nom-de-fichier
-rw-rw-r-- 1 utilisateur utilisateur 0 Avr  1 19:15 nouveau-nom-de-fichier

Affichage et modification de la umask

Pour voir votre paramètre de umask actuel, ouvrez un terminal et exécutez la commande :

umask

Pour changer le paramètre de umask de l'invité actuel pour autre chose, par exemple 077, exécutez :

umask 077

Pour tester si ce paramètre fonctionne ou non, vous pouvez créer un nouveau fichier (les autorisations de fichier existant ne seront pas affectées) et afficher les informations sur le fichier, exécutez :

user@computer:~$ touch nouveau-nom-de-fichier
user@computer:~$ ls -dl nouveau-nom-de-fichier
-rw------- 1 utilisateur utilisateur 0 Avr  1 19:14 nouveau-nom-de-fichier

Le paramètre de umask est hérité par les processus démarrés à partir du même terminal. Par exemple, démarrez l'éditeur de texte GEdit en exécutant gedit dans le terminal et enregistrez un fichier à l'aide de gedit. Vous remarquerez que le fichier nouvellement créé est affecté par le même paramètre de umask que dans le terminal.

Utilisation : système multi-utilisateurs

Si vous êtes sur un système partagé par plusieurs utilisateurs, il est souhaitable que les autres ne puissent pas lire les fichiers de votre répertoire personnel. Pour cela, une umask est très utile. Modifiez ~/.profile et ajoutez une nouvelle ligne avec :

umask 007

Vous devez vous reconnecter pour que ce changement de umask dans ~/.profile prenne effet. Ensuite, vous devez modifier les autorisations des fichiers existants dans votre répertoire personnel en supprimant les bits de lecture, écriture et exécution pour les autres. Ouvrez un terminal et exécutez :

chmod -R o-rwx ~

Si vous souhaitez que ce paramètre de umask soit appliqué à tous les utilisateurs du système, vous pourriez modifier le fichier de profil système à /etc/profile.

44voto

Sufiyan Ghori Points 680

Les autres réponses ont bien expliqué le concept de umasking et pourquoi c'est nécessaire. Permettez-moi d'ajouter ma contribution, et de vous donner un exemple mathématique sur comment les permissions sont effectivement calculées.

Tout d'abord, « masque » ne signifie pas « soustraire », dans le sens arithmétique - il n'y a pas de retenue ou de report impliqués.

Deuxièmement, un « masque » devrait être compris de manière bitwise : en appliquant des opérations logiques sur chaque bit de manière indépendante. C'est-à-dire, le 4ème bit de la séquence de bits des permissions interagit uniquement avec le 4ème bit du masque.

Troisièmement, le masque désactive les bits de permission. S'ils sont déjà désactivés, la commande umask ne change rien aux permissions,

Par exemple, supposons que vous deviez enlever le masque 077 des valeurs par défaut du système pour les fichiers qui sont 666 et les répertoires qui sont 777.

La commande que vous utiliserez est

umask 077

(valeur de démasquage en binaire, 000 111 111)

Ce que ce démasquage fera est qu'il désactivera les six premiers LSB (bits de poids faible) s'ils sont 1 et ne fera aucun changement s'ils sont déjà désactivés.

Voici comment la permission finale est calculée:

permission du fichier   666 = 110 110 110 
valeur de démasquage     077 = 000 111 111
résultera en             600 = 110 000 000

Remarquez comment les deux valeurs 110 ont été changées en 000.

De même,

permission du répertoire   777 = 111 111 111 
valeur de démasquage       077 = 000 111 111
résultera en               700 = 111 000 000

39voto

En plus de la bonne discussion dans la réponse acceptée, il vaut la peine d'ajouter quelques points supplémentaires sur umask, en référence à la manière dont il est géré dans 12.04 et ultérieur.

Umask et pam_umask

L'umask par défaut se trouve désormais dans /etc/login.defs et non dans /etc/profile, comme l'indique la note officielle dans /etc/profile:

# Le umask par défaut est maintenant géré par pam_umask.
# Voir pam_umask(8) et /etc/login.defs.

Pam_umask est brièvement expliqué ci-dessous, et il convient de mentionner que le fichier par défaut pour l'utilisateur pour placer son paramètre umask personnalisé est toujours ~/.profile.

Pam_umask est l'un des nombreux modules PAM importants modules PAM qui sont cruciaux dans le fonctionnement d'Ubuntu (exécutez apropos '^pam_' pour trouver les pages de manuel des autres). Dans la page de manuel de pam_umask, il est noté que

pam_umask est un module PAM pour définir le masque de création de mode de fichier de l'environnement actuel. Le umask affecte les autorisations par défaut attribuées aux fichiers nouvellement créés.

Remarque sur le umask par défaut

Les nouveaux dossiers dans $HOME peuvent être créés par mkdir avec des autorisations par défaut de 775 et les fichiers créés avec touch avec des autorisations par défaut de 664 même lorsque le umask par défaut est 022. Cela semble, de prime abord, contradictoire, et vaut la peine d'être expliqué.

Alors que le umask par défaut est 022 sur Ubuntu, ce n'est pas toute l'histoire, car il y a un paramètre dans /etc/login.defs qui permet au umask d'être 002 pour les utilisateurs non root si une condition est remplie (voir l'extrait ci-dessous). Sur une installation normale, /etc/login.defs contient le paramètre USERGROUPS_ENAB yes. C'est ce qui

Active le réglage des bits de groupe umask pour être identiques aux bits du propriétaire (exemples: 022 -> 002, 077 -> 007) pour les utilisateurs non root, si l'uid est identique à l'gid, et le nom d'utilisateur est identique au nom du groupe principal.

C'est pourquoi vous voyez ce qui suit avec stat lorsque un nouveau dossier est créé avec mkdir sur un système mono-utilisateur comme le mien (uid et gid sont les mêmes):

Accès : (0775/drwxrwxr-x) Uid : (1000/nomdutilisateur) Gid : (1000/nomdutilisateur)

Pour plus d'informations, consultez man pam_umask et les pages de manuel Ubuntu en ligne.

37voto

Stefan Points 348

Ceci est assez ancien, mais cela vaut la peine d'être mentionné. Pour calculer l'umask, contrairement aux permissions du système de fichiers. Les umasks octaux sont calculés via le ET logique de la complémentaire unaire de l'argument en utilisant le NON logique. Les notations octales sont les suivantes :

Valeur octale : Permission
0 : lecture, écriture et exécution
1 : lecture et écriture
2 : lecture et exécution
3 : lecture seule
4 : écriture et exécution
5 : écriture seule
6 : exécution seule
7 : aucune permission

Ensuite, vous pouvez calculer pour définir les autorisations umask appropriées comme suit :

$ umask 077
$ mkdir dir1
$ touch file
$ ls -ld dir1 file

drwx------ 2 amrx amrx 4096 2011-03-04 02:05 dir1
-rw------- 1 amrx amrx    0 2011-03-04 02:05 file

Calcul des permissions finales pour les fichiers

Vous pouvez simplement soustraire l'umask des permissions de base pour déterminer les permissions finales du fichier comme suit :

666 – 022 = 644
  • Permissions de base du fichier : 666
  • Valeur umask : 022
  • Soustraire pour obtenir les permissions du nouveau fichier (666-022) : 644 (rw-r--r--)

Calcul des permissions finales pour les répertoires

Vous pouvez simplement soustraire l'umask des permissions de base pour déterminer les permissions finales du répertoire comme suit :

777 – 022 = 755
  • Permissions de base du répertoire : 777
  • Valeur umask : 022
  • Soustraire pour obtenir les permissions du nouveau répertoire (777-022) : 755 (rwxr-xr-x)

23voto

wisbucky Points 2233

Concept de base :

Si vous êtes comme la plupart des humains et que vous ne comprenez pas ce que signifie "les umask octaux sont calculés via le ET logique du complément unaire de l'argument en utilisant le NON logique", voici mon explication simple :

Tout d'abord, pensez à ce qu'est un "masque". Un masque bloque quelque chose. Pensez au ruban adhésif de masquage. Dans ce cas, umask est comme du ruban adhésif de masquage pour bloquer/désactiver les autorisations lors de la création d'un nouveau fichier ou dossier.

Les autorisations par défaut lors de la création d'un nouveau dossier sont octal 777 (111 111 111), et d'un nouveau fichier sont octal 666 (110 110 110). Nous définissons l'umask pour bloquer/désactiver certaines autorisations.

  • Un bit de masque de 1 signifie bloquer/désactiver cette autorisation (mettre du ruban adhésif de masquage sur ce bit).
  • Un bit de masque de 0 permettra à l'autorisation de passer (pas de ruban adhésif de masquage sur ce bit).

Ainsi, un masque octal 022 (000 010 010) signifie de désactiver l'écriture de groupe et autres, et permettre à toutes les autres autorisations de passer.

Calcul :

Voici un exemple de calcul pour un nouveau fichier (autorisation par défaut 666) avec un umask de 022 :

  perm masque résultat
----------------------------
u 1    0    1 (passer à travers)
  1    0    1 (passer à travers)
  0    0    0 (passer à travers)
----------------------------
g 1    0    1 (passer à travers)
  1    1    0 (désactiver)
  0    0    0 (passer à travers)
----------------------------
o 1    0    1 (passer à travers)
  1    1    0 (désactiver)
  0    0    0 (passer à travers)

C'est ainsi que vous obtenez le résultat de 644 lorsque vous créez un nouveau fichier.

Moyen plus facile :

Mais si les calculs de masque inverse vous embrouillent, il existe une méthode plus facile en utilisant la notation symbolique pour l'umask. Lorsque vous utilisez cette méthode, vous spécifiez simplement les bits de passage au lieu des bits de masque.

  • umask u=rwx,g=rx,o=rx signifie permettre le passage pour utilisateur rwx, groupe rx, autres rx. Ce qui implique de désactiver écriture de groupe, écriture d'autres. Si vous exécutez cette commande puis vérifiez umask, vous obtiendrez 022.
  • umask u=rwx,g=,o= signifie permettre le passage pour utilisateur rwx. Ce qui implique de désactiver tout l'accès pour groupe et autres. Si vous exécutez cette commande puis vérifiez umask, vous obtiendrez 077.

Calcul bonus :

Si vous voulez réellement comprendre ce que signifie "les umask octaux sont calculés via le ET logique du complément unaire de l'argument en utilisant le NON logique", voici quelques tables de logique qui peuvent aider à illustrer. Rappelez-vous, un bit de masque 1 signifie désactiver, 0 signifie passer à travers.

perm masque résultat
----------------
0    1    0     (le masque 1 désactive toujours)
1    1    0     (le masque 1 désactive toujours)
0    0    0     (le masque 0 passe à travers)
1    0    1     (le masque 0 passe à travers)

Si vous faites la table avec NON(masque), c'est maintenant juste une simple table de logique ET !

perm NOT(masque) résultat
---------------------
0    0         0     (le masque 1 désactive toujours)
1    0         0     (le masque 1 désactive toujours)
0    1         0     (le masque 0 passe à travers)
1    1         1     (le masque 0 passe à travers)

Donc la formule pour cela est : résultat = perm ET (NON masque)

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X