Quiero dar acceso no sudo a un usuario no root en mi máquina, hay un usuario dns-manager, su único rol es ejecutar todos los comandos BIND (rndc, dnssec-keygen), etc.
Ahora, cada vez que tiene que ejecutar un comando, escribe,
sudo rndc reload
¿Hay alguna manera de deshacerme de este sudo, pero solo en un conjunto particular de comandos (y solo para dns-manager)?
sudo
sirve. ¿Cuáles son sus objeciones comerciales a su usosudo
para esto?sudo
. ¿Cuáles son las objeciones?sudo
, entonces? O sudo con contraseña para ejecutar la herramienta de administración de DNS , que luego puede operar connamed
privilegios de grupo o usuario, o privilegio raíz, según sea necesario.sudo
. Al tratar de explicárnoslo, puede aclarar nuestra confusión, o la suya, ¡o ambas!Respuestas:
Si entiendo sus comentarios correctamente, el problema aquí es que el comando se emitirá a través de una conexión que no tiene la capacidad de ingresar la contraseña que sudo no solicita. Además, en muchas distribuciones del sistema operativo, sudo requerirá por defecto un TTY, que este programa puede no tener.
Sin embargo, sudo puede tener una estructura de permisos muy fina, lo que permite que uno o más usuarios emitan un comando en particular sin contraseña y TTY. A continuación, le mostraré tres formas de configurar esto para sus necesidades. Cualquiera que elija, el usuario ahora podrá emitir el comando
sudo rndc reload
sin tener que ingresar una contraseña.(Además, esto puede ser innecesario, pero ... por favor, recuerde que debe hacer una copia de seguridad del archivo sudoers antes de editarlo, para mantener una concha en la que están abiertos raíces en caso de que necesite volver a la copia de seguridad, y para editar usando en
visudo
lugar desudo vi /etc/sudoers
. Esperemos que estas precauciones sean innecesarias, pero ... ¡es mejor tenerlas y no necesitarlas que a la inversa!)1. Si no desea solicitar un TTY para cualquier solicitud
La forma más fácil de deshacerse de los requisitos de TTY (si existe) es asegurarse de que la línea que comienza con
Defaults
in/etc/sudoers
no contenga la palabrarequiretty
; en su lugar, debería contenerla!requiretty
. Sin embargo, si haces esto, significa que ningún comando sudo requerirá un tty.También necesitará agregar la línea.
2. Si desea solicitar un TTY para todos los usuarios excepto este
Esto se puede hacer estableciendo un valor predeterminado para este usuario, como este:
3. Si desea solicitar un TTY para todos los comandos excepto este comando por este usuario
Esto es un poco más complejo, debido a la sintaxis del archivo sudoers. Debería crear un alias de comando para el comando y luego establecer un valor predeterminado para ese alias de comando, de esta manera:
fuente
Si. sudo se puede configurar de manera muy flexible. Aun así, debo mencionar: este tipo de soluciones no deben considerarse muy seguras, y solo deben usarse en un entorno cooperativo donde existan otros controles (por lo tanto, puede otorgar estos privilegios mejorados a su leal subordinado, pero no debería hacerlo para un cliente que solo conoce de la red).
La configuración de sudo está
/etc/sudoers
en la mayoría de los sistemas. Puede averiguar su sintaxis buscando en Google o mediante unman sudo
comando.No debe editar este archivo directamente; hacerlo puede conducir a condiciones de carrera de seguridad. En su lugar, use el
visudo
comando (que es un contenedor alrededor de su$EDITOR
variable de entorno).Después de configurar sudo, puede ajustar fácilmente esto alrededor de los comandos visibles. Es muy simple:
/usr/local/dnsadmin/bin
)Cree una secuencia de comandos de envoltura para los comandos que desea que puedan utilizarse sin sudo. Será un comando muy simple, por ejemplo,
/usr/local/dnsadmin/bin/rndc
será:#!/bin/bash exec /usr/bin/sudo /usr/sbin/rndc "$@"
Obtenga este directorio en su
PATH
variable de entorno (por ejemplo, en todo el sistema o en su local.profile
).fuente
exec
usarías el script de shell en lugar de solo llamar al comando directamente? (No digo que esté mal, solo me gustaría saber por qué lo harías para que tal vez pueda aprender algo)exec
, el comando llamado se sustituirá en el lugar del shell. La cáscara se irá. Sin un ejecutivo, el shell iniciará ese comando y luego esperará su finalización y luego se cerrará. Este segundo, exec-exe significa múltiples procesos de cooperación, lo cual es innecesario. Pero no hay una gran diferencia, sin un ejecutivo esto funcionaría tan bien como con eso.Si bien esta no es una solución general en el caso específico de
rndc
que no la necesitesudo
en absoluto.rndc
puede comunicarse con cualquiernamed
proceso a través de un socket local o un puerto remoto, utilizando una clave secreta para autenticarse. Por defecto (o al menos, para Debian, que es la distribución que uso), este archivo se puede encontrar/etc/bind/rndc.key
y normalmente solo se puede leer para el usuariobind
y el grupobind
.Cualquier persona que tenga acceso de lectura a ese archivo de clave (o una copia idéntica del mismo) puede usar
rndc
para controlar el servidor BIND, por lo que la solución más fácil en este caso particular sería agregar al usuario albind
grupo.Un sorprendente número de demonios comunes tienen algo similar (personalmente estoy descubriendo las posibilidades de los poderosos en ese sentido, pero hasta ahora parece prometedor). Si no quiere hacerlo
sudo
, tendrá que verificar si lo que quiere lograr es posible caso por caso.fuente
No desea usar sudo para otorgar root a algunos comandos. En cambio, podría chmod 4750 un programa específico [que puede ajustar el comando], para elevar los derechos de un usuario normal para ejecutarlo como root.
fuente