Tengo un script que me da un control preciso sobre el brillo de la retroiluminación y requiere sudo
ejecutarlo. Es esencialmente esto:
backlight="/sys/class/backlight/acpi_video0/brightness"
echo $1 | tee $backlight
y vive en ~/bin/backlight-adjust
. El script necesita sudo
privilegios, porque tee $backlight
está escribiendo en una ubicación privilegiada. Por lo tanto, fallará si no se ejecuta con sudo
.
Este enfoque tiene un problema, porque no puedo simplemente ejecutarlo sudo backlight-adjust
, porque ~/bin
no está $PATH
en el sudo
entorno, solo en mi entorno. Entonces tendría que correr sudo env "PATH=$PATH" backlight-adjust
o algo similar.
Alternativamente, podría haberlo escrito así:
backlight="/sys/class/backlight/acpi_video0/brightness"
echo $1 | sudo tee $backlight
y me pide la contraseña.
El segundo enfoque funciona mejor para mí porque no tengo que recordar escribir sudo; me avisará Y puedo mantener mi $PATH
intacto. Esto se siente más conveniente en general, pero ¿hay alguna razón por la que no debería hacerlo de la segunda manera?
(Estoy ejecutando Xubuntu 14.04 y mi shell es GNU bash 4.2.45, si eso hace la diferencia).
fuente
sudo
realmente mantiene mi$PATH
por defecto, así que no tengo este problema.Respuestas:
Personalmente, usaría un enfoque diferente. Haz un alias para tu guión. Agregue esta línea a su
~/.bashrc
(o equivalente en otros shells)De esa manera, no necesita preocuparse por recordar ejecutarlo
sudo
y no necesita agregarsudo
el script. Será completamente transparente para usted y simplemente solicitará su contraseña cuando intente ejecutarbacklight-adjust
.fuente
sudo
el script real, especialmente porque eso le permite ver fácilmente qué elementos del script realmente requieren permisos de root.No puedo ver por qué podría ser incorrecto, aunque normalmente prefiero que los comandos no me pregunten cosas, por lo que son programables. Puede ajustar
/etc/sudoers
para quesudo
funcione sin una contraseña.Pero ... ¿por qué no agregar
en tu
/etc/rc.local
y olvidartesudo
?(En Ubuntu, si puedes usarlo,
sudo
estás en el grupo sudo , así que puedes usarlochgrp sudo /sys...
y estar contento con él).fuente
Alternativamente, podría agregar
a su
/etc/sudoers
archivofuente
Usted estado sudo retroiluminación ajustar, porque ~ / bin no está en el $ PATH en el entorno de sudo
Entonces, ¿por qué depender de eso? Creo que deberías cambiar esa línea
/home/user/bin/backlight-adjust
y funcionará.Pero realmente me gustaría la solución de Terdon de usar un alias también. O puede colocar su script
/usr/bin/
y estará disponible para todos los usuarios (incluida la raíz)fuente
~/bin
porque está bajo el repositorio de archivos de puntos de mi casa, por lo que permanece en el control de versiones.-E
bandera para preservar el medio ambiente:sudo -E command
sudo env "PATH=$PATH" ...
).No se puede dar una regla general ... si el script / programa está diseñado para realizar una reconfiguración (por ejemplo, una impresora) y debe ser llamado por usuarios habituales, debe hacerlo. De lo contrario, lo dejaría bastante bien: si un usuario normal lo ejecuta, simplemente falla (ya sea como resultado de una verificación explícita o simplemente porque no se le permite hacer algo).
Los privilegios elevados se deben entregar con moderación, si es que lo hacen. Cambiar a un privilegio superior es complicado, mejor déjelo en manos de los expertos (es decir,
sudo(1)
).fuente
Yo personalmente uso algo como
${SUDO}
en mis scripts, para que la persona que llama pueda configurarlo si es necesario, o${SUDO:-sudo}
para usarlo de forma predeterminada.Sin embargo, en su caso específico, estoy con la respuesta aceptada.
fuente
Coloque el script (sin el
sudo
) en una ubicación adecuada para todo el usuario, como/bin
, y luego haga esto:Esto funciona configurando el indicador setuid, lo que significa que siempre se ejecutará como el propietario del archivo. Para más detalles, lea http://major.io/2007/02/13/chmod-and-the-mysterious-first-octet/ . Realmente no sé mucho sobre cómo funciona esto, lo encontré buscando en Google basado en algo que pensé que leí hace unos años.
fuente
4755
significa siempre ejecutado como propietario, el propietario puede leer, escribir y ejecutar, el grupo puede leer y ejecutar, y los usuarios pueden leer y ejecutar, que es el nivel de permiso estándar para las cosas que cualquier usuario debería poder hacer con permisos de root.