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


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

Après la course 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 défaut 0755.

Comment fonctionne umask? Je pensais que je pouvais simplement retirer chaque chiffre de l’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. 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 pour umask?

159
2018-05-22 20:42


origine


app_mode 666 rw- rw- rw-  umask 644 --0 -00 -00  file_mode 022 --- -w- -w- - grabantot


Réponses:


Le 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 fichier pour 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 auraient donc un défaut de 666, qui est ensuite modifié par l’umask.

Comme vous avez paramétré le umask pour supprimer les bits de lecture / écriture pour le propriétaire et les bits de lecture pour les autres, un défaut tel que 777 dans les applications entraînerait les autorisations de fichier étant 133. Cela signifierait que vous (et les autres) pourriez exécuter le fichier, et que d’autres pourraient lui écrire.

Si vous voulez que les fichiers ne soient pas en lecture / écriture / exécution par qui que ce soit sauf le propriétaire, vous devriez utiliser un umask comme 077 pour désactiver ces autorisations pour le groupe et les 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 000.

Le 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 en écriture par le propriétaire:

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

Affichage et modification de umask

Pour afficher votre paramètre umask actuel, ouvrir un terminal et lancez 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 Nouveau fichier (les autorisations de fichier d'un fichier existant ne seront pas affectées) et afficher des informations sur le fichier, exécutez:

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 exécutant gedit dans le terminal et enregistrer un fichier en utilisant 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-utilisateur

Si vous utilisez 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. modifier ~/.profile et ajouter une nouvelle ligne avec:

umask 007

Vous devez vous reconnecter pour ce changement umask dans ~/.profile prendre 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. Ouvrir un terminal et exécuter:

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 à l’adresse /etc/profile.


125
2018-05-22 20:59



Alors, que signifient les chiffres dans le umask? Pourquoi 777 signifie que le groupe et les autres pourront lui écrire, 077 signifie qu'ils ne peuvent pas? - HelloGoodbye
Aussi, vous dites que si l’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 correspondant à -rwxr-xr-x, ne pas -rw-r--r--? - HelloGoodbye
Doit admettre que cette explication m'a confondu plus que cela ne m'a aidé. - Connel Hooley
Remarque cette L'umask par défaut d'Ubuntu est passé à 0002 un mois seulement après l'affichage de cette réponse. - Jeff Puckett
@ HelloGoodbye si le umask est 000 alors aucune autorisation ne sera supprimée. des applications comme touch et nano créer des fichiers par défaut 666 donc la permission de fichier restera 666 mais un umask de 022 va supprimer les bits d'écriture pour le groupe et les autres, afin 666 se réduit à 644 alias -rw-r--r-- Considérer mkdir quel mode de création par défaut de 777 avec un umask de 022 va réduire les autorisations à 755 - Jeff Puckett


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 façon dont il est géré à partir de 12.04.

Umask et pam_umask

Le umask par défaut est maintenant dans /etc/login.defs et pas dans /etc/profile, comme note officielle dans /etc/profile lit:

# 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 importants Modules PAM qui sont cruciaux dans le fonctionnement d'Ubuntu (exécuter apropos '^pam_' pour trouver les pages de manuel pour les autres). dans le page de manuel pour 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

Nouveaux dossiers dans $HOME peut être créé par mkdir avec 775 permissions par défaut et fichiers créés avec touch avec des permissions par défaut de 664, même lorsque le paramètre par défaut est 022. Cela semble, au début, contradictoire et mérite d'être expliqué.

Alors que l’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 Cela 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 réglage USERGROUPS_ENAB yes. C'est quoi

Permet que le paramétrage des bits du groupe umask soit identique à celui des bits du propriétaire    (exemples: 022 -> 002, 077 -> 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ù pourquoi vous voyez ce qui suit avec stat quand un nouveau dossier est créé avec mkdir sur un seul système utilisateur tel que le mien (uid et gid sont les mêmes):

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.


34
2018-04-02 00:16



On dirait que votre deuxième partie manque quelque chose? (USERGROUP_ENABLE?) +1 pour les informations mises à jour - Lekensteyn
@Lekensteyn Assez étrangement, la mise en place /etc/login.defs est vraiment USERGROUPS_ENAB yes après vérification La syntaxe de ce fichier est légèrement inhabituelle.
Je viens de vérifier le fichier et le source et vous avez raison, ce (et quelques autres) paramètres sont confusément nommés "_ENAB". - Lekensteyn


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 des prémissions correctes 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 permission finale 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 d'annuaire: 777
  • valeur umask: 022
  • Soustraire pour obtenir les autorisations du nouveau répertoire (777-022) : 755 (rwxr-xr-x)

29
2018-04-06 08:27



Je ne pense pas que ce soit comment les autorisations finales sont calculées, et si la valeur démasquée est 077 comment soustrais-tu 666-077 dans ce cas ? - Sufiyan Ghori
L'explication de @SufiyanGhori Baron n'est pas complète pour l'autorisation des fichiers. Dans votre cas et dans tout calcul futur, pour que vous vous en souveniez facilement, gardez à l’esprit que vous devez les soustraire de cette façon: 6-0 6-7 6-7 si un résultat de ces trois est -1, alors laissez-le être 0. Nous avons donc avoir le résultat final 600 - Huy.PhamNhu
@ Huy.PhamNhu Ce n'est pas correct non plus. Avec la permission de base de 666 et umask de 033, vous n'obtiendrez sûrement pas 633. - maaartinus
Non non Non. Vous ne pouvez pas utiliser la soustraction pour calculer umask (cela fonctionne avec certaines valeurs, mais pas toutes). Vous devez considérer le umask comme "désactiver les bits". Voir les autres réponses de Sufiyan et Wisbucky. - wisbucky


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 portage, deuxièmement, le umask est 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, le umask ne change rien à la permission,

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

La commande que vous utiliserez est,

umask 077

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

Ce qu’il fera, c’est qu’il désactivera l’un des six premiers LSB (bits les moins significatifs) s’ils sont 1 et ne fera aucun changement si l'un d'entre eux est déjà éteint.

Voici comment la permission 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 110 les valeurs ont changé pour 000.

De même,

directory permission 777 = 111 111 111 
unmask value         077 = 000 111 111
will result in,      700 = 111 000 000

24
2018-06-05 14:09



cela devrait être la réponse! - Abdelouahab
@SufiyanGhori Alors si umask 177 (001 111 111), il désactive les 7 premiers bits les moins significatifs s’ils sont 1 - Kasun Siyambalapitiya
c'est correct @KasunSiyambalapitiya - Sufiyan Ghori


Concept de base:

Si vous êtes comme la plupart des humains et ne comprenez pas ce que le diable "les masques octaux sont calculés via le bit ET du complément unaire de l'argument utilisant bitwise NOT" signifie, 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 peu de masque 1 signifie bloquer / désactiver cette autorisation (mettre du ruban adhésif sur ce bit).
  • Un peu de masque 0 permettra la permission de passer (pas de ruban de masquage sur ce bit).

Donc un octal 022 (000 010 010) masque signifie désactiver group write et others writeet 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)

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 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 des moyens permettent de passer 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, tu auras 022.
  • umask u=rwx,g=,o= des moyens permettent de passer 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, tu auras 077.

Calcul du bonus:

Si vous voulez vraiment comprendre quoi "les masques octaux sont calculés via le bit ET du complément unaire de l'argument utilisant bitwise NOT" signifie, voici quelques tableaux logiques qui peuvent aider à démontrer. Rappelez-vous, un peu de masque 1 signifie désactiver, 0 les moyens passent à 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 faites la table avec NOT(mask), maintenant c'est juste un simple AND table logique!

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)


9
2018-04-03 22:30