web-dev-qa-db-fra.com

Pourquoi un utilisateur normal ne peut-il pas "chown" un fichier?

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?

82
phleg

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:

  • Si un système a des quotas de disque activés, Alice pourrait créer un fichier accessible en écriture dans un répertoire accessible uniquement par elle (donc personne d'autre ne pourrait accéder à ce fichier en écriture), puis exécuter 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.
  • Si Alice donne un fichier à Bill, il n'y a aucune trace que Bill n'a pas créé ce fichier. Cela peut être un problème si le fichier contient des données illégales ou compromettantes.
  • Certains programmes nécessitent que leur fichier d'entrée appartienne à un utilisateur particulier afin d'authentifier une demande (par exemple, le fichier contient des instructions que le programme exécutera au nom de cet utilisateur). Ce n'est généralement pas une conception sécurisée, car même si Bill a créé un fichier contenant des instructions syntaxiquement correctes, il n'a peut-être pas eu l'intention de les exécuter à ce moment particulier. Néanmoins, permettre à Alice de créer un fichier avec un contenu arbitraire et de le prendre comme entrée de Bill ne peut qu'empirer les choses.

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.

15
user1910461

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.

0
Dom