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)?

sudosirve. ¿Cuáles son sus objeciones comerciales a su usosudopara 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 connamedprivilegios 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 reloadsin 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
visudolugar 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
Defaultsin/etc/sudoersno 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/sudoersen la mayoría de los sistemas. Puede averiguar su sintaxis buscando en Google o mediante unman sudocomando.No debe editar este archivo directamente; hacerlo puede conducir a condiciones de carrera de seguridad. En su lugar, use el
visudocomando (que es un contenedor alrededor de su$EDITORvariable 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/rndcserá:#!/bin/bash exec /usr/bin/sudo /usr/sbin/rndc "$@"Obtenga este directorio en su
PATHvariable de entorno (por ejemplo, en todo el sistema o en su local.profile).fuente
execusarí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
rndcque no la necesitesudoen absoluto.rndcpuede comunicarse con cualquiernamedproceso 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.keyy normalmente solo se puede leer para el usuariobindy el grupobind.Cualquier persona que tenga acceso de lectura a ese archivo de clave (o una copia idéntica del mismo) puede usar
rndcpara controlar el servidor BIND, por lo que la solución más fácil en este caso particular sería agregar al usuario albindgrupo.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