Quiero que el usuario predeterminado ubuntu
pueda ejecutar un servicio específico sin que se le solicite una contraseña.
Específicamente systemctl restart unicorn_my_app.service
.
Han seguido las instrucciones aquí para agregar usuarios ubuntu
a un grupo recién creado LimitedAdmins
, que se confirma con:
$ getent group LimitedAdmins
LimitedAdmins:x:1001:ubuntu
Creó un nuevo archivo, limitedadmins
(usando sudo vim
) en el /etc/sudoers.d
directorio que contiene el siguiente texto:
%LimitedAdmins ALL=NOPASSWD: /etc/init.d/unicorn_ofn_america restart, /etc/init.d/unicorn_ofn_america start
También he intentado:
%LimitedAdmins ALL=NOPASSWD: /bin/systemctl/unicorn_ofn_america restart, /bin/systemctl/unicorn_ofn_america start
(Y /bin/systemd
)
El contenido de /etc/sudoers/
es el predeterminado según lo confirmado con sudo visudo
(o sudo cat /etc/sudoers
):
#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults env_reset
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
# Host alias specification
# User alias specification
# Cmnd alias specification
# User privilege specification
root ALL=(ALL:ALL) ALL
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
# See sudoers(5) for more information on "#include" directives:
#includedir /etc/sudoers.d
(El inicio de sesión hash #includedir
no es un comentario, sino parte de la sintaxis de la directiva #include ).
Sin embargo, todavía hay un mensaje de contraseña después de ejecutar systemctl restart unicorn_my_app.service
El servicio está allí en el init.d
directorio:
$ ls -l /etc/init.d | grep unicorn
-rwxr--r-- 1 ubuntu ubuntu 1874 Oct 29 06:47 unicorn_my_app
Intenté chmodding 755
en la aplicación, pero no creo que eso haga la diferencia, ya que la ubuntu
posee de todos modos.
Incluso trató de reiniciar el sistema sin diferencia. ¿Me estoy perdiendo un paso, como un reinicio / recarga)? ¿Configurando algo mal?
También debo mencionar que solía vim
crear el nuevo archivo dentro /etc/sudoers.d
, ya que parece que el visudo
comando es solo para editar /etc/sudoers
.
Respuestas:
El archivo sudoers es bastante flexible, y con eso viene la complejidad. Lo que quiere aquí es permitir el acceso al comando
/bin/systemctl
, con parámetros específicos:%LimitedAdmins ALL=NOPASSWD: /bin/systemctl restart unicorn_my_app.service
Básicamente, simplemente toma la línea de comando exacta que escribiría, codifica el nombre de la ruta por razones de seguridad y la coloca en su archivo sudoers (o
/etc/sudoers.d
). Y tenga en cuenta que 'inicio' y 'reinicio' son completamente diferentes en lo que respecta a sudo; permitir que uno no otorgue acceso al otro.fuente
/bin/systemctl restart unicorn_my_app.service
directamente desde el/etc/sudoers.d/limitedadmins
archivo y ejecutarlo en la CLI, y se me solicita una contraseña. ¿El usuarioubuntu
necesita que se especifique tp en algún lugar o loALL
abre a todos los usuarios para todos los dominios?sudo /bin/systemctl restart unicorn_my_app.service
y luego debería ejecutarse sin contraseña. (publicación como comentario en caso de que la respuesta de PsiOps esté separada de esta)systemctl restart myapp.service
no lo usáramossudo
?systemctl
está en/usr/bin
:-(.