Reaprendizaje del sistema operativo-08 | Instrucciones de administración de autoridad y usuarios: Describa brevemente el principio de división de autoridad de Linux.

Tabla de contenido

 

1. Extracción de permisos

1.1 Usuarios y grupos

Dos, varios problemas relacionados con los permisos

2.1 Una vez creado el archivo, ¿cómo configurar los permisos iniciales?

2.2 Permisos de archivos ejecutables públicos

2.3 Archivo de ejecución

2.4 ¿Pueden varios usuarios iniciar sesión en root y luego usar solo la cuenta root?

En tercer lugar, la idea de la estructura de autoridad

3.1 División de permisos

3.2 Protección jerárquica

3.3 Instrucción de grupo de usuarios

3.3.1 Ver

3.3.2 Crear usuario

3.3.3 Crear grupo

3.3.4 Agregar subgrupos para usuarios

3.3.5 Modificar grupo principal de usuarios

 

Cuatro, el problema


1. Extracción de permisos

Un sistema de gestión de derechos completo debe tener una abstracción razonable. Esto incluye la abstracción de usuarios, procesos, archivos, memoria y llamadas al sistema.

1.1 Usuarios y grupos

Linux es una plataforma multiusuario que permite que varios usuarios inicien sesión en el sistema al mismo tiempo para trabajar. Linux abstrae a los usuarios en cuentas. Las cuentas pueden iniciar sesión en el sistema, como iniciar sesión ingresando un nombre de inicio de sesión + contraseña , o iniciar sesión a través de un certificado.

Pero para facilitar la asignación de permisos para cada usuario, Linux también admite cuentas de grupo. Una cuenta de grupo es una colección de varias cuentas y un grupo puede asignar ciertos tipos de permisos a los miembros. Cada usuario puede estar en varios grupos, por lo que los grupos se pueden utilizar para asignar rápidamente permisos a los usuarios.

El concepto de grupo se parece un poco a un grupo de WeChat . Un usuario puede estar en varios grupos. Por ejemplo, si a un grupo se le asignan permisos para 10 directorios, al crear un nuevo usuario, este usuario puede agregarse a este grupo, de modo que los usuarios recién agregados no necesiten ir a cada directorio para asignar permisos.

Y cada grupo de WeChat tiene un propietario de grupo, y la cuenta raíz también se llama superadministrador, que es equivalente al propietario del grupo de WeChat, y tiene control total sobre el sistema. Un superadministrador puede utilizar todas las capacidades proporcionadas por el sistema.

Además, Linux también abstrae los permisos de los archivos (tenga en cuenta que un directorio también es una especie de archivo). Un archivo en Linux puede establecer los siguientes 3 permisos:

  1. Permiso de lectura (r): Control para leer archivos.
  2. Permiso de escritura (w): control de escritura en archivos.
  3. Permiso de ejecución (x): controla la ejecución de archivos, como scripts, aplicaciones, etc.

Luego, cada archivo puede configurar los 3 permisos anteriores de 3 dimensiones:

  1. Dimensión de usuario. Cada archivo puede pertenecer a 1 usuario y el rwx configurado en la dimensión de usuario tiene efecto en la dimensión de usuario;
  2. Dimensiones del grupo. Cada archivo puede pertenecer a 1 grupo y el rwx configurado en la dimensión de grupo tiene efecto en la dimensión de grupo;
  3. Todas las dimensiones del usuario. Establezca permisos para todos los usuarios.

Por lo tanto, los permisos de archivo en Linux se pueden describir con 9 caracteres y 3 grupos de rwx:

  • El primer grupo son los permisos de usuario.
  • El segundo grupo son los permisos de grupo.
  • El tercer grupo son los permisos de todos los usuarios.

Entonces use-significa sin permiso. Por ejemplo, rwxrwxrwx representa que todas las dimensiones se pueden leer y escribir. rw - wxr-x significa que la dimensión de usuario no se puede ejecutar, la dimensión de grupo no se puede leer y no se pueden escribir todas las dimensiones de usuario.

