GNU/Linux >> Tutoriales Linux >  >> Linux

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

Se trata principalmente de lo que la herramienta o programa hace . Teniendo en cuenta que un no superusuario solo puede tocar los archivos que posee o a los que tiene acceso, cualquier herramienta que necesite poder meter los dedos en todo requerirá acceso de superusuario para hacer lo que hace. Una muestra rápida de cosas que pueden requerir acceso de superusuario incluyen, pero no se limitan a:

  • Abrir un socket TCP de escucha en un puerto por debajo de 1024
  • Cambiar las configuraciones del sistema (por ejemplo, cualquier cosa en /etc )
  • Agregar nuevas bibliotecas accesibles globalmente (/lib y /usr/lib ) o binarios (/bin , /usr/bin )
  • Tocar cualquier archivo que no sea propiedad del usuario que está tocando y que no tenga un modo lo suficientemente permisivo
  • Cambiar la propiedad de los archivos de otros usuarios
  • Escalonamiento de las prioridades del proceso (p. ej., renice )
  • Iniciar o detener la mayoría de los servicios
  • Configuración del kernel (p. ej., ajuste de la capacidad de intercambio)
  • Ajuste de las cuotas del sistema de archivos
  • Escribir en discos "llenos" (la mayoría de los sistemas de archivos reservan algo de espacio para el usuario raíz)
  • Realizar acciones como otros usuarios

En Linux, los privilegios de root se dividieron en un momento en "capacidades", por lo que puede obtener una lista completa de los privilegios especiales de root consultando 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 que no sea un script no tiene la capacidad relevante establecida en los metadatos de su archivo (por ejemplo, si un script de python requiere la capacidad, entonces la capacidad tendría que estar en el intérprete de python especificado en la línea shebang).

Tenga en cuenta que algunos comandos que necesitan acceso de root no necesitan algo como sudo porque tienen el bit SUID establecido en su ejecutable. Este bit hace que el ejecutable se ejecute como propietario (normalmente root) cuando lo ejecuta cualquier persona que tenga acceso de ejecución. Un ejemplo es sudo ya que cambiar de usuario es una acción privilegiada que debe realizar.

EDITAR:observo de su pregunta que es posible que tenga la idea de que puede determinar si un comando necesitará acceso de 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, llamar a 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 de 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 referenciada de los privilegios de root:

  • Hacer manipulaciones arbitrarias de UID de procesos (setuid(2), setreuid(2), setresuid(2), setfsuid(2));
  • Omita las comprobaciones de permisos de lectura, escritura y ejecución de archivos. (DAC es una abreviatura de "control de acceso discrecional".)
  • Evitar las comprobaciones 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 interfaz;
    • administración de firewall IP, enmascaramiento y contabilidad;
    • modificar tablas de enrutamiento;
  • Asocie un socket a puertos privilegiados de dominio de Internet (números de puerto inferiores a 1024).
  • Cargar y descargar módulos del kernel (ver init_module(2) y delete_module(2));
  • Establecer el reloj del sistema (settimeofday(2), stime(2), adjtimex(2)); configurar el 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 reiniciar(2) y kexec_load(2).
  • Utilice chroot(2).
  • Elevar el valor agradable del proceso (agradable(2), establecer prioridad(2)) y cambiar el valor agradable para procesos arbitrarios;

Linux
  1. Configuración de sudo para habilitar comandos para usuarios no root en Linux

  2. ¿Cuál es el propósito del grupo "rueda" en Linux?

  3. ¿En qué idioma están escritos los comandos de Shell?

  4. Limitar usuario para ejecutar comandos selectivos (Linux)

  5. ¿Cuál es el equivalente de Active Directory en Linux?

Linux qué comando

¿Qué es umask en Linux?

Comandos de Linux utilizados con frecuencia por los administradores de sistemas de Linux - Parte 1

Cuatro comandos de Linux completamente inútiles

Comandos de acceso a archivos en Linux:buscar, ordenar, encabezado, cola

Linux:¿administradores de sistemas productivos sin root (asegurando la propiedad intelectual)?