Pourquoi la commande chown
est-elle uniquement rootée? Pourquoi les utilisateurs non root ne peuvent-ils pas utiliser chown pour donner des fichiers qu'ils possèdent?
La plupart des systèmes Unix empêchent les utilisateurs de "distribuer" des fichiers, c'est-à-dire que les utilisateurs ne peuvent exécuter chown
que s'ils ont les privilèges d'utilisateur et de groupe cible. Étant donné que l'utilisation de chown
nécessite de posséder le fichier ou d'être root (les utilisateurs ne peuvent jamais s'approprier les fichiers d'autres utilisateurs), seul root peut exécuter chown
pour changer le propriétaire d'un fichier en un autre utilisateur.
La raison de cette restriction est que le fait de donner un fichier à un autre utilisateur peut permettre à de mauvaises choses de se produire dans des situations rares, mais toujours importantes. Par exemple:
chown
pour créer ce fichier appartenant à un autre utilisateur Bill. Le fichier compterait alors sous le quota de disque de Bill même si seule Alice peut utiliser le fichier.Sous Linux, vous avez besoin de la capacité CAP_CHOWN pour chown. root est accordé tel. Reportez-vous à: http://vouters.dyndns.org/tima/Linux-OpenVMS-C-Implementing_chown.html pour des explications. Si vous avez l'intention de donner la capacité CAP_CHOWN, créez votre code avec libcap-ng ou libcap comme démontré par: http://vouters.dyndns.org/tima/Linux-PAM-C-Pluggable_Authentication_Modules_programming_example.html où vous devez simplement remplacer CAP_AUDIT_WRITE par CAP_CHOWN.
Vous pouvez lancer la commande mais elle ne fonctionnera pas si vous n'êtes pas root. C'est simple: imaginez un utilisateur qui peut changer un logiciel en utilisateur root. Il peut ajouter le bit setuid et, voilà, le gars est root! Ainsi, l'utilisation peut ajouter le bit avec chmod, mais aucune chance de changer le propriétaire des fichiers.