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

190

Je crois que umask est quelque chose qui contrôle les autorisations de fichiers , mais je ne le comprends pas bien.

Après une exécution umask 0644dans un terminal , je ne peux pas lire les fichiers créés avec l'éditeur de texte en ligne de commande nano. J'ai remarqué que les autorisations de ce fichier sont définies à la 0022place de celles par défaut 0755.

Comment fonctionne umask? Je pensais que je pouvais simplement supprimer tous les chiffres de la clé umask 0777, 7 - 6 = 1et 7 - 4 = 3je m'attends donc à ce que les autorisations soient 0133, mais apparemment, ce n'est pas le cas.

  1. Qu'est-ce que umask exactement? Expliquez-moi comme si j'étais un "noob Linux"
  2. Comment calculer avec umask?
  3. Quels sont les cas d'utilisation d'umask?
Lekensteyn
la source
app_mode 666 rw- rw- rw- umask 644 --0 -00 -00 file_mode 022 --- -w- -w-
grabantot

Réponses:

143

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 des autorisations d'exécution définies. Elles ont donc la valeur par défaut 666, qui est ensuite modifiée par umask.

Lorsque vous avez défini la commande umask pour supprimer les bits de lecture / écriture pour le propriétaire et les bits de lecture pour les autres, une valeur par défaut, telle que 777dans les applications, entraînerait l'autorisation des fichiers 133. Cela signifierait que vous (et d'autres) pourriez exécuter le fichier et que d'autres pourraient l'écrire.

Si vous souhaitez que les fichiers ne soient pas lus / écrits / exécutés par une personne autre que le propriétaire, vous devez utiliser un umask, comme 077désactiver ces autorisations pour le groupe et les autres.

En revanche, un umask 000rendra les répertoires nouvellement créés en lecture, en écriture et en descente pour tout le monde (les autorisations seront 777). Un tel umask est très dangereux et vous ne devriez jamais le régler sur 000.

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

user@computer:~$ touch new-file-name
user@computer:~$ ls -dl new-file-name
-rw-r--r-- 1 user user 0 Apr  1 19:15 new-file-name

À partir de Ubuntu Oneiric (11.10), l’umask par défaut a été assoupli 002, ce qui élargit l’accès en écriture au groupe du propriétaire:

user@computer:~$ touch new-file-name
user@computer:~$ ls -dl new-file-name
-rw-rw-r-- 1 user user 0 Apr  1 19:15 new-file-name

Visualiser et modifier umask

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

umask

Pour changer le paramètre umask du shell actuel en quelque chose d'autre, par exemple 077, exécutez:

umask 077

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

user@computer:~$ touch new-file-name
user@computer:~$ ls -dl new-file-name
-rw------- 1 user user 0 Apr  1 19:14 new-file-name

Le paramètre umask est hérité par les processus démarrés à partir du même shell. Par exemple, démarrez l'éditeur de texte GEdit en l'exécutant geditdans 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 umask que dans le terminal.

Cas d'utilisation: système multi-utilisateur

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

umask 007

Vous devez vous reconnecter pour que cette modification d'umask ~/.profileprenne effet. Ensuite, vous devez modifier les autorisations de fichier existantes des fichiers de votre répertoire personnel en supprimant les bits lecture, écriture et exécution pour le monde entier. Ouvrez un terminal et exécutez:

chmod -R o-rwx ~

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

ajmitch
la source
3
Alors, que signifient les chiffres dans l'umask? Pourquoi cela 777signifie- t -il que le groupe et les autres pourront écrire, alors 077qu'ils ne le peuvent pas?
HelloGoodbye
3
En outre, vous dites que si umask est 000, l’autorisation de fichier sera 777. Donc, avec un masque par défaut de 022, les autorisations de fichier ne devraient-elles pas être 755, c'est-à-dire correspondre à -rwxr-xr-x, non -rw-r--r--?
HelloGoodbye
13
Je dois admettre que cette explication m'a déroutée plus qu'elle ne m'a aidé.
Connel Hooley
8
Notez que le umask par défaut d’Ubuntu est passé à 0002 un mois seulement après l’envoi de cette réponse.
Jeff Puckett
7
@ BonjourGoodbye si le umask est 000alors aucune autorisation ne sera supprimée. des applications telles touchet nanocréer des fichiers avec défaut de 666sorte l'autorisation de fichier restera 666mais un umask 022supprimera les écriture bits pour le groupe et les autres, donc 666se réduit à 644aka -rw-r--r--Considérez mkdirce défaut mode de création d' 777un umask 022réduira les autorisations755
Jeff Puckett
38

En plus de la bonne discussion dans la réponse acceptée, il convient d'ajouter quelques points supplémentaires umask, en faisant référence à la façon dont elle est gérée à partir de 12.04.

