Je dois autoriser les utilisateurs du dba
groupe à contrôler les database@
services. La réponse à cette question connexe est de simplement lister tous les systemctl
"verbes" que je veux autoriser dans le sudoers
fichier, cependant, cela ne s'applique pas à mon cas car je ne sais pas à l'avance quelles bases de données peuvent exister dans le système. Par exemple, si je liste
%dba = /usr/bin/systemctl start database@awsesomeapp
%dba = /usr/bin/systemctl start database@anotherawsesomeapp
%dba = /usr/bin/systemctl start database@yetanotherawsesomeapp
%dba = /usr/bin/systemctl start database@wowyetanotherawsesomeapp
# ... other "verbs" omitted for brevity
qui ne couvre pas les cas qui pourraient exister dans le futur, et un dba ne pourra pas
$ sudo systemctl start database@omgwowyetanotherawsesomeapp
Quoi qu'il en soit, je pense plus en termes d'emballage que de fidélité à un système spécifique.
Notez que, comme le montre cette réponse étonnante à une autre question connexe , l'utilisation de sudo globs pour cela n'est finalement pas sécurisée:
%dba ALL = /usr/bin/systemctl start database@[a-z]* # UNSAFE!
permet
$ sudo systemctl start database@awsesomeapp unrelatedservice
Je soupçonne que l'utilisation sudo
ne résoudra pas mon problème (même si j'espère que je me trompe). Existe-t-il un autre moyen de permettre aux utilisateurs non root de contrôler les systemd
services?
Pour ce que ça vaut, je dois le faire dans un système CentOS 7 et des systèmes RHEL7 à l'avenir. Je serais également intéressé par des solutions qui fonctionnent sur Arch Linux.
la source
Une solution proposée basée sur
SUID
You pourrait créer ledit script qui appelle systemctl avec sudo. Rendez le script détenu par root. Fournissez l'
SUID
autorisation de rooter, de lire et d'exécuter des autorisations au groupe d'administrateurs de base de données (dba).Faites juste attention à ne pas donner de permission d'écriture au groupe ou aux autres, car de cette façon, ils peuvent changer le script et le faire exécuter tout ce qui est précédé de sudo! Assurez-vous également que le script est à l'épreuve des balles en entrée.
Ce script pourrait être amélioré en vérifiant si l'argument est bien fourni et en imprimant un message Usage: sinon ..., aussi puisqu'il s'agit d'un script avec lequel
SUID
il conviendrait de vérifier; pour éviter l'injection d'autres commandes après l'argument. Ou encore mieux, assurez-vous de n'autoriser en entrée qu'une des chaînes liées à l'application que vous avez mentionnées!Ensuite, vous devez vous assurer que les autorisations pour le script sont strictement les suivantes:
Ensuite, pour vérifier les autorisations correctes:
Donc, pour récapituler:
1. le
owner of the script is root
2. le fichier
can be read and executed by the dba group members
3.
no-one else will be able to even read
le.4.
SUID
permettra à l'utilisateur qui exécute le script de devenir root tant que le script est exécuté.5. Donc sudo ne s'arrêtera pas pour un mot de passe.
Dans tous les cas, dans un système avec plusieurs utilisateurs, être très prudent avec
SUID
car il peut laisser place à l' abus d'autorisation.la source
SUID
ne fonctionnera pas pour les scripts par défaut.