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 0644
dans 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 0022
place 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 = 1
et 7 - 4 = 3
je m'attends donc à ce que les autorisations soient 0133
, mais apparemment, ce n'est pas le cas.
- Qu'est-ce que umask exactement? Expliquez-moi comme si j'étais un "noob Linux"
- Comment calculer avec umask?
- Quels sont les cas d'utilisation d'umask?
permissions
umask
Lekensteyn
la source
la source
app_mode 666 rw- rw- rw-
umask 644 --0 -00 -00
file_mode 022 --- -w- -w-
Réponses:
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
777
dans les applications, entraînerait l'autorisation des fichiers133
. 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
077
désactiver ces autorisations pour le groupe et les autres.En revanche, un umask
000
rendra les répertoires nouvellement créés en lecture, en écriture et en descente pour tout le monde (les autorisations seront777
). Un tel umask est très dangereux et vous ne devriez jamais le régler sur000
.Le umask par défaut sur Ubuntu était
022
ce qui signifie que les fichiers nouvellement créés sont lisibles par tout le monde, mais uniquement par le propriétaire en écriture:À 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:Visualiser et modifier umask
Pour afficher votre paramètre umask actuel, ouvrez un terminal et exécutez la commande suivante:
Pour changer le paramètre umask du shell actuel en quelque chose d'autre, par exemple 077, exécutez:
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:
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
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 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
~/.profile
et ajoutez une nouvelle ligne avec:Vous devez vous reconnecter pour que cette modification d'umask
~/.profile
prenne 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: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
.la source
777
signifie- t -il que le groupe et les autres pourront écrire, alors077
qu'ils ne le peuvent pas?000
, l’autorisation de fichier sera777
. Donc, avec un masque par défaut de022
, les autorisations de fichier ne devraient-elles pas être755
, c'est-à-dire correspondre à-rwxr-xr-x
, non-rw-r--r--
?000
alors aucune autorisation ne sera supprimée. des applications tellestouch
etnano
créer des fichiers avec défaut de666
sorte l'autorisation de fichier restera666
mais un umask022
supprimera les écriture bits pour le groupe et les autres, donc666
se réduit à644
aka-rw-r--r--
Considérezmkdir
ce défaut mode de création d'777
un umask022
réduira les autorisations755
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.defs
et pas dans/etc/profile
, comme le note officielle dans/etc/profile
lit comme suit:Pam_umask
est 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_umask
est 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é queUne note sur le umask par défaut
Les nouveaux dossiers dans
$HOME
peuvent être créésmkdir
avec les autorisations 775 par défaut et les fichiers créés avec lestouch
autorisations 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.defs
permettant à 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ètreUSERGROUPS_ENAB yes
. C'est quoiC’est pourquoi vous voyez ce qui suit
stat
lorsqu’un nouveau dossier est créé avecmkdir
un système utilisateur unique tel que le mien (uid et gid sont identiques):Pour plus d'informations, consultez
man pam_umask
et les pages de manuel Ubuntu en ligne .la source
/etc/login.defs
est définitivement effectuéeUSERGROUPS_ENAB yes
après vérification. La syntaxe de ce fichier est légèrement inhabituelle.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:
Ensuite, vous pouvez calculer pour définir les prémisses appropriées pour umask telles que:
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
(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
(777-022)
:755 (rwxr-xr-x)
la source
077
comment vous soustrais666-077
dans ce cas?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
umask
s’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
umask
ne modifient pas l'autorisation,Par exemple, supposons que vous deviez démasquer
077
les paramètres par défaut du système pour les fichiers qui sont666
et les répertoires qui sont777
.La commande que vous utiliserez est,
(démasquer la valeur en binaire,
000 111 111
)Ce démasquage fera en
1
sorte 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:
Observez comment les deux
110
valeurs ont changé000
.De même,
la source
umask 177
(001 111 111), il va désactiver les 7 premiers bits les moins significatifs s'ils le sont1
result = file permission & (!umask)
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 estoctal 666 (110 110 110)
. Nous avons défini umask pour bloquer / désactiver certaines autorisations.1
moyen de bloquer / désactiver cette autorisation (placez une bande de masquage sur ce bit).0
permettra à l'autorisation de passer (pas de bande de masquage sur ce bit).Un
octal 022 (000 010 010)
masque signifie donc désactivergroup write
etothers write
autoriser toutes les autres autorisations.Calcul:
Voici un exemple de calcul pour un nouveau fichier (autorisation 666 par défaut) avec un umask 022:
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=rx
des moyens permettent de passer à traversuser rwx
,group rx
,other rx
. Ce qui implique de désactivergroup w
,others w
. Si vous exécutez cette commande puis vérifiezumask
, vous obtiendrez022
.umask u=rwx,g=,o=
moyens permettent de passer pouruser rwx
. Ce qui implique de désactiver tous les accès pourgroup
etothers
. Si vous exécutez cette commande puis vérifiezumask
, vous obtiendrez077
.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
1
signifie désactiver,0
signifie passer.Si vous faites la table avec
NOT(mask)
, maintenant c'est juste uneAND
table logique simple !Donc, la formule est la suivante:
result = perm AND (NOT mask)
la source