Normalmente, si usa ls -l para ver los permisos de un archivo, habrá 10 caracteres, porque el primer carácter representa el tipo de archivo. Tengo archivos de canalización, archivos de catálogo, archivos de enlace, etc.

-Significa archivos ordinarios, d significa directorios yp significa tuberías .

Dos, varios problemas relacionados con los permisos

2.1 Una vez creado el archivo, ¿cómo configurar los permisos iniciales?

Después de que se crea un archivo, el usuario del archivo se establecerá como el usuario que creó el archivo. Quien lo crea y lo posee, esta lógica es muy lógica. Pero, ¿cómo se asignan los grupos de archivos?

Aquí Linux pensó en una buena forma, que es crear un grupo con el mismo nombre para cada usuario.

Por ejemplo, cuando se crea la cuenta zhang, se creará un grupo llamado zhang. Después de que zhang inicie sesión, el grupo de trabajo utilizará su grupo zhang con el mismo nombre de forma predeterminada. Si zhang quiere cambiar el grupo de trabajo, puede usar el comando newgrp para cambiar a otro grupo de trabajo. Por tanto, el grupo al que pertenece el archivo creado es el grupo de trabajo en el que se encuentra el usuario en ese momento, si no existe una configuración especial, pertenece al grupo con el mismo nombre en el que se encuentra el usuario.

¿Qué pasa con los permisos de archivo? Una vez creado el archivo, los permisos suelen ser:

rw-rw-r--


Es decir, las dimensiones de usuario y grupo no se pueden ejecutar y todos los usuarios las pueden leer.

2.2 Permisos de archivos ejecutables públicos

Como se mencionó anteriormente, puede usar el comando which para ver el directorio donde se encuentra el comando ls, y lo encontramos en / usr / bin. Luego use ls -l para verificar los permisos de ls, puede ver la siguiente figura:

~]# ls -l /usr/bin/ls
-rwxr-xr-x 1 root root 143368 Jun 10  2020 /usr/bin/ls

El primero representa que se trata de un archivo normal, el siguiente rwx representa la dimensión del usuario que se puede leer, escribir y ejecutar; el segundo rx representa que la dimensión del grupo no se puede escribir; el tercero rx representa que todos los usuarios pueden leer y ejecutar. Para las siguientes dos raíces, la primera es el usuario y la segunda es el grupo.

En este punto, es posible que tenga una pregunta: si un archivo está configurado para ser ilegible pero ejecutable , ¿qué sucederá?

La respuesta, por supuesto, es que no se puede ejecutar y el contenido del archivo no se puede leer de forma natural.

2.3 Archivo de ejecución

En Linux, si se puede ejecutar un archivo, se puede ejecutar directamente ingresando la ruta del archivo (ruta relativa o ruta absoluta). Si desea ejecutar un archivo que no se puede ejecutar, Linux informará un error.

Cuando el usuario ingresa un nombre de archivo, si no se especifica la ruta completa, Linux buscará el archivo en una parte del directorio. Puede ver en qué directorios Linux buscará archivos ejecutables a través de echo $ PATH. PATH es la variable de entorno de Linux

 ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/local/go/bin:/root/bin

2.4 ¿Pueden varios usuarios iniciar sesión en root y luego usar solo la cuenta root?

La última pregunta es, ¿se pueden enraizar todos?

¡La respuesta es, por supuesto, no ! Pero solo lo usamos en la producción real. El privilegio de root es realmente demasiado peligroso. Debería aumentar su conocimiento sobre el uso de privilegios de Linux.

El kernel proporciona las capacidades básicas de hardware operativo, discos, paginación de memoria, procesos, etc., y tiene derecho a manipular directamente toda la memoria. Por lo tanto, el kernel no puede proporcionar a los usuarios todas sus capacidades y no puede permitir que los usuarios creen sistemas llamadas a través de comandos de shell. En Linux, el kernel proporciona las llamadas al sistema requeridas por algunos procesos en forma de API de lenguaje C. Algunas llamadas al sistema tienen verificaciones de permisos, como la llamada al sistema para establecer la hora del sistema.

En tercer lugar, la idea de la estructura de autoridad

El objetivo principal de una excelente arquitectura de permisos es hacer que el sistema sea seguro y estable, y restringir y aislar a los usuarios y programas entre sí. Esto requiere que la división de autoridad en el sistema de autoridad sea lo suficientemente clara y que el costo de asignar la autoridad sea lo suficientemente bajo.

Por lo tanto, una arquitectura excelente debe seguir el principio de privilegio mínimo (privilegio mínimo). El diseño de la autorización debe garantizar la seguridad y estabilidad del sistema. Por ejemplo: la autoridad de cada miembro debe ser lo suficientemente pequeña y el proceso de ejecución de cada programa privilegiado debe ser lo suficientemente corto. Cuando el nivel de seguridad es alto, también se requieren permisos de miembros para comprobarse entre sí. Por ejemplo, en el campo financiero, generalmente se requieren dos inicios de sesión para iniciar sesión en una base de datos en línea, es decir, se requieren dos contraseñas, cada una en manos de dos roles. De esta manera, incluso si un miembro tiene un problema, se puede garantizar la seguridad de todo el sistema.

De manera similar, cada programa también debería reducir los permisos, por ejemplo, solo tiene una pequeña cantidad de permisos de lectura y escritura de directorio, y solo se puede realizar una pequeña cantidad de llamadas al sistema.

3.1 División de permisos

La idea de estructura de permisos también debe seguir un principio, y el límite de la división de permisos debe ser lo suficientemente claro como para aislarse entre sí tanto como sea posible. Linux proporciona usuarios y grupos. Por supuesto, Linux no te obliga a dividir los permisos, esto es para lidiar con más escenarios. Por lo general, las aplicaciones importantes en nuestro servidor serán ejecutadas por diferentes cuentas. Por ejemplo, Nginx, el servidor web y la base de datos no se ejecutarán en una sola cuenta. Ahora con el desarrollo de la tecnología de contenerización, incluso esperamos que cada aplicación tenga un espacio virtual exclusivo, como si se ejecutara en un sistema operativo separado, para que no interfieran entre sí.

3.2 Protección jerárquica

Debido a que el kernel puede manipular directamente la memoria y la CPU , es muy peligroso. Los conductores pueden controlar directamente los dispositivos centrales, como cámaras y pantallas, pero también deben tomar medidas de seguridad, como evitar que aplicaciones maliciosas enciendan la cámara para robar la privacidad. Por lo general, el sistema operativo adopta un modo de protección de anillo.

Como se muestra en la figura anterior, el núcleo está en el punto más interno, que es el Anillo 0. La aplicación más externa es Ring 3. El conductor está en el medio, es decir, el anillo 1 y el anillo 2. Para dos anillos adyacentes, el anillo interior tendrá mayor autoridad y podrá cambiar el anillo exterior; mientras que el anillo exterior quiere usar los recursos del anillo interior, habrá un programa especial (o hardware) para protegerlo.

Por ejemplo, si una aplicación Ring3 necesita usar el kernel, necesita enviar una llamada del sistema al kernel . Esta llamada al sistema será verificada por el kernel, como verificar si el usuario tiene permisos suficientes y si este comportamiento es seguro, etc.

3.3 Instrucción de grupo de usuarios

3.3.1 Ver

Usa el comando de grupos

El comando anterior enumera todos los grupos del usuario actual. El primero es el grupo principal con el mismo nombre, y el siguiente es el subgrupo a partir de adm.

Permítanme presentarles dos grupos primero, y pueden verificar la información de los otros grupos:

  • El grupo adm se utiliza para la supervisión del sistema. Por ejemplo, parte del inicio de sesión / var / log es el grupo adm.
  • Los usuarios del grupo sudo pueden aumentar sus privilegios a través de los comandos sudo.

Si desea ver el usuario actual, puede usar el comando id, como se muestra a continuación:

~]# id
uid=0(root) gid=0(root) groups=0(root)
  • uid es la identificación del usuario;
  • gid es la identificación del grupo;
  • Los grupos van seguidos de la identificación de cada grupo y grupo.

Si desea ver todos los usuarios, puede mirar directamente / etc / passwd.

 ~]# more /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

El archivo / etc / passwd almacena toda la información del usuario, como se muestra en la siguiente figura:

sudo usermod -a -G sudo foo

3.3.2 Crear usuario

sudo useradd foo

El significado original de sudo era superusuario , pero luego evolucionó hacia el uso de la identidad de otro usuario para ejecutar un comando determinado. Si no se especifica el usuario que necesita sudo, como arriba, es como superadministrador. Porque useradd requiere estado de administrador. Después de que se ejecute esta oración, la autoridad se elevará y aparecerá una interfaz de entrada para ingresar la contraseña de administrador.

3.3.3 Crear grupo

sudo groupadd hello

3.3.4 Agregar subgrupos para usuarios

 Los grupos se dividen en grupos primarios (Grupo primario) y grupos secundarios (Grupo secundario). Solo hay un grupo principal y puede haber varios subgrupos. Si desea agregar un subgrupo para el usuario, puede usar el comando usermod. El siguiente comando agrega al usuario foo al grupo sudo, por lo que foo tiene permisos de sudo.

sudo usermod -a -G sudo foo

-a significa agregar, -G significa una lista de subgrupos y el último foo es el nombre de la cuenta.

3.3.5 Modificar grupo principal de usuarios

sudo usermod -g somegroup foo

 

 

Cuatro, el problema

1. ¿Por qué no utilizar la cuenta de root para ejecutar el programa?

Por ejemplo, si tiene un proceso Mysql ejecutado en la cuenta raíz (privilegio máximo), si un pirata informático irrumpe en su servicio Mysql y obtiene el permiso para ejecutar Sql en Mysql, todo su sistema estará expuesto al pirata informático en este momento. Esto puede tener consecuencias muy graves.

Los piratas informáticos pueden usar el comando Copiar desde programa de Mysql para hacer lo que quieran, como hacer una copia de seguridad de sus archivos clave primero, luego eliminarlos y obligarlo a enviar dinero a través de una cuenta designada. Si se implementa el principio de privilegio mínimo, incluso si un pirata informático irrumpe en nuestro servicio Mysql, solo puede obtener el privilegio mínimo. Por supuesto, también es muy aterrador para los piratas informáticos obtener permisos de Mysql, pero en comparación con obtener todos los permisos, la pérdida es mucho menor.

2. Describa brevemente el principio de la división de permisos de Linux.

  1.  Linux sigue el principio de privilegios mínimos.
  2. La autoridad controlada por cada usuario debe ser lo suficientemente pequeña y la autoridad controlada por cada grupo debe ser lo suficientemente pequeña. En el proceso de producción real, es mejor que la autoridad del administrador se pueda dividir para comprobarse entre sí para evitar problemas.
  3. Cada aplicación debe tener el menor permiso posible. Idealmente, cada aplicación ocupa un contenedor separado (como Docker), por lo que no hay problema de influencia mutua. Incluso si la aplicación se ve comprometida, la capa de protección de Docker no puede verse comprometida.
  4. Rootear lo menos posible. Si un usuario necesita la capacidad de root, debe estar rodeado de permisos: aumente inmediatamente los permisos (como sudo) y libere los permisos inmediatamente después del procesamiento.
  5. El nivel del sistema se da cuenta de la protección jerárquica de los permisos y divide los permisos del sistema en anillos.Cuando el anillo exterior llama al anillo interior, el anillo interior necesita comprobar los permisos.

Supongo que te gusta

Origin blog.csdn.net/MyySophia/article/details/113853124
Recomendado
Clasificación