Puis-je autoriser les utilisateurs à modifier un fichier qui ne leur appartient pas?

17

Je voudrais autoriser les utilisateurs à chmoder un fichier appartenant à root ou à un utilisateur qui n'est pas lui-même. J'ai modifié le fichier en 777 et j'obtiens "opération non autorisée". J'ai ajouté l'utilisateur au groupe du fichier et j'obtiens le même. Pourquoi un utilisateur ne peut-il pas modifier un fichier auquel il a accès en écriture?

ashleysmithgpu
la source
1
Par cette logique, pourquoi ne pas tout exécuter en tant que root? Si n'importe quel utilisateur peut changer n'importe quel mode, vous détruisez fondamentalement tout le modèle d'autorisations Unix ...
Chris Down
1
Qu'est-ce que tu veux faire? vous devriez peut-être jeter un œil à sudo: linux.die.net/man/8/sudo & linux.die.net/man/5/sudoers
xx4h
Le fichier a les autorisations 777, un utilisateur peut aller dans "mv file file.old; cat file.old> file" et il serait désormais propriétaire du fichier et pourrait le modifier. Pourquoi ne peuvent-ils pas "chmod 777 file"?
ashleysmithgpu
5
Non, ils ne peuvent le faire que s'ils ont une autorisation d'écriture dans le répertoire. Si l'utilisateur avait le droit de modifier les autorisations d'un fichier qu'il ne possède pas, en paramétrant le mode 04777 et en y copiant / usr / bin / env, il pouvait exécuter n'importe quelle commande en tant qu'utilisateur.
Stéphane Chazelas
@StephaneChazelas C'est un argument étrange car le noyau pourrait facilement décider (et le fait!) D'autoriser les non-propriétaires de tels changements sans être lié par cette décision de leur permettre toutes sortes de changements. Après tout, SUID est même réinitialisé lorsqu'un non-propriétaire écrit le fichier.
Hauke ​​Laging

Réponses:

8

Pourquoi un utilisateur ne peut-il pas modifier un fichier auquel il a accès en écriture?

Pour les droits d'accès normaux, il s'agit d'une décision de conception. Vous avez besoin de richacls : WRITE_ACLet peut-être WRITE_OWNER.

Hauke ​​Laging
la source
1
Et vous devez avertir que richacls n'est généralement pas disponible.
sendmoreinfo
@sendmoreinfo L'article de Wikipédia le dit et il doit évidemment être lu car ma réponse n'explique pas ce que sont les richacls et comment ils sont utilisés. Il est ridicule de considérer une bonne réponse «non utile» à cause de cela. D'autant plus qu'il n'y a pas d'alternative équivalente. La prochaine fois, effectuez une modification si vous pensez que ces informations sont nécessaires.
Hauke ​​Laging
Je vois, c'est une décision de conception, merci
ashleysmithgpu
2
Vous avez évidemment utilisé la fonctionnalité, alors expliquez-la vous-même, avec vos propres mots.
sendmoreinfo
10

Les autorisations Unix sont conçues pour être simples. Vous avez besoin de l'autorisation de lecture pour lire à partir d'un fichier, de l'autorisation d'écriture pour écrire dans un fichier et de l'autorisation d'exécution pour exécuter un fichier. Vous devez posséder un fichier pour modifier ses métadonnées¹.

Permettre à un utilisateur qui peut lire un fichier d'accorder à d'autres l'autorisation de lecture, ou autoriser un utilisateur qui peut écrire un fichier à accorder à d'autres l'autorisation d'écriture, ne changerait pas beaucoup le modèle de sécurité. En effet, les autorisations Unix sont discrétionnaires: un utilisateur qui peut lire un fichier peut exposer son contenu à d'autres utilisateurs, même si ces autres utilisateurs ne seraient pas autrement en mesure de lire le fichier (et de même pour l'écriture, l'utilisateur pourrait agir en tant que proxy et écrire au nom des autres).

D'un autre côté, permettre à un utilisateur d'accorder une autorisation qu'il n'a pas briserait complètement le système d'autorisation: l'utilisateur pourrait s'octroyer toutes les autorisations.

Il est assez rare de devoir modifier les autorisations d'un fichier que vous ne possédez pas. En règle générale, vous devez prévoir que le fichier dispose des autorisations appropriées dès sa création. Si vous en avez vraiment besoin, vous pouvez donner des sudo chmoddroits d' utilisateur pour un mode particulier et un fichier particulier (par exemple joe: ALL = (ALL) chmod g+r /path/to/file).

¹ A l' exception des temps d'accès et de modification, qui sont particuliers car la lecture ou l'écriture dans le fichier les définit également.

Gilles 'SO- arrête d'être méchant'
la source
Dans mon cas d'utilisation, il existe à la fois un processus web (par www-data) et un processus cli (par moi-même), qui veulent définir des autorisations sur un fichier. Je me suis ajouté au groupe www-data, mais ce n'est pas suffisant.
donquixote
Même changer de propriétaire / groupe pour moi: www-data n'aide pas. (Je n'ai pas conçu le mécanisme qui essaie de définir les autorisations, je n'ai aucun contrôle sur lui)
donquixote