Umask et pam_umask

Le umask par défaut est maintenant dans /etc/login.defset pas dans /etc/profile, comme le note officielle dans /etc/profilelit comme suit:

# The default umask is now handled by pam_umask.
# See pam_umask(8) and /etc/login.defs.

Pam_umaskest brièvement expliqué ci-dessous, et il convient de noter que le fichier par défaut dans lequel placer son paramètre umask personnalisé est toujours ~/.profile.

Pam_umaskest l’un des nombreux modules PAM essentiels au fonctionnement d’Ubuntu (exécuté apropos '^pam_'pour rechercher les pages de manuel des autres). Dans la page de manuel,pam_umask il est noté que

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

Une note sur le umask par défaut

Les nouveaux dossiers dans $HOMEpeuvent être créés mkdiravec les autorisations 775 par défaut et les fichiers créés avec les touchautorisations 664 par défaut, même si la valeur umask par défaut est 022. Cela semble, au début, contradictoire et mérite d’être expliqué.

Si umask par défaut est 022 sur Ubuntu, il ne s'agit pas là d'une histoire complète, car il existe un paramètre /etc/login.defspermettant à 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.defscontient le paramètre USERGROUPS_ENAB yes. C'est quoi

Permet de définir les bits du groupe umask de la même manière que les bits du propriétaire (exemples: 022 -> 002, 077 -> 007) pour les utilisateurs non root, si le UID est identique à gid et si le nom d'utilisateur est identique au principal. nom de groupe.

C’est pourquoi vous voyez ce qui suit statlorsqu’un nouveau dossier est créé avec mkdirun système utilisateur unique tel que le mien (uid et gid sont identiques):

Access: (0775/drwxrwxr-x)  Uid: ( 1000/username)   Gid: ( 1000/username)

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

Alex
la source
Il semble que votre deuxième partie manque quelque chose? (USERGROUP_ENABLE?) +1 pour informations mises à jour
Lekensteyn
2
@Lekensteyn Étrangement, la mise en place /etc/login.defsest définitivement effectuée USERGROUPS_ENAB yesaprès vérification. La syntaxe de ce fichier est légèrement inhabituelle.
Je viens de vérifier le fichier et la source et vous avez raison, cette configuration (ainsi que d’autres) est appelée "_ENAB".
Lekensteyn
34

C'est assez vieux, mais cela vaut la peine d'être mentionné. Calculer pour umask, contrairement aux autorisations du système de fichiers. Les masques octaux sont calculés via le bit AND ET du complément unaire de l'argument à l'aide de bit NOT. Les notations octales sont les suivantes:

Octal value : Permission
0 : read, write and execute
1 : read and write
2 : read and execute
3 : read only
4 : write and execute
5 : write only
6 : execute only
7 : no permissions

Ensuite, vous pouvez calculer pour définir les prémisses appropriées pour umask telles que:

$ 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 de la permission finale pour les fichiers

Vous pouvez simplement soustraire le umask des autorisations de base pour déterminer l'autorisation finale pour le fichier comme suit:

666 – 022 = 644
  • Autorisations de base de fichier: 666
  • valeur umask: 022
  • soustrayez pour obtenir les permissions du nouveau fichier (666-022):644 (rw-r–r–)

Calcul de la permission finale pour les répertoires

Vous pouvez simplement soustraire le umask des autorisations de base pour déterminer l'autorisation finale pour le répertoire comme suit:

777 – 022 = 755
  • Autorisations de base de l'annuaire: 777
  • valeur umask: 022
  • Soustrayez pour obtenir les permissions du nouveau répertoire (777-022):755 (rwxr-xr-x)
Amrx
la source
3
Je ne pense pas que la façon dont les permissons finaux soient calculés est ce qui se passe si la valeur de démasquage est 077comment vous soustrais 666-077dans ce cas?
Sufiyan Ghori
6
L'explication de @SufiyanGhori Baron n'est pas complète pour l'autorisation des fichiers. Dans votre cas et dans vos calculs futurs, n'oubliez pas de les soustraire de la manière suivante: 6-0 6-7 6-7 si l'un des résultats de ces trois est -1, laissez-le être 0. avoir le résultat final 600
Huy.PhamNhu
1
@ Huy.PhamNhu Ce n'est pas correct non plus. Avec l'autorisation de base de 666 et d'umask de 033, 633 ne seront certainement pas éliminés.
Maaartinus
7
Non non Non. Vous ne pouvez pas utiliser la soustraction pour calculer umask (cela fonctionne avec certaines valeurs, mais pas avec toutes). Vous devez penser à l'umask en tant que "bits désactivés". Voir les autres réponses de Sufiyan et Wisbucky.
Wisbucky
33

