Pourquoi un utilisateur normal `chown` ne peut-il pas créer un fichier?

75

Pourquoi la chowncommande est-elle uniquement root? Pourquoi les utilisateurs non root ne peuvent-ils pas utiliser chown pour distribuer des fichiers qu'ils possèdent?

flegme
la source
ne peux pas comprendre votre commande question chown peut être utilisé par l'utilisateur non root aussi
harish.venkat
Peut-être que je l'ai mal compris. Eh bien, la question exacte de mon professeur était: "Pourquoi le transfert de droits d'un utilisateur normal n'est-il pas autorisé dans les systèmes UNIX?" ...
flegme
19
Je pense que la vraie question est la suivante: pourquoi les utilisateurs non root ne peuvent-ils pas utiliser chownpour donner des fichiers qu'ils possèdent? (J'ai vu des systèmes où, en fonction de la configuration du système de fichiers, vous le pouvez.)
Keith Thompson
connexes: askubuntu.com/questions/95985/…
Ciro Santilli 中心 法轮功 六四 事件

Réponses:

96

La plupart des systèmes Unix empêchent les utilisateurs de «donner» des fichiers, autrement dit, les utilisateurs ne peuvent s'exécuter chownque s'ils disposent des privilèges d'utilisateur et de groupe cibles. Étant donné que l'utilisation chownné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 s'exécuter chownpour remplacer le propriétaire d'un fichier par un autre utilisateur.

La raison de cette restriction est que donner un fichier à un autre utilisateur peut permettre à de mauvaises choses de se produire dans des situations peu communes, mais néanmoins importantes. Par exemple:

  • Si des quotas de disque sont activés sur un système, Alice peut créer un fichier accessible en écriture universelle sous un répertoire accessible uniquement par elle (personne d'autre ne peut accéder à ce fichier accessible en écriture universelle), puis exécuter chownce fichier pour le faire appartenir à un autre utilisateur, Bill. Le fichier serait alors comptabilisé dans le quota de disque de Bill même si seule Alice pouvait utiliser le fichier.
  • Si Alice cède un fichier à Bill, il n'y a aucune trace que Bill n'ait pas créé ce fichier. Cela peut poser problème si le fichier contient des données illégales ou compromettantes.
  • Certains programmes requièrent que leur fichier d'entrée appartienne à un utilisateur particulier pour authentifier une demande (par exemple, le fichier contient des instructions que le programme exécutera pour le compte de cet utilisateur). Ce n'est généralement pas une conception sécurisée, car même si Bill créait un fichier contenant des instructions syntaxiquement correctes, il n'aurait peut-être pas eu l'intention de les exécuter à ce moment précis. 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'aggraver les choses.
Gilles, arrête de faire le mal
la source
3
Lors d'un travail précédent, j'ai construit un système logiciel qui dépendait de l'impossibilité de donner des fichiers. Il a utilisé la propriété du fichier pour vérifier qu'une demande avait été soumise par un utilisateur particulier. Lors de l'installation, il vérifiait si l'autorisation de donner des fichiers était autorisé et, dans l'affirmative, refusait de continuer.
Keith Thompson
2
Un autre problème plus critique est qu’un utilisateur peut copier /bin/bash, définir, puis chownle transférer à qui il veut. Maintenant, ils ont un accès shell en tant que personne.
Patrick
18
@Patrick chownefface toujours les bits setuid et setgid.
Gilles 'SO- arrête d'être méchant'
1
@Gilles et pour une bonne raison ... si vous pouviez copier un fichier binaire shell quelque part, vous pouvez y accéder, définissez les bits setuid / gid dessus et chown-le à root (ou à tout autre ordre qui vous permette d'obtenir 6755/0: 0 perms / property), vous pouvez obtenir la racine sur ce système. Oh, le commentaire de Patrick a manqué, exactement.
hanetzer
Ok, mais si je possède le drwxr-xr-x ring0 ring0 .répertoire dir ( ) dans lequel root a un fichier standard ( -rw-r--r-- root root file), pourquoi ne puis-je pas le faire chown ring0 filecar il est de toute façon autorisé à le faire, comme ring0, cp file x ; rm file ; mv x file(et quelques optionnel touch sometime file...)?
Bague Ø
15

Sous Linux, vous devez avoir la capacité CAP_CHOWN pour pouvoir chown. la racine est accordée tel. Voir: 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, construisez votre code avec libcap-ng ou libcap comme indiqué par: http://vouters.dyndns.org/tima/Linux-PAM-C-Pluggable_Authentication_Modules_programming_example.html où vous devez simplement remplacer CAP_AUDIT_WRITE. avec CAP_CHOWN.

utilisateur1910461
la source
1
+1 car vous n'êtes pas obligé d'être root. Parce que vous n'avez plus besoin d'être root.
ctrl-alt-delor
1
Parfois, vous n'avez même pas besoin de CAP_CHOWN: unix.stackexchange.com/questions/399975/… À la lecture du code source du noyau, chaque implémentation de système de fichiers est chargée de vérifier les autorisations pour chown. Et il semble qu'avec NFS, les autorisations soient vérifiées côté serveur. Et si le serveur est ... étrange ... alors c'est possible.
Mike S
0

Vous pouvez lancer la commande mais cela ne fonctionnera pas si vous n'êtes pas root. C'est simple: imaginez un utilisateur capable de changer un logiciel en utilisateur root. Il peut ajouter le bit setuid et, voilà, le gars est root! Donc, l'utilisation peut ajouter le bit avec chmod, mais aucune chance de changer le propriétaire des fichiers.

Dom
la source
12
Vous ne pouvez pas ajouter le bit setuid sur un fichier que vous ne possédez pas, et les implémentations qui permettent de donner des fichiers effacent le bit setuid.
Gilles 'SO- arrête d'être méchant'
Je pense que la réponse de Dom est la suivante: imaginez si vous pouviez. Ensuite, il y aurait des problèmes. Votre argument, que vous ne pouvez pas, est correct. Mais le PO demande "pourquoi?" La suppression du bit setuid est une autre fonction de sécurité qui pose à nouveau la question "pourquoi?" Ce que je ferais alors référence à la réponse de Dom: SI un utilisateur pouvait chown, et SI un utilisateur pouvait définir un setuid, alors ce combo serait désastreux. Je pense qu'il a raison, même s'il en manque un peu.
Mike S