Comment autoriser l'user à modifier uniquement un file protégé spécifique par sudo

Je dois accorder à l'user modifier certains files par sudo qui n'ont que l'access en lecture seule.

Par exemple, je souhaite accorder à l'user ' hosteditor ' modifier ' / etc / hosts ' file. J'ai ajouté aux sudoers suivre la ligne:

hosteditor ALL=(root) /usr/bin/vim /etc/hosts 

Maintenant, l'user hébergé peut utiliser vim uniquement pour modifier le file / etc / hosts. Mais si ces users modifient le file entre ! / Bin / sh, il obtiendra une subvention pour exécuter toutes les commands avec autorisation root.

Ce que je dois faire pour accorder à l'user modifier uniquement un file spécifique sans possibilité de système de piratage.

Après avoir étudié ce problème, j'ai trouvé la 3ème variante de la résolution de ce problème.

En éditant les sudoers, nous pouvons donner l'autorisation de l'user de lancer sudoedit . C'est un moyen sécurisé de modifier les files racine uniquement, sans possibilité de piratage. Donc, la réponse est

 hosteditor ALL=(root) sudoedit /etc/hosts 

N'utilisez pas SUDO pour cela. Au lieu de cela, ajoutez hosteditor dans un groupe et délègez l'access en écriture à ce groupe, en utilisant les ACL de file POSIX. Recherchez http://linux.die.net/man/1/setfacl pour une command pour la gestion des lists de contrôle d'access, et http://linux.die.net/man/5/acl pour l'écriture réelle sur ACL sous Linux. Cela suppose, bien sûr, que vous utilisez un système de files et un système d'authentification prenant en charge les lists de contrôle d'access au file POSIX. Pour s'assurer que les permissions restnt appliquées, vous voudrez probablement déléguer l'application de l'ACL à un outil de gestion de la configuration. Puppet peut faire des ACL POSIX (voir https://github.com/dobbymoodge/puppet-acl ). CFEngine peut le faire (voir https://auth.cfengine.com/archive/manuals/cf-manuals/cf2-Reference#acl ), et je suis sûr que Chef peut aussi.

L'autre option consiste à fournir une command ou un service que l'hôte hébergé peut utiliser pour générer le file / etc / hosts à partir d'une database / feuille de calcul et d'un model. Cela augmenterait la flexibilité et vous permettrait de mettre des commands dans la command ou le service.

Je suis convaincu qu'il existe d'autres façons de résoudre ce problème, y compris une instance DNS distincte (ou même une vue DNS séparée, si vous utilisez BIND9) et en donnant au count de l'hôte la possibilité d'append et de supprimer des loggings à l'aide de la command NSUPDATE (voir http://linux.die.net/man/8/nsupdate )

Bonne chance.

Toute command peut être exécutée à partir de vi, y compris un shell permettant ainsi à un user d'exécuter vi via sudo n'est pas sécurisé. Une option plus sûre serait de définir les permissions que la réponse précédente suggère. Si vous ne pouvez pas le faire, configurez sudo pour autoriser la copy dans le file:

Cmnd_Alias ​​CP_ETC_HOSTS = / bin / cp -v ./hosts / etc / hosts

Ils peuvent éditer une copy du file et copyr leur version modifiée dans / etc / hosts.