D'autres ont très bien expliqué le concept de masquage et pourquoi cela est nécessaire. Laissez-moi ajouter mes deux centimes et vous donner un exemple mathématique sur la manière dont les autorisations sont réellement calculées.

Premièrement, «masque» ne signifie pas «soustraire», au sens arithmétique du terme - il n’ya pas d’emprunt ni de port en cause, deuxièmement, il umasks’agit d’un masque; ce n'est pas un nombre à soustraire.

Troisièmement, le masque désactive les bits d'autorisation. S'ils sont déjà éteints, ils umaskne modifient pas l'autorisation,

Par exemple, supposons que vous deviez démasquer 077les paramètres par défaut du système pour les fichiers qui sont 666et les répertoires qui sont 777.

La commande que vous utiliserez est,

umask 077

(démasquer la valeur en binaire, 000 111 111)

Ce démasquage fera en 1sorte qu'il désactivera l'un des six premiers LSB (bits les moins significatifs) s'ils le sont et ne fera aucun changement si l'un d'entre eux est déjà désactivé.

Voici comment l’autorisation finale est calculée:

file permisison 666 = 110 110 110 
unmask value    077 = 000 111 111
will result in, 600 = 110 000 000

Observez comment les deux 110valeurs ont changé 000.

De même,

directory permission 777 = 111 111 111 
unmask value         077 = 000 111 111
will result in,      700 = 111 000 000
Soufiyan Ghori
la source
7
cela devrait être la réponse!
Abdelouahab
@SufiyanGhori Donc si umask 177(001 111 111), il va désactiver les 7 premiers bits les moins significatifs s'ils le sont1
Kasun Siyambalapitiya
c'est correct @KasunSiyambalapitiya
Sufiyan Ghori
1
La formule est doncresult = file permission & (!umask)
Eric Hodgins
1
@ EricHodgins: Oui, exactement.
Amit Naidu
15

Concept de base:

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

Tout d’abord, réfléchissez à ce qu’est un "masque". Un masque bloque quelque chose. Pensez au ruban adhésif. Dans ce cas, umask revient à masquer une bande pour bloquer / désactiver les autorisations lors de la création d'un nouveau fichier ou répertoire.

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

  • Un bit de masque est un 1moyen de bloquer / désactiver cette autorisation (placez une bande de masquage sur ce bit).
  • Un bit de masque 0permettra à l'autorisation de passer (pas de bande de masquage sur ce bit).

Un octal 022 (000 010 010)masque signifie donc désactiver group writeet others writeautoriser toutes les autres autorisations.

Calcul:

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

  perm mask result
----------------------------
u 1    0    1 (pass through)
  1    0    1 (pass through)
  0    0    0 (pass through)
----------------------------
g 1    0    1 (pass through)
  1    1    0 (disable)
  0    0    0 (pass through)
----------------------------
o 1    0    1 (pass through)
  1    1    0 (disable)
  0    0    0 (pass through)

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

Manière plus facile:

Mais si les calculs inverses de masque vous déroutent, il existe un moyen plus simple d’utiliser la notation symbolique umask. Lorsque vous utilisez cette méthode, vous spécifiez simplement les bits d'intercommunication au lieu des bits de masque.

  • umask u=rwx,g=rx,o=rxdes moyens permettent de passer à travers user rwx, group rx, other rx. Ce qui implique de désactiver group w, others w. Si vous exécutez cette commande puis vérifiez umask, vous obtiendrez 022.
  • umask u=rwx,g=,o=moyens permettent de passer pour user rwx. Ce qui implique de désactiver tous les accès pour groupet others. Si vous exécutez cette commande puis vérifiez umask, vous obtiendrez 077.

Calcul du bonus:

Si vous voulez réellement comprendre ce que "des umasks octaux sont calculés via le bit AND ET du complément unaire de l'argument en utilisant bitwise PAS" , voici quelques tables logiques qui peuvent aider à démontrer. N'oubliez pas qu'un bit de masque 1signifie désactiver, 0signifie passer.

perm mask result
----------------
0    1    0     (mask 1 always disables)
1    1    0     (mask 1 always disables)
0    0    0     (mask 0 passes through)
1    0    1     (mask 0 passes through)

Si vous faites la table avec NOT(mask), maintenant c'est juste une ANDtable logique simple !

perm NOT(mask) result
---------------------
0    0         0     (mask 1 always disables)
1    0         0     (mask 1 always disables)
0    1         0     (mask 0 passes through)
1    1         1     (mask 0 passes through)

Donc, la formule est la suivante: result = perm AND (NOT mask)

sage
la source