La spécification POSIX pour l' chown
utilitaire mentionne dans sa section sur la justification de la chown user:group
syntaxe (anciennement chown user.group
) (c'est moi qui souligne):
La méthode 4.3 BSD de spécification du propriétaire et du groupe a été incluse dans ce volume de POSIX.1-2008 car:
- Dans certains cas, la condition de fin souhaitée n'a pas pu être atteinte à l'aide des utilitaires chgrp et chown (qui n'ont modifié que l'ID utilisateur). (Si le propriétaire actuel n'est pas membre du groupe souhaité et que le propriétaire souhaité n'est pas membre du groupe actuel, la fonction chown () peut échouer à moins que le propriétaire et le groupe ne soient modifiés en même temps.)
Je pensais que la user:group
syntaxe était une chose pratique. Maintenant, ce qui précède implique qu'il y a des choses que vous pouvez faire avec chown user:group
lesquelles vous ne pouvez paschgrp group; chown user
Maintenant, ce texte n'a plus de sens pour moi. Dans 4.3BSD, seul root pouvait changer le propriétaire d'un fichier, donc en tout cas il n'y a aucune restriction dans ce qu'il peut faire.
SysV et quelques autres systèmes permettent (ou permettaient) au propriétaire d'un fichier de changer l'utilisateur et le groupe d'un fichier en n'importe quoi, mais même dans ce système, le texte ci-dessus n'a pas de sens pour moi. OK, si on fait un chown someone-else the-file
, on ne peut pas faire chgrp something-else the-file
après parce qu'on n'est plus le propriétaire du fichier, mais rien ne l'empêche de faire le chgrp
premier (rester le propriétaire du fichier) et chown
après, et ce n'est pas ce que le le texte ci-dessus dit exactement.
Je ne comprends pas ce que le propriétaire souhaité n'est pas membre du groupe actuel a à voir avec le problème.
Quelles sont donc les conditions pour lesquelles la fonction chown () pourrait échouer à moins que le propriétaire et le groupe ne soient modifiés en même temps , et sur quel système?
chown me:my-group file
si le fichier se trouve dans un emplacement où j'ai un accès en lecture / écriture (non collant). Je ne pouvais pas chgrp d'abord en tant que non propriétaire. Je ne pouvais pas le montrer en premier car cela entraînerait un fichier que je ne pourrais pas créer: je possède un fichier avec un groupe dont je ne suis pas membre.Réponses:
Le sous-système Microsoft Interix Unix (maintenant retiré) pour son noyau NT a traité un peu différemment les autorisations des utilisateurs et des groupes que certains autres:
Voici quelques extraits manuels plus spécifiques:
Comme je l'ai lu, cela signifie que si votre compte d'utilisateur appartient à un groupe Windows avec des privilèges suffisants pour modifier les autorisations d'un fichier qui appartient à ce groupe, il est possible d'effectivement
chgrp
ce fichier hors du contrôle de votre compte d'utilisateur. Cela équivaut à moins de contrôle que vous pourriez avoir avecchown
desuser:group
paramètres explicites . Dans ce contexte sans possibilité de déclarationuser:
et:group
vous n'auriez jamais pu obtenir les mêmes résultats qu'autrement.Voici un lien vers un aperçu détaillé de la façon dont Interix interagit avec les listes de contrôle d'accès Windows en mettant l'accent sur la façon dont ces connaissances peuvent s'appliquer aux systèmes de fichiers Samba sur d'autres variantes Unix.
Voici un lien vers un document Solaris désormais obsolète décrivant le tunable
rstchown
qui ...Apparemment, si le paramètre est réglé sur une valeur de
0
...Une telle option n'invalide pas la conformité POSIX de Solaris . Le simple fait que ce soit une option le qualifie de conforme :
La
chown()
fonction système - qui est l'appel système documenté effectué à la fois par les utilitaires shellchown
etchgrp
- est spécifiée pour échouer pour de nombreuses raisons. Parmi eux:Le comportement d'octroi de droits de modification d'autorisations à des utilisateurs non root n'a cependant jamais été unique à Solaris. Il y a une excellente couverture - bien que quelque peu datée - des autorisations de fichiers Unix dans ce post du forum dans lequel l'auteur déclare:
Un autre bon - et plus récent - message de liste de diffusion le cite et continue:
Et comme vous le signalez en 2003 :
... qui dépendait d'un
setprivgroup
paramètre de configuration .Dans tous les cas où un utilisateur non root peut manipuler les autorisations de fichier, il est concevable, comme cela est mentionné dans la justification citée dans votre question, qu'un utilisateur puisse
chown
un fichier que cet utilisateur possède afin qu'il appartienne à un autre utilisateur. Si la propriété du groupe du fichier et leschown
groupes de l'utilisateur ing ne s'alignent pas, l'utilisateur ne pourra plus modifier ce fichier.Dans ce scénario,
chown
alorschgrp
échouerait, car l'utilisateur n'aurait plus les autorisations pour modifier les autorisations de ce fichier, tandis quechown user:group
- tant que le groupe serait parmi les siens - réussirait.Il existe probablement de nombreuses autres situations de niche qui peuvent résulter de la même manière, qui peuvent inclure des répertoires de bits collants et / ou setgid , un système de fichiers et / ou des listes de contrôle d'accès spécifiques à l'implémentation. Ce fil est intéressant, par exemple. Les innombrables permutations sont bien au-delà de ma faible compréhension - c'est pourquoi cette réponse est wikied. Si vous lisez ceci, vous pensez que cela vaut la peine d'être amélioré et vous pensez savoir comment - veuillez le faire .
Il existe également une documentation complète sur les divers effets possibles des autorisations de fichiers, de la traversée de l'arborescence et des liens symboliques qui pourraient provoquer un échec similaire en ce qui concerne les applications
-R
ecursiveschown
ici:À partir des en -têtes de section POSIX XRAT des troisième et quatrième domaines :
Et à partir de la
chgrp
page POSIX proprement dite, il y a ceci qui pointe vers une possible-R
action ecursive incomplète , ou du moins vers ce qui était autrefois:la source
chgrp
chown
... peut ne pas se comporter comme vous vous attendez ...Hypothèse 1: les règles permettant de déterminer si un
chown
succès vérifie indépendamment les parties utilisateur et groupe cible, c'est-à-dire qu'elles sont de la formeuser_condition(target_uid, other_environment_parameters) && group_condition(target_gid, other_environment_parameters)
.Hypothèse 2:
chown(file, -1, -1)
réussit.Hypothèse 3: les règles pour déterminer si un
chown
succès ne dépend pas du groupe auquel appartient actuellement le fichier.Corollaire: si
chown(file, uid, gid)
cela réussit, il en sera de mêmechown(file, -1, gid) && chown(file, uid, -1)
.Je ne connais pas de variante Unix qui violerait l'une de ces hypothèses, elles semblent assez sûres.
Cette phrase ressemble à quelque chose que quelqu'un du comité a dit quand il était fatigué après des heures de débat sur le nombre d'options qui pourraient tenir sur la tête d'un
ps
appel - ou que le secrétaire a mal transcrit - et que personne n'a attrapé pendant l'examen. Après tout, il existe d'autres bonnes raisons pour permettre à l'utilisateur et au groupe d'être modifiés automatiquement, y compris la raison de performance également citée dans la justification POSIX, ainsi que l'atomicité (ah, si seulement il y avait un seul appel pour changer la propriété et les autorisations ).Un cas où l'hypothèse 3 pourrait être erronée concerne un système où un processus peut obtenir la capacité de changer les propriétaires de fichiers, mais uniquement s'ils ont une autorisation d'écriture sur le fichier. Bien que quelque peu réaliste, je ne connais aucun système où ce soit le cas. Ensuite,
chgrp
à un groupe à partir d'un processus qui ne s'exécutant ni en tant que root ni en tant qu'utilisateur propriétaire du fichier pourrait rendre le fichier hors limite pour une date ultérieurechown
.Pour un appel récursif, il existe des cas extrêmes où une passe entière de
chgrp
suivie d'une passe entière dechown
peut échouer lorsqu'une seule passe réussit. Ce n'est pas un argument très convaincant, car il s'agit de répertoires que le propriétaire n'a pas l'autorisation de parcourir, et une application qui voulait se protéger contre tous ces cas devrait de toute façon manipuler les autorisations. Elle répond néanmoins techniquement à la condition de cette logique. Supposons que le processus en cours d'exécution ait un utilisateur efficacealice
, un groupe efficacestaff
et la capacité de changer arbitrairement les propriétaires de fichiers (pas seulement pour les céder; plusieurs variantes Unix ont une telle capacité, bien qu'elle soit rarement accordée aux processus non root).la source
chgrp
ouchown
pourrait avoir des effets secondaires qui affectent la capacité de faire l'autre. Par exemple,chown
enlève la possibilité dechgrp
, c'est un fait.chgrp
efface le bit setuid / setgid, il peut effacer une forme d'ACL ou une autre forme de contexte de sécurité ...chown
suivi dechgrp
pourrait échouer, mais la question porte surchgrp
suivi dechown
. Hmmm, contexte de sécurité… peut-être dans un système avec un contrôle d'accès obligatoire,chgrp
pourrait tacher un fichier et le rendre illisible? Cela semble tiré par les cheveux.dir
, donc pour que cela fonctionne,chown
il faudrait d'abord traiter la profondeur des fichiers et je ne connais aucune implémentation qui le fasse. C'est donc un cas presque valable où chgrp + chown échouerait là où chmod u: g ne pourrait pas, mais cela ne correspond pas vraiment au texte de la justification.chown
théories récursives des cas marginaux semblent être en conflit.