What определяет, для каких команд Linux требуется root-доступ?

zsh, pdksh (хотя и не последние версии mksh, производные от него), yash, Bourne shell ведут себя как dash.

Только bash, ksh88, ksh93 и mksh ведут себя иначе.

В спецификации POSIX нет ясности относительно того, каким должно быть правильное поведение, но там ничего не говорится о том, что оболочке разрешено переопределять обработчик по умолчанию для сигнала SIGINT (или другого).

Там говорится, что действие ловушки EXIT должно оцениваться, когда вызывается exit, но, AFAICT, там даже не сказано, например, должна ли она оцениваться, когда оболочка выходит в результате set -e или set -u или при ошибках, таких как синтаксические ошибки или сбой специальных встроенных модулей.

Чтобы иметь возможность запускать ловушку EXIT при получении сигнала, оболочка должна установить обработчик этого сигнала.

Именно это делают ksh, mksh и bash, но список сигналов, которые они обрабатывают, отличается во всех трех реализациях. Единственными сигналами, общими для всех трех, являются INT, QUIT, TERM, ALRM и HUP.

Если вы хотите, чтобы ловушка EXIT запускалась по некоторым сигналам, переносимым способом будет обработка этих сигналов самостоятельно:

trap 'exit 1' INT HUP QUIT TERM ALRM USR1
trap 'cleanup' EXIT

Этот подход, однако, не работает с zsh, который не запускает ловушку EXIT, если exit вызывается из обработчика ловушки.

Он также не сообщает о вашей смерти по сигналу вашему родителю.

Поэтому вместо этого можно сделать так:

for sig in INT QUIT HUP TERM ALRM USR1; do
  trap "
    cleanup
    trap - $sig EXIT
    kill -s $sig "'"$$"' "$sig"
done
trap cleanup EXIT

Теперь учтите, что если во время выполнения cleanup придут другие сигналы, cleanup может быть запущен снова. Вы можете убедиться, что ваша cleanup работает корректно, если вызывается несколько раз, и/или игнорировать сигналы во время ее выполнения.

23
11.05.2018, 19:38
3 ответа

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 al consultar 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 script ejecutable no -no tiene la capacidad relevante establecida en sus metadatos de archivo (, p. si un script de python requiere la capacidad, entonces la capacidad debería 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 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 es sudomismo, 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á root privilegios. 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:

  • Realiza manipulaciones arbitrarias de UID de proceso (setuid (2 ), setreuid (2 ), setresuid (2 ), setfsuid (2 ));
  • Omita las verificaciones de permisos de lectura, escritura y ejecución de archivos. (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 cortafuegos IP, enmascaramiento y contabilidad;
    • modificar tablas de enrutamiento;
  • Asociar un socket a puertos privilegiados de dominio de Internet (números de puerto inferiores a 1024 ).
  • Cargue y descargue los módulos del kernel (vea init _módulo (2 )y borre _módulo (2 ));
  • Configurar el reloj del sistema (configurar la hora del día (2 ), stime (2 ), adjtimex (2 )); configurar el reloj de hardware )de tiempo real -tiempo (.
  • Realice una variedad de operaciones de administración del sistema que incluyen :quotectl (2 ), mount (2 ), umount (2 ), swapon (2 ), swapoff (2 ), sethostname (2 )y setdomainname (2 );
  • Use reiniciar (2 )y kexec _cargar (2 ).
  • Usar chroot (2 ).
  • Aumentar el valor agradable del proceso (agradable (2 ), establecer prioridad (2 ))y cambiar el valor agradable para procesos arbitrarios;
16
27.01.2020, 19:42

Se trata principalmente de lo que hace la herramienta o el programa . Teniendo en cuenta que un superusuario que no sea -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 el cosa que hace. Una muestra rápida de elementos que pueden requerir acceso de superusuario incluye, entre otros,:

  • Apertura de un socket TCP de escucha en un puerto por debajo de 1024
  • Cambio de configuraciones del sistema (e. gramo. nada en/etc)
  • Adición de 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 tenga un modo suficientemente permisivo
  • Cambiar la propiedad de los archivos de otros usuarios
  • Prioridades del proceso escalonado (e. gramo.renice)
  • Iniciar o detener la mayoría de los servicios
  • Configuración del núcleo (e. gramo. ajuste de swappiness)
  • Ajuste de cuotas del sistema de archivos
  • Escribir en discos "llenos" (la mayoría de los sistemas de archivos reservan algo de espacio para el usuario root)
  • Realizar acciones como otros usuarios
33
27.01.2020, 19:42

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

0
27.01.2020, 19:42

Теги

Похожие вопросы