Que fait chmod -u?

19

Par accident, j'ai couru chmod -u filenameet il a supprimé toutes les autorisations que j'avais filename.

La page de manuel ne fait référence à aucune -uoption. En expérimentant, j'ai pu conclure qu'il ne supprime pas toutes les autorisations, mais qu'il suffit de lire et d'exécuter l'accès, laissant l'accès en écriture intact.

Alors qu'est-ce que cela fait exactement?


Ma conclusion ci-dessus est fausse, je pense maintenant que ce qu'il fait est de supprimer les autorisations que le propriétaire a, de toutes les catégories.


Je pense que le comportement est analogue à a=u, seulement il est au -lieu de =et apeut être abandonné tout comme il peut avec, par exemple, a+x.

y_wc
la source
6
+1 pour avoir posé une question de base qui ne se trouve pas dans la page de manuel.
1
"Le format d'un mode symbolique est [ugoa...][[-+=][perms...]...], où perms est zéro ou plusieurs lettres de l'ensemble rwxXst, ou une seule lettre de l'ensembleugo " (page de manuel GNU chmod); POSIX est assez obscur, mais définit une production "permcopy" pour le même effet.
Michael Homer
1
@MichaelHomer Il ne dit pas ce qu'il fait.
y_wc
1
@y_wc "Au lieu d'une ou plusieurs de ces lettres, vous pouvez spécifier exactement l'une des lettres ugo : les autorisations accordées à l'utilisateur propriétaire du fichier ( u), les autorisations accordées aux autres utilisateurs membres du groupe du fichier ( g) et les autorisations accordées aux utilisateurs qui n'appartiennent à aucune des deux catégories précédentes ( o). "
Michael Homer
1
Oui, je l'ai lu. Je ne vois pas qu'il mentionne ce qu'il fait. Il dit que je peux spécifier une de ces lettres. En spécifiant, par exemple u, je spécifierai les autorisations accordées à l'utilisateur propriétaire du fichier. Mais il ne dit pas ce qu'il fait. Que signifie même spécifier?
y_wc

Réponses:

19

Ce n'est pas une option, mais une façon standard (mais peu commune) de spécifier les autorisations. Cela signifie supprimer ( -) les autorisations associées au propriétaire du fichier ( u), pour tous les utilisateurs (pas précédents u, gou o). Ceci est documenté dans la page de manuel.

La page de manuel de GNU chmod documente ceci comme:

Le format d'un mode symbolique est [ugoa...][[-+=][perms...]...], où permsest zéro ou plusieurs lettres de l'ensemble rwxXst, ou une seule lettre de l'ensemble ugo

et ensuite

Au lieu d'une ou plusieurs de ces lettres, vous pouvez spécifier exactement l'une des lettres ugo: les autorisations accordées à l'utilisateur propriétaire du fichier ( u), les autorisations accordées aux autres utilisateurs membres du groupe du fichier ( g) et le autorisations accordées aux utilisateurs qui n'appartiennent à aucune des deux catégories précédentes ( o)

Cela -usignifie donc supprimer ( -) toutes les autorisations actuellement activées pour le propriétaire ( u) pour tout le monde (de manière équivalente à a-u, sauf honorer le umask actuel). Bien que cela ne soit pas souvent très utile, l'analogue le chmod +usera parfois, par exemple, pour copier les autorisations du propriétaire sur d'autres lors d'une opération récursive.


Il est également documenté dans POSIX , mais plus obscurément défini: la spécification d'autorisation est largement who[+-=]perms(ou un nombre), et l'effet de ceux-ci est spécifié plus en détail:

Les symboles permcopy u, get odoivent représenter les autorisations actuelles associées à l'utilisateur, un groupe, et d' autres parties des bits de mode de fichier, respectivement. Pour le reste de cette section, se permréfère aux non-terminaux permet permcopyà la grammaire.

puis

-

... Si qui n'est pas spécifié, les bits de mode de fichier représentés par perm pour le propriétaire, le groupe et les autres autorisations, à l'exception de ceux avec des bits correspondants dans le masque de création de mode de fichier du processus d'appel, doivent être effacés.

Michael Homer
la source
Merci, Michael. La documentation POSIX est convaincante. Toutefois GNU ... S'il vous plaît voir ce commentaire de la mine. Je ne vois pas comment ce qui vient après "So" découle de ce qui est avant. permspeut être u, que j'ai. Oui, uspécifie les autorisations ou le propriétaire. Mais comment s'ensuit-il que -ules autorisations du propriétaire (module umask) soient supprimées de tous les utilisateurs?
y_wc
Parce que c'est ce qui fait -toujours: il supprime les autorisations spécifiées de la classe d'utilisateurs spécifiée. -uest exactement analogue -wou plus proche de ugo-u.
Michael Homer
J'étais sur le point de dire que je ne suis pas venu ici pour discuter de la documentation et que j'étais content de comprendre ce qui se passait, mais les docs ont juste cliqué. Merci.
y_wc
Puis-je vous déranger avec une autre chmodquestion de documentation? Faites-moi savoir si vous pensez que cela mérite une question distincte. "et = entraîne leur ajout et entraîne la suppression des bits non mentionnés, sauf que les bits d'ID de groupe et d'utilisateur de jeu non mentionnés ne sont pas affectés." Pour moi, cela signifie que, étant donné un répertoire dont le propriétaire n'a qu'un accès en écriture, chmod u=rx directorylaissera les autorisations du propriétaire comme rwx. Mais ce n'est pas ce qui se passe, au lieu de cela, ils deviennent les attentes r-x. Suis-je mal interprété quelque chose?
y_wc
Cela signifie que les sbits setuid / setgid ( ) sont laissés seuls si vous ne les mentionnez pas, et tout ce que vous n'avez pas spécifié est supprimé.
Michael Homer
2

La réponse est un peu similaire à /unix//a/429424/255251 .

chmod -u file_name

ne supprime pas toutes les autorisations, mais prend en compte la umaskvaleur.

umask
0022
ls -l file
-rwxrwxrwx 1 user user 4 Feb 25 15:17 file
chmod -u file
chmod: file: new permissions are ----w--w-, not ---------
ls -l file
-----w--w- 1 user user 4 Feb 25 15:17 file

Maintenant, changez la valeur umask

umask 777
chmod 777 file
chmod -u file
chmod: file: new permissions are rwxrwxrwx, not ---------
ls -l file
-rwxrwxrwx 1 user user 4 Feb 25 15:17 file
Prvt_Yadav
la source
2
Instructif, bon à savoir et très utile, mais je pense que ce n'est pas vraiment le problème, bien qu'il soit très lié. Merci.
y_wc