J'ai un script qui me donne un contrôle fin sur la luminosité de mon rétro-éclairage et nécessite sudo
de s'exécuter. C'est essentiellement ceci:
backlight="/sys/class/backlight/acpi_video0/brightness"
echo $1 | tee $backlight
et vit à ~/bin/backlight-adjust
. Le script a besoin de sudo
privilèges, car il tee $backlight
écrit dans un emplacement privilégié. Il échouera donc s'il n'est pas exécuté avec sudo
.
Cette approche a un problème, parce que je ne peux pas simplement courir sudo backlight-adjust
, parce que ce ~/bin
n'est pas $PATH
dans l' sudo
environnement, seulement dans mon environnement. Je devrais donc courir sudo env "PATH=$PATH" backlight-adjust
ou quelque chose de similaire.
Alternativement, j'aurais pu l'écrire comme ceci:
backlight="/sys/class/backlight/acpi_video0/brightness"
echo $1 | sudo tee $backlight
et me demander le mot de passe.
La deuxième approche fonctionne mieux pour moi car je n'ai pas à me rappeler de taper sudo; ça m'invitera. Et je peux garder mon $PATH
intact. Cela semble plus pratique dans l'ensemble, mais y a-t-il des raisons pour lesquelles je ne devrais pas le faire de la deuxième façon?
(J'utilise Xubuntu 14.04 et mon shell est GNU bash 4.2.45, si cela fait une différence.)
la source
sudo
conserve en fait mon$PATH
par défaut, donc je n'ai pas ce problème.Réponses:
Personnellement, j'utiliserais une approche différente. Créez un alias pour votre script. Ajoutez cette ligne à votre
~/.bashrc
(ou équivalent dans d'autres shells)De cette façon, vous n'avez pas à vous soucier de vous souvenir de l'exécuter avec
sudo
et vous n'avez pas besoin d'ajouter lesudo
au script. Il sera complètement transparent pour vous et vous demandera simplement votre mot de passe lorsque vous essayez de courirbacklight-adjust
.la source
sudo
le script réel, d'autant plus que cela vous permet de voir facilement quels éléments du script nécessitent réellement des autorisations root.Je ne vois pas pourquoi cela pourrait être incorrect --- bien que je préfère normalement que les commandes ne me demandent rien, de sorte qu'elles soient scriptables. Vous pouvez modifier
/etc/sudoers
pour que celasudo
fonctionne sans mot de passe.Mais ... pourquoi ne pas ajouter
dans votre
/etc/rc.local
et oubliersudo
?(Dans Ubuntu, si vous pouvez l'utiliser,
sudo
vous faites partie du groupe sudo , vous pouvez donc l'utiliserchgrp sudo /sys...
et en être satisfait.)la source
Vous pouvez également ajouter
à votre
/etc/sudoers
dossier.la source
Vous déclarez sudo-adjust, car ~ / bin n'est pas dans $ PATH dans l'environnement sudo
Alors pourquoi en dépendre? Je pense que vous devriez simplement changer cette ligne
/home/user/bin/backlight-adjust
et cela fonctionnera.Mais j'aimerais vraiment que Terdon utilise également un alias. Ou vous pouvez placer votre script
/usr/bin/
et il sera disponible pour tous les utilisateurs (y compris root)la source
~/bin
car il se trouve dans le référentiel de fichiers dot de ma maison, il reste donc sous contrôle de version.-E
drapeau pour préserver l'environnement:sudo -E command
sudo env "PATH=$PATH" ...
).Je ne peux pas donner de règle générale ... si le script / programme est conçu pour effectuer une reconfiguration (par exemple une imprimante) et être appelé par des utilisateurs réguliers, il doit le faire. Sinon, je laisserais assez bien seul: si un utilisateur régulier l'exécute, échouez (soit à la suite d'une vérification explicite, soit simplement parce qu'il n'est pas autorisé à faire quelque chose).
Des privilèges élevés devraient être accordés avec parcimonie, voire pas du tout. Passer à des privilèges plus élevés est délicat, mieux vaut le laisser aux experts (c.-à
sudo(1)
-d.).la source
J'utilise personnellement quelque chose comme
${SUDO}
dans mes scripts, afin que l'appelant puisse le définir si nécessaire, ou l'${SUDO:-sudo}
utiliser par défaut.Dans votre cas particulier, je suis d'accord avec la réponse, cependant.
la source
Placez le script (sans le
sudo
) dans un emplacement approprié à l'échelle de l'utilisateur, comme/bin
, puis procédez comme suit:Cela fonctionne en définissant l'indicateur setuid, ce qui signifie qu'il sera toujours exécuté en tant que propriétaire du fichier. Pour plus de détails, veuillez lire http://major.io/2007/02/13/chmod-and-the-mysterious-first-octet/ . Je ne sais pas vraiment grand-chose sur la façon dont cela fonctionne, je l'ai juste trouvé googler sur la base de quelque chose que je pensais avoir lu il y a quelques années.
la source
4755
signifie toujours exécuté en tant que propriétaire, le propriétaire peut lire, écrire et exécuter, le groupe peut lire et exécuter et les utilisateurs peuvent lire et exécuter, ce qui est le niveau d'autorisation standard pour les choses que tout utilisateur devrait être autorisé à faire avec les autorisations root.