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?

networkingynetwork-manager? Además, ¿por qué sus usuarios tienensudoacceso? No deberían, a menos que quieras que tengan todos los privilegios de root.Respuestas:
Usar CmndAlias
ALLnunca será seguroHay 1000 formas de correr
service network restartsin hacerlosudo service network restart. Aquí hay un ejemplo de lo que un usuario travieso podría intentar:Si proporciona a los usuarios el
ALLalias 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
servicecomandos al grupo de personal, pero excluir losservice networkcomandos que le conciernen:(El
ALLen esa posición se refiere al Host_Alias, no al Cmnd_Alias, confuso, ¿no?)El usuario no podrá ejecutar
sudo bashosudo teeosudo wgetosudo /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
*palabranetworkanterior a la anterior, en caso de que alguna vez se agregue una bandera inofensiva a laserviceherramienta en el futuro. Imaginemos--verboseque 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-networkonetwork-monitortambién sería rechazado.Permitir a los usuarios editar un archivo usando permisos de grupo
A continuación puede encontrar varios intentos de utilizar
rnanoa través desudodejar 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
addgroupcomando y agregarle unos pocos usuarios.Permitir a los usuarios editar un archivo a través de
sudoEl resto de esta respuesta se convirtió en una investigación sobre lo fácil que es dejar agujeros en su
sudoconfiguració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:rnanosolo 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
rvimsuficiente (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
sudoactualmente 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, porquernanoacepta 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, porquernanoacepta 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
rnanosi/..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 quernanose 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
nanomodo "restringido". Dicen que una cadena es tan fuerte como su eslabón más débil. Estoy empezando a sentir la combinación desudola magia negra de la lista negra yrnanopuede 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,
hostseguido 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
sudoen 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
staffeditscript 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) ALLdemasiado 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.rnanoen 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 nanoentonces/-R<Enter>-qtiene que venir después:sudo passwd root -q. El ejemplo de pete se puede endurecer excluyendo*root*.sudoeditpara habilitar de forma segura la modificación de archivos consudo.Primero, abra el archivo sudoers con
sudo visudo. Agregaruser ALL=!/usr/sbin/servicewill, IIRC, no permitirá elservicecomando 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ívisudopara 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 restartoservice NetworkManager restartentonces no me está permitiendo y dando un error comoy de manera similar para el
service network restartcomando también.fuente
sudo cp -p /etc/init.d/network /etc/init.d/network-not-in-sudoy 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 restartU otro comando divertido que podrían usar para eludir sus restricciones en el archivo sudoers:
sudo visudoEn 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