web-dev-qa-db-fra.com

Belle commande sans privilèges root

Je dois exécuter dosemu avec Nice --20 à partir du script. Le problème est le suivant: une valeur négative ne peut être appliquée qu'avec Sudo.

Connaissez-vous un moyen d'exécuter la commande Nice sans Sudo ou simplement d'exécuter Nice --20 dosemu à partir d'un script?

6
Tomasz Matoga

Malheureusement, je ne pense pas que ce soit facilement faisable.

Si votre processus dosemu s'exécute en tant qu'utilisateur distinct, vous pouvez définir la priorité de tous les processus de cet utilisateur sur une valeur négative à l'aide de /etc/security/limits.conf.

EDIT: bête moi, vous ne peut pas créer un script shell suid, ça ne marche pas.

EDIT2: OK, vous pouvez configurer Sudo pour qu'il ne vous oblige pas à donner un mot de passe lorsqu'un membre du groupe Sudo exécute Nice ou renice. Dans une fenêtre de terminal, entrez

Sudo visudo

Cela ouvrira un éditeur de texte simple qui modifiera la configuration de Sudo. Ajoutez la ligne suivante à la fin du fichier:

%Sudo   ALL = (ALL) NOPASSWD: /usr/bin/Nice,/usr/bin/renice

Quittez l'éditeur. L'éditeur s'assurera que la syntaxe est correcte (sinon, on pourrait casser le système). Maintenant, vous pouvez courir

Sudo Nice -n -20 Sudo -u $USER /some/program

et vous ne serez pas invité à entrer un mot de passe. En fait, Nice va lancer un autre processus appelé Sudo avec la priorité -20. Ce nouveau processus Sudo reviendra à votre utilisateur d'origine (-u $USER, sinon vous exécuterez le programme/some/en tant que root) et démarrerez/some/programme.

4
January

essaye ça:

Sudo -k Nice -n -20 su -c "dosemu" $USER

pendant qu'il tourne, lancez ceci:

ps -A --forest -o pid,user,command |grep dosemu

vous verrez que Nice a été exécuté avec les privilèges root, mais dosemu a été exécuté en tant que $ USER normal.

Comprenez comment c'est sûr: pour vous assurer qu'il n'y a pas de faille, essayez ceci. Vous verrez qu'il demande le mot de passe deux fois, parce que Sudo ls est exécuté avec $ USER normal, donc le script avec Sudo ne fonctionnera pas inaperçu:

Sudo -k Nice -n -5 su -c "Sudo ls" $USER

et cela demandera le mot de passe une seule fois car il est déjà root sur Sudo ls:

Sudo -k Nice -n -5 su -c "Sudo ls" root

PS: au lieu de dosemu, pour les tests, j’ai utilisé sleep 120, et Sudo -k est destiné à renforcer la sécurité.

1
Aquarius Power

Essayez: Sudo -s -H

Il vous connecte en tant que root, après quoi vous n’avez plus besoin de Sudo.

Ensuite, lancez votre script.

0
Samuel Ralak