Tengo una configuración de red muy sensible y realmente no quiero estropearla. Mi red consta de un grupo de usuarios que tienen privilegios de sudo.
Quiero evitar que corran
service NetworkManager restart
service network restart
comandos
¿Hay alguna manera de lograr esto?
networking
ynetwork-manager
? Además, ¿por qué sus usuarios tienensudo
acceso? No deberían, a menos que quieras que tengan todos los privilegios de root.Respuestas:
Usar CmndAlias
ALL
nunca será seguroHay 1000 formas de correr
service network restart
sin hacerlosudo service network restart
. Aquí hay un ejemplo de lo que un usuario travieso podría intentar:Si proporciona a los usuarios el
ALL
alias de comando y luego intenta crear una lista negra, siempre podrán encontrar una forma de evitarlo. Blacklist bash, y usarán python. Pitón lista negra, y usarán Perl. Blacklist Perl, y usarán PHP. Nadie quiere eso!Si realmente no desea que alguien haga algo, debe hacer lo que dice Thomas y crear una lista blanca de las cosas que tiene permitido hacer.
Configurar una lista blanca con una excepción
Un ejemplo de una pequeña lista blanca con una exclusión se puede encontrar cerca de la parte inferior de
man sudoers
:(¡De hecho, este ejemplo de la página de manual no es seguro y puede explotarse para cambiar la contraseña de root! Vea los comentarios a continuación para saber cómo hacerlo).
Podemos intentar adaptar eso a su caso, para ofrecer todos los
service
comandos al grupo de personal, pero excluir losservice network
comandos que le conciernen:(El
ALL
en esa posición se refiere al Host_Alias, no al Cmnd_Alias, confuso, ¿no?)El usuario no podrá ejecutar
sudo bash
osudo tee
osudo wget
osudo /path/to/malicious_script
. Puede poner en la lista blanca más comandos de administración para sus usuarios si tiene cuidado. ¡Solo sé específico!Nota: Agregué la
*
palabranetwork
anterior a la anterior, en caso de que alguna vez se agregue una bandera inofensiva a laservice
herramienta en el futuro. Imaginemos--verbose
que se agregó una bandera en el futuro, luego los usuarios podrán ejecutar lo siguiente:Por lo tanto, necesitamos
*
consumir cualquier indicador antes del nombre del servicio. La única desventaja es que esto podría bloquear otros servicios que en realidad no le importa que ejecuten los usuarios, por ejemplo, un servicio llamadosafe-network
onetwork-monitor
también sería rechazado.Permitir a los usuarios editar un archivo usando permisos de grupo
A continuación puede encontrar varios intentos de utilizar
rnano
a través desudo
dejar que los usuarios editar un archivo o archivos. Pero en realidad son más complejos y más peligrosos de lo que deberían ser.Una solución mucho más simple y segura es cambiar los permisos de grupo en los archivos específicos para los que desea abrir los derechos de edición. Aquí hay un par de ejemplos:
Si necesita un control más detallado (por ejemplo: acceso para solo 3 usuarios, pero no para todos los miembros del personal), puede crear un nuevo grupo con el
addgroup
comando y agregarle unos pocos usuarios.Permitir a los usuarios editar un archivo a través de
sudo
El resto de esta respuesta se convirtió en una investigación sobre lo fácil que es dejar agujeros en su
sudo
configuración al intentar ofrecer flexibilidad a sus usuarios. ¡No recomendaría hacer nada de lo siguiente!Si desea otorgar a sus usuarios acceso para editar un archivo específico, puede intentar usar
rnano
:rnano
solo les permitirá editar el archivo especificado. Eso es importante para evitar que un usuario malintencionado edite un servicio de inicio diferente (por ejemplo/etc/init.d/urandom
) y agregue una línea que se ejecuteservice network restart
.Desafortunadamente, no encontré una manera de restringir lo
rvim
suficiente (el usuario aún puede abrir cualquier archivo usando:e
), por lo que estamos atascadosnano
.Desafortunadamente, permitir que los usuarios editen múltiples archivos es mucho más difícil ...
Permita que los usuarios editen múltiples archivos (mucho más difícil de lo que debería ser)
1. Enfoques inseguros
¡Cuidado con los comodines! Si ofrece demasiada flexibilidad (o cualquier flexibilidad), puede explotarse:
En este caso, un usuario malintencionado podría editar cualquier otro script de servicio inicial y luego ejecutarlo:
(Sudo realmente previene
.
y..
expande el comando, pero desafortunadamente no en los argumentos).Esperaba que algo como esto pudiera funcionar, pero aún es inseguro:
Dado que
sudo
actualmente solo ofrece patrones globales , eso*
coincidirá con cualquier cosa , ¡no es una expresión regular!(Editar: consideré si podría salirse con la suya en su situación, porque no hay subcarpetas debajo
sites-available
. Exigimos que coincida un carácter después de la carpeta, y/..
debería fallar después de un nombre de archivo. Sin embargo, esto no es un solución viable, porquernano
acepta múltiples argumentos. ¡Y de todos modos, en general, esto todavía sería inseguro en una carpeta que tenía subcarpetas!)Incluso si no tenemos subcarpetas, y excluimos cualquier línea que contenga
/../
, la regla que ofrece un*
glob aún podría ser explotada, porquernano
acepta múltiples argumentos (recorriéndolos<C-X>
y el espacio es felizmente aceptado por el*
glob.2. Empujar el sobre (también en última instancia inseguro)
Entonces, ¿qué pasa si rechazamos cualquier línea que contenga espacios o intentemos alcanzar
/..
? Entonces, una solución viable final podría ser esta:Aceptamos nada "debajo" de la carpeta, pero también rechazamos cualquier llamada a
rnano
si/..
o/.
ose le pasen, o si la carpeta está dirigido directamente. (Técnicamente, la
/.
exclusión hace que la/..
exclusión sea redundante, pero he dejado a ambos por claridad).Encontré la carpeta y las
/.
exclusiones eran necesarias porque de lo contrario el usuario podría apuntar a la carpeta en sí. Ahora podría pensar quernano
se bloquearía si apuntara a una carpeta, pero estaría equivocado. En realidad, mi versión (2.2.6-1ubuntu1) comienza con una advertencia leve y un archivo vacío, luego<C-X>
me pide que ingrese cualquier nombre de archivo que quiera guardar, ¡abriendo un nuevo vector de ataque! Bueno, al menos se negó a sobrescribir un archivo existente (en la única prueba que hice). De todos modos, dado que no hay forma de poner en la lista negra subcarpetas con sudo, debemos concluir que este enfoque es nuevamente inseguro. Lo sentimos usuarios!Este descubrimiento me hizo dudar de la minuciosidad del
nano
modo "restringido". Dicen que una cadena es tan fuerte como su eslabón más débil. Estoy empezando a sentir la combinación desudo
la magia negra de la lista negra yrnano
puede que no sea más seguro que una cadena de margaritas.3. Enfoques seguros pero limitados
Los globos son muy restringidos: no nos permiten igualar una clase de personaje varias veces. Usted podría ofrecer múltiples ediciones de archivos, si todos los nombres de archivo tienen la misma longitud (en este caso,
host
seguido de un solo dígito):Pero si desea otorgarle al usuario acceso para editar varios archivos, es posible que deba especificar cada archivo explícitamente:
No se sienta tentado a usar un
*
en ningún momento. ¡Vea las secciones 1. y 2. arriba para saber por qué! Recuerde: un pequeño desliz puede comprometer toda la cuenta de superusuario y todo el sistema.4. Escriba su propio verificador de argumentos (la seguridad es ahora su responsabilidad)
Espero que agreguen soporte de regexp
sudo
en el futuro; podría resolver muchos problemas si se usa correctamente. Pero también es posible que necesitemos la capacidad de verificar las propiedades de los argumentos (para permitir solo archivos, solo carpetas o solo ciertos indicadores).Pero hay una alternativa para crear flexibilidad en sudo. Pasar la pelota:
Luego escriba su propio
staffedit
script o ejecutable para verificar si los argumentos pasados por el usuario son legales, y solo lleve a cabo su solicitud si lo son.fuente
ALL=(ALL:ALL) ALL
demasiado carente de semántica, pero siempre asumí que en algún lugar tendría un verificador de argumentos decente ... Me equivoqué. Es realmente muy limitado. Incluso la exclusión passwd root que se ofrece en la página de manual se puede romper con un simple argumento de línea de comandos,sudo passwd -q root
. Bueno, los autores de sudo enumeran [algunas alternativas] (sudo.ws/sudo/other.html) en su sitio web. Espero que agreguen soporte de regexp en el futuro.rnano
en tu descripción aquí porque es una versión de nano que carece de la función 'guardar como'? No estoy familiarizado con el programa.$ man nano
entonces/-R<Enter>
-q
tiene que venir después:sudo passwd root -q
. El ejemplo de pete se puede endurecer excluyendo*root*
.sudoedit
para habilitar de forma segura la modificación de archivos consudo
.Primero, abra el archivo sudoers con
sudo visudo
. Agregaruser ALL=!/usr/sbin/service
will, IIRC, no permitirá elservice
comando para el usuariouser
.Fuentes: http://nixcraft.com/showthread.php/15132-Sudo-Exclude-Commands-And-Disable-sudo-su-Bash-Shell
fuente
He encontrado la solución.
Abrí la terminal y cambié a usuario root con,
su -
luego escribívisudo
para editar.entonces al final he escrito líneas como
Luego tengo guardar y cerrar y reiniciar también.
Ahora si estoy escribiendo como
service network restart
oservice NetworkManager restart
entonces no me está permitiendo y dando un error comoy de manera similar para el
service network restart
comando también.fuente
sudo cp -p /etc/init.d/network /etc/init.d/network-not-in-sudo
y luegosudo /etc/init.d/network-not-in-sudo restart
). Es por eso que es mucho más seguro crear inclusiones en lugar de exclusiones en el archivo sudoers, por ejemplo, indicar con qué servicios pueden interactuar.La verdadera respuesta a esto es que realmente no puedes evitar esto. Puede evitar que alguien no malintencionado ejecute accidentalmente ese comando a través de los métodos descritos en las otras respuestas, pero si alguien realmente quiere ejecutarlo y está en la lista de sudoers, puede ejecutarlo. Por ejemplo, podrían hacer lo siguiente:
joe@box:~$ sudo bash root@box:~# service network restart
U otro comando divertido que podrían usar para eludir sus restricciones en el archivo sudoers:
sudo visudo
En pocas palabras, si puede sudo y no se limita a ejecutar comandos particulares, puede hacer casi lo que quiera. Incluso si los restringe a un conjunto dado de comandos, deberá asegurarse de que el usuario no pueda copiar algún otro comando que quisiera ejecutar con el mismo nombre que tenía permiso para ejecutar ( como sobrescribiendo el comando que tienen permiso para ejecutar).
fuente
Use firejail para restringir a los usuarios con sandboxes.
https://github.com/netblue30/firejail/
Establezca firejail como shell en lugar de bash en / etc / passwd, para cada usuario que desee restringir. Es muy fácil de usar y tiene una buena documentación.
Ejemplo:
fuente