¿Qué determina qué comandos de Linux requieren acceso de root?

23

¿Qué determina qué comandos de Linux requieren acceso de root? Entiendo las razones por las cuales es deseable que, digamos, apt-getrequiera rootprivilegio; pero, ¿qué distingue estos comandos del resto? ¿Es simplemente una cuestión de propiedad y permisos de ejecución del ejecutable?

Brian Dobby
fuente
2
Es principalmente una función de qué archivo tocan y qué funciones llaman.
Federico klez Culloca
99
Algunas aplicaciones necesitan acceso a archivos / directorios, propiedad de root. Entonces, simplemente llaman openy obtienen "permiso denegado". Algunas aplicaciones comprueban getuidy dejan de funcionar si la raíz no las llama. Algunos son propiedad física de root y solo el propietario puede ejecutarlos (ver chmod). Si está preguntando si hay alguna marca de "necesidad de raíz" en el encabezado de la aplicación, la respuesta es no. No existe tal cosa afaik
user996142
1
ps: varias llamadas al sistema (como el enlace a un puerto conocido <1024) también pueden necesitar acceso raíz.
user996142
apt-get no requiere root en absoluto. Está en el directorio / usr / bin, consulte askubuntu.com/a/440791/169736
Braiam
Puede aclarar lo que quiere decir con "exigir" aquí. ¿Quiere decir que el programa no se ejecutará a menos que sea root (o tenga permisos de sudo), o que necesite ser root para hacer su trabajo correctamente?
jamesqf

Respuestas:

15

En Linux, los privilegios de raíz eran en un momento dado dividida en "capacidades", para que pueda obtener una lista completa de los privilegios especiales de raíz mirando en esa documentación: man 7 capabilities.

Para responder a su pregunta, un comando requerirá ejecutarse como root cuando necesite uno de estos privilegios, y su ejecutable sin script no tiene la capacidad relevante establecida en sus metadatos de archivo (por ejemplo, si un script python requiere la capacidad, entonces la capacidad necesitaría estar en el intérprete de python especificado en la línea shebang).

Tenga en cuenta que algunos comandos que necesitan acceso raíz no necesitan algo como sudoporque tienen el bit SUID establecido en su ejecutable. Este bit hace que el ejecutable se ejecute como el propietario (normalmente root) cuando lo ejecuta cualquier persona que tenga acceso de ejecución. Un ejemplo en sudosí mismo es que cambiar usuarios es una acción privilegiada que debe hacer.

EDITAR: Observo en su pregunta que puede tener la idea de que puede determinar si un comando necesitará acceso root antes de ejecutarlo. Ese no es el caso. Un programa a veces puede requerir privilegios de root y otras veces no, y esto podría ser una decisión tomada por el programa debido a los datos que se proporcionan durante el tiempo de ejecución. Tomemos, por ejemplo, llamadas vim, así sin argumentos, y luego a través de una serie de pulsaciones de teclas y pegado, diciéndole que escriba algo en un archivo que no tiene permiso para escribir, o tal vez ejecutando otro comando que requerirá privilegios de root. Nada sobre el comando antes de ejecutarlo podría indicar que eventualmente requeriría acceso root. Eso es algo que solo se puede determinar en el momento en que intenta hacer algo que lo requiere.

De todos modos, aquí hay muy pocos ejemplos de la página de manual de referencia de los privilegios de root:

  • Realice manipulaciones arbitrarias de los UID de proceso (setuid (2), setreuid (2), setresuid (2), setfsuid (2));
  • Omitir lectura, escritura y ejecución de verificaciones de permisos. (DAC es una abreviatura de "control de acceso discrecional").
  • Omitir verificaciones de permisos para enviar señales (ver kill (2)). Esto incluye el uso de la operación ioctl (2) KDSIGACCEPT.
  • Realizar varias operaciones relacionadas con la red:
    • configuración de la interfaz;
    • administración de firewall IP, enmascaramiento y contabilidad;
    • modificar las tablas de enrutamiento;
  • Enlace un socket a los puertos con privilegios de dominio de Internet (números de puerto inferiores a 1024).
  • Cargar y descargar módulos del núcleo (ver init_module (2) y delete_module (2));
  • Configure el reloj del sistema (settimeofday (2), stime (2), adjtimex (2)); establecer reloj en tiempo real (hardware).
  • Realice una variedad de operaciones de administración del sistema que incluyen: quotactl (2), mount (2), umount (2), swapon (2), swapoff (2), sethostname (2) y setdomainname (2);
  • Use reboot (2) y kexec_load (2).
  • Usa chroot (2).
  • Aumente el valor agradable del proceso (nice (2), setpriority (2)) y cambie el valor agradable para procesos arbitrarios;
JoL
fuente
32

Es principalmente una cuestión de lo que la herramienta o programa hace . Teniendo en cuenta que una persona que no es superusuario solo puede tocar archivos de los que es propietario o tiene acceso, cualquier herramienta que necesite poder meter sus dedos en todo requerirá acceso de superusuario para hacer lo que hace. Una muestra rápida de Cosas que pueden requerir acceso de superusuario incluye, pero no se limita a:

  • Abrir un socket TCP de escucha en un puerto por debajo de 1024
  • Cambio de las configuraciones del sistema (por ejemplo, cualquier cosa en /etc)
  • Agregar nuevas bibliotecas accesibles globalmente ( /liby /usr/lib) o binarios ( /bin, /usr/bin)
  • Tocar cualquier archivo que no sea propiedad del usuario que está tocando y que no tiene un modo suficientemente permisivo
  • Cambiar la propiedad de los archivos de otros usuarios
  • Prioridades del proceso de escelating (p renice. Ej. )
  • Iniciar o detener la mayoría de los servicios
  • Configuración del kernel (por ejemplo, ajuste de intercambio)
  • Ajuste de cuotas del sistema de archivos
  • Escribir en discos "completos" (la mayoría de los sistemas de archivos reservan espacio para el usuario root)
  • Realizar acciones como otros usuarios
DopeGhoti
fuente
44
"Cambiar las prioridades del proceso" los usuarios no root pueden cambiar detalles, para ser más agradables. Lo único que no pueden hacer es ser menos amables.
Braiam
1
Sé que esta lista no está completa, pero creo que una tarea muy importante que solo los superusuarios pueden hacer es suplantar, o simplemente iniciar sesión como, otros usuarios.
phihag
Ajusté el punto sobre las prioridades del proceso y agregué "Realizar acciones como otros usuarios". Con suerte, con suficiente tiempo y comentarios, esta lista será más completa.
DopeGhoti
0

Creo que está de acuerdo con la identidad del usuario verificar los permisos, no de acuerdo con el orden de dividir los permisos. Los archivos y los usuarios tienen privilegios y los comandos no deben dividirse.

Aldridge
fuente
3
No quiero sonar grosero, y entiendo que el inglés podría no ser tu primer idioma, pero no entiendo esta respuesta, como lo que incluso está tratando de decir. "conformidad" significa "acuerdo" o "conformidad"; No puedo ver cómo se puede usar con la "identidad del usuario". ¿Qué quiere decir "orden para dividir los permisos"? "dividir" significa "separar". ¿De quién es "orden"? ¿Cómo se "privilegian" los archivos cuando no son algo que pueda actuar para usar cualquier privilegio? Supongo que puedo entender "los comandos no deben dividirse" en el contexto de esta pregunta, pero eso es todo. Tal como está, parece indescifrable.
JoL
@JoL Creo que "el orden" es una traducción errónea y debería ser "el comando", lo que permite un análisis diferente de esa oración. Algo torpemente redactado para usar lo que está en esta respuesta tanto como sea posible: "Creo que está de acuerdo con la forma en que se usa la identidad del usuario para verificar los permisos que los permisos no se dividen de acuerdo con el comando. Los privilegios son sobre archivos y usuarios, debería no estar dividido para los comandos ". Esto todavía no está muy claro, pero tiene un poco más de sentido para mí que para ti. Espero que mi comentario ayude a alguien a comprender completamente esta respuesta y editarla en forma
hvd