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

157

Je crois que umask est quelque chose qui contrôle les autorisations de fichiers , mais ne le comprend pas complètement.

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 de 0755 par défaut.

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

  1. Qu'est-ce que umask exactement? Expliquez-le moi comme si j'étais un "noob Linux"
  2. Comment calculer avec umask?
  3. Quels sont les cas d’utilisation de umask?
posée Lekensteyn 22.05.2011 - 22:42
la source

5 réponses

124

L'umask agit comme un ensemble d'autorisations que les applications ne peuvent pas définir sur les fichiers. Il s'agit d'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, de sorte qu'elles auraient une valeur par défaut de 666 , qui serait ensuite modifiée par umask.

Comme vous avez défini le masque umask pour supprimer les bits de lecture / écriture pour le propriétaire et les bits de lecture pour les autres, une autorisation par défaut telle que 777 dans les applications entraînerait les autorisations de fichier 133 . Cela signifierait que vous (et les autres) pourriez exécuter le fichier, et que d’autres pourraient lui écrire.

Si vous souhaitez que les fichiers ne soient pas en lecture / écriture / exécution par qui que ce soit, à l'exception du propriétaire, vous devez utiliser un umask comme 077 pour désactiver ces autorisations pour le groupe et l'ampère; d'autres.

En revanche, un umask de 000 rendra les répertoires nouvellement créés lisibles, inscriptibles et accessibles à tous (les autorisations seront 777 ). Un tel umask est très peu sûr et vous ne devriez jamais définir umask sur 000 .

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

[email protected]:~$ touch new-file-name
[email protected]:~$ ls -dl new-file-name
-rw-r--r-- 1 user user 0 Apr  1 19:15 new-file-name

Affichage et modification de umask

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

umask

Pour modifier le paramètre umask du shell actuel en un autre paramètre, par exemple 077, exécutez:

umask 077

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

[email protected]:~$ touch new-file-name
[email protected]:~$ 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 exécutant gedit dans le terminal et enregistrez un fichier à l'aide de gedit. Vous remarquerez que le nouveau fichier créé est affecté par le même paramètre umask que dans le terminal.

Cas d’utilisation: système multi-utilisateurs

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 personnel. Pour cela, un umask est très utile. Modifiez ~/.profile et ajoutez une nouvelle ligne avec:

umask 007

Vous devez vous reconnecter pour que cette modification umask dans ~/.profile prenne effet. Ensuite, vous devez modifier les autorisations de fichiers existantes des fichiers de votre répertoire personnel en supprimant le bit de lecture, d’écriture et d’exécution pour le monde. 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 modifier le fichier de profil à l’échelle du système à /etc/profile .

    
réponse donnée ajmitch 22.05.2011 - 22:59
la source
33

Outre la bonne discussion dans la réponse acceptée, il convient d’ajouter quelques points supplémentaires sur umask , en référence à la manière dont il est géré à partir du 12.04.

Umask et pam_umask

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

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

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

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

  

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

Une note sur le umask par défaut

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

Alors que l’umask par défaut est 022 sur Ubuntu, ce n’est pas tout, car il existe un paramètre dans /etc/login.defs qui permet à 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 que

  

Permet que le réglage des bits du groupe umask soit identique à celui des bits du propriétaire    (exemples: 022 - & gt; 002, 077 - & gt; 007) pour les utilisateurs non-root, si l'ID utilisateur est    le même que gid, et username est le même que le nom du groupe primaire.

D'où vous voyez ce qui suit avec stat lorsqu'un nouveau dossier est créé avec mkdir sur un seul système utilisateur tel que le mien (uid et gid sont identiques):

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

Pour plus d’informations, voir man pam_umask et le Pages de manuel Ubuntu en ligne .

    
réponse donnée user76204 02.04.2013 - 02:16
la source
29

C'est assez vieux, mais cela mérite d'être mentionné. Pour calculer le umask, contrairement aux autorisations du système de fichiers. Les masques octaux sont calculés via le bit AND du complément unaire de l'argument en utilisant bitwise 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émissions correctes 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 du fichier comme suit:

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

Calcul de la dernière autorisation pour les répertoires

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

777 – 022 = 755
  • Autorisations de base de répertoire: 777
  • valeur umask: 022
  • Soustrayez pour obtenir les autorisations du nouveau répertoire (777-022) : 755 (rwxr-xr-x)
réponse donnée amrx 06.04.2016 - 10:27
la source
24

D'autres ont répondu très bien au concept de masquage et à la nécessité de le faire. Permettez-moi d'ajouter mes deux centimes et de vous donner un exemple mathématique sur la façon dont les autorisations sont réellement calculées.

Tout d'abord, "Masque" ne signifie pas "soustraire", au sens arithmétique - il n'y a pas d'emprunt ou de transport impliqué, d'autre part, le umask est un masque; ce n'est pas un nombre à soustraire.

Troisièmement, le masque désactive les bits d'autorisation. Si elles sont déjà désactivées, umask n'apporte aucune modification à l'autorisation,

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

La commande que vous utiliserez est

umask 077

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

Ce qu’il fera sera de désactiver les six premiers LSB (bits les moins significatifs) s’ils sont 1 et qu’ils ne changeront rien si certains sont déjà désactivés.

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 valeurs 110 sont devenues 000 .

De même,

directory permission 777 = 111 111 111 
unmask value         077 = 000 111 111
will result in,      700 = 111 000 000
    
réponse donnée Sufiyan Ghori 05.06.2016 - 16:09
la source
9

Concept de base:

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

Tout d'abord, pensez à ce qu'est un "masque". Un masque bloque quelque chose. Pensez à du ruban adhésif. Dans ce cas, umask est comme une bande de masquage 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'un nouveau répertoire sont octal 777 (111 111 111) et un nouveau fichier est octal 666 (110 110 110) . Nous définissons le umask pour bloquer / désactiver certaines autorisations.

  • Un bit de masque de 1 signifie que vous devez bloquer / désactiver cette autorisation (placez du ruban de masquage sur ce bit).
  • Un bit de masque de 0 permettra à la permission de passer (pas de bande de masquage sur ce bit).

Donc, un octal 022 (000 010 010) mask signifie désactiver group write et others write , et autoriser toutes les autres autorisations à passer.

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)

Voilà comment vous vous retrouvez avec le résultat de 644 lorsque vous créez un nouveau fichier.

Plus simple:

Mais si les calculs de masques inversés ne font que vous embrouiller, il existe un moyen plus simple d’utiliser la notation symbolique umask. Lorsque vous utilisez cette méthode, vous spécifiez simplement les bits directs au lieu des bits de masque.

  • umask u=rwx,g=rx,o=rx signifie autoriser le passage pour user rwx , group rx , other rx . Ce qui implique de désactiver group w , others w . Si vous exécutez cette commande, vérifiez umask , vous obtiendrez 022 .
  • umask u=rwx,g=,o= signifie autoriser le passage pour user rwx . Ce qui implique de désactiver tous les accès pour group et others . Si vous exécutez cette commande, vérifiez umask , vous obtiendrez 077 .

Calcul du bonus:

Si vous voulez réellement comprendre ce que "masques octaux sont calculés via le bit AND du complément unaire de l'argument en utilisant le bit" NOT "signifie ici, voici quelques tables logiques qui peuvent aider à démontrer. Rappelez-vous qu'un bit de masque 1 signifie désactiver, 0 signifie passer à travers.

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 créez la table avec NOT(mask) , il ne s'agit plus que d'une simple table logique AND !

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)

La formule est donc la suivante: result = perm AND (NOT mask)

    
réponse donnée wisbucky 04.04.2017 - 00:30
la source

Lire d'autres questions sur les étiquettes