Limitar al usuario para ejecutar comandos selectivos (Linux)

14

¿Cómo puedo limitar mi usuario para ejecutar comandos selectivos solamente? Tengo un usuario tomc en el grupo tomc. Necesito que este usuario sea sudo y luego tenga bash restringido. He intentado seguir el código en el /etc/sudoersarchivo, pero no funciona, ya que el usuario puede ejecutar otros comandos como mkdir,rm

%tomc ALL=/bin/bash,/usr/bin/vim /*
newbie17
fuente
3
Aunque el uso de sudo puede restringirse a comandos particulares, esto puede ser complicado y requiere cierta confianza. Si no confías en el usuario, entonces darles acceso a sudo es una mala idea. Les dará privilegios de root o les dará una aplicación enfocada para atacar para obtener privilegios de root. Dejar que alguien se ejecute sudo bashes equivalente en la mayoría de los casos a tener la contraseña de root. Desde un sudo bashshell pueden ejecutar cualquier comando de administración, instalar o eliminar software, eliminar usuarios y directorios, etc.
Paul
@Paul ¿Puedes sugerirme opciones mejores y prácticas para esto?
Primero, esto está fuera de tema en el desbordamiento de pila. Los mejores lugares para preguntar incluyen superusuario, askubuntu o linux & unix. Primero descubra exactamente lo que quiere permitir que tomc haga. Se debe permitir que tomc haga _____ pero no ________. Entonces pregunta. Sudo es para comandos que requieren priv root (admin). Ya puede ejecutar bash sin ejecutarlo como root.
Paul

Respuestas:

18

Puede que vayas a esto por el camino equivocado. En lugar de darle a un usuario un shell bash 'restringido', solo debe darle acceso a los comandos que necesitaría para ejecutar como root. Por ejemplo, en su archivo sudoers:

tomc ALL=(root) /usr/bin/vim /etc/myapp.conf
tomc ALL=(root) /usr/bin/less /var/log/myapp/*.log

Tenga cuidado al permitir que los usuarios ejecuten vim como root. Vim tiene muchas características integradas, como escapes a shell y la capacidad de ejecutar comandos desde vim. Dependiendo de su distribución, puede tener sudoeditdisponible. Esto funciona igual que un Vim normal, excepto que está diseñado para manejar escapes de shell y demás.

mtak
fuente
77
Ninguna de esas líneas es segura. Como mencionas,vimpuedes ejecutar comandos de shell arbitrarios. ¡Y la segunda línea probablemente lo permitaless /var/log/myapp/../../../etc/shadow! ¡Según mis experimentos, usar sudo de forma segura es difícil ! Pero si puede evitar*el uso de sy ensudoeditlugar de eso,vimentonces puede estar bien.
joeytwiddle
¡Evitar *no es suficiente! Una vez que esté lesscomo rootusuario, intente escribir !tail /var/log/secure. ¿Cómo se siente eso? Estudia la NOEXECetiqueta. Pero tome en serio el mensaje de @joeytwiddle: la seguridad de sudo es realmente difícil.
Bruno Bronosky
3

En mi Synology Diskstation que ejecuta DSM 6, solo los usuarios administradores pueden ingresar constantemente (los usuarios no administradores tienen shell como / sbin / nologin en / etc / passwd; puede configurar esto en / bin / sh para permitir temporalmente ssh, pero al reiniciar el archivo / etc / passwd se restablece). Por esta razón, se necesita algún tipo de restricción de sudo para una cuenta que de otro modo solo existe para ejecutar, por ejemplo, / sbin / poweroff. Las siguientes líneas en / etc / sudoers me funcionaron:

# Allow guestx user to remote poweroff
guestx ALL=(ALL) !ALL
guestx ALL=NOPASSWD: /sbin/poweroff

Traducción: no permita todos los comandos, luego permita solo el comando deseado (sin pedir contraseña en este caso).

Con esta configuración, sudo solicita la contraseña y luego falla para los comandos que no sean la lista blanca:

guestx@ds:~$ sudo su -
Password: 
Sorry, user guestx is not allowed to execute '/bin/su -' as root on ds.
guestx@ds:~$ 
robar
fuente