Nous avons des images Linux basées sur RH; sur lequel je dois "appliquer" certaines "archives spéciales" afin de les mettre à niveau vers la dernière version de développement de notre produit.
La personne qui a créé l'archive a pensé que dans notre image de base, certaines autorisations étaient incorrectes; donc on nous a dit de courir
sudo chgrp -R nobody /whatever
Nous l'avons fait; et plus tard, lorsque notre application est en cours d'exécution, des problèmes obscurs sont survenus.
Ce que je trouve plus tard: l'appel à chgrp va effacer les informations bit setuid sur nos binaires dans les / whatever.
Et le problème réel est: certains de nos binaires doivent avoir ce bit setuid pour fonctionner correctement.
Pour faire court: existe-t-il un moyen d'exécuter cette commande "chgrp" sans tuer mes bits setuid?
Je viens de lancer ce qui suit sur mon Ubuntu local; conduisant au même résultat:
mkdir sticky
cd sticky/
touch blub
chmod 4755 blub
ls -al blub
-> me montre le nom du fichier avec un fond rouge -> oui, oui, setuid
chgrp -R myuser .
ls -al blub
-> me montre le nom du fichier sans fond rouge -> setuid a disparu
4XXX
bit est appelé bit setuid (s
), pas collant. Sticky est let
bit et son but est un peu différent: en.wikipedia.org/wiki/Sticky_bitsetuid
bit, pas lesticky
bit. (2) Ne pas effacer lesetuid
bit lorsque vous le faiteschgrp
ouchown
serait un problème de sécurité.Réponses:
Si vous souhaitez implémenter votre
chgrp -R nobody /whatever
tout en conservant le bit setuid, vous pouvez utiliser ces deuxfind
commandesL'
find ... -perm 04000
option récupère les fichiers avec le bit setuid défini. La première commande applique ensuite lechgrp
puis unchmod
pour rétablir le bit setuid qui a été supprimé. Le second s'appliquechgrp
à tous les fichiers qui n'ont pas de bit setuid.Dans tous les cas, vous ne voulez pas appeler
chgrp
ouchmod
sur des liens symboliques car cela affecterait leurs cibles à la place, d'où le! -type l
.la source
chgrp
efface également le bit setgid (et les capacités sous Linux) qui pourraient également avoir besoin d'être restaurés.find
find
. Je n'aime pas les longues lignes en SE lorsque vous devez faire défiler le texte. Mon ajout du! -type l a fait passer le capfind
approche avec-exec +
peut être difficile à faire de manière fiable si cela finit par diviser lechmod
/chgrp
s en plusieurs invocations.find . ! -type l -exec chgrp nobody {} + \( -perms -6000 -exec chmod gu+s {} + -o -perms -4000 -exec chmod u+s {} + -o -perms -2000 -exec chmod g+s {} + \)
devrait aller. Parce que leschgrp
correspondances pour plus de fichiers, pour chaque fichier, il doit être fait avant lechmod
s.La suppression des bits SUID et SGID sur
chgrp
(ouchown
) est parfaitement raisonnable. Il s'agit d'une mesure de sécurité afin d'éviter les problèmes de sécurité. Pour SGID (sur les exécutables, je suppose) signifie exécuter ce programme avec le groupe effectif du propriétaire du groupe .Si vous changez le propriétaire du groupe, en termes de sécurité et de contrôle d'accès, c'est quelque chose de complètement différent, c'est-à-dire qu'au lieu de s'exécuter avec un groupe efficace,
uvw
le programme s'exécute maintenant avec un groupe efficacexyz
.Ainsi, vous devez restaurer le bit SUID ou SGID explicitement lors du changement de propriétaire.
Addendum: sur l'affirmation selon laquelle chgrp (ou chown) ne devrait effacer que SGID (ou SUID, resp.)
En changeant
chown
ouchgrp
en modifiant le paramètre de sécurité d'un exécutable, c'est une raison suffisante pour effacer tout attribut d'élévation de privilèges. La puissance d'Unix vient de la simplicité conceptuelle, et la sécurité Unix est déjà assez délicate. À cette fin, la suppression de SUID et SGID sur tout changement de propriétaire est simplement un filet de sécurité - après tout, dans l'histoire d'Unix / Linux, il y avait pas mal de vulnérabilités en raison de paramètres SUID ou SGID malavisés.Il n'y a donc aucune raison plus profonde pour laquelle Unix se comporte de cette façon, c'est juste une décision de conception conservatrice.
la source
uvw
le programme s'exécuterait maintenant avec un groupe efficacexyz
", mais cela ne s'applique pas au cas en discussion.chown
ouchgrp
en modifiant le paramètre de sécurité, c'est une raison suffisante pour effacer les attributs d'élévation de privilèges. Il y a de fortes chances que cela frappe autrement les imprudents.La compensation du
setuid
,setgid
bit (au moins sous Linux) sur les non-répertoires se fait par le noyau lors de l'chown()
appel système fait parchgrp
, non pas parchgrp
lui - même. Le seul moyen est donc de le restaurer par la suite.Il efface également les capacités de sécurité.
Donc, sur GNU Linux:
Et exécutez (as
root
):pour changer le groupe tout en essayant de conserver les autorisations.
Récursivement, vous pourriez faire:
(c'est tout en supposant que rien ne gâche autrement les fichiers en même temps).
la source
Comme d'habitude dans l'administration, il y a plusieurs façons de procéder.
La solution que j'ai mise en place se présente comme suit:
la source