¿Cómo establece UNIX el bit de ID de usuario?

  
                

En Linux, cada proceso tiene varios bits de ID de usuario. ¿Cómo estos ID de usuario establecen permisos para el acceso a archivos? Este artículo toma UNIX como ejemplo para presentar brevemente cómo UNIX establece el bit de ID de usuario.

con una función de estadísticas para obtener información de estado del archivo, tales prototipos son:

int stat (const char * camino, struct stat * buf);

La estructura de la estructura stat:

struct stat {

dev_t st_dev; /* ID del dispositivo que contiene el archivo * /

ino_t st_ino; /* número de inodo * /

mode_t st_mode; /* protection * /

nlink_t st_nlink; /* número de enlaces duros * /

uid_t st_uid; /* ID de usuario del propietario * /

gid_t st_gid; /* ID de grupo del propietario * /

dev_t st_rdev; /* ID de dispositivo (si es un archivo especial) * /

off_t st_size; /* tamaño total, en Bytes * /

blksize_t st_blksize; /* blocksize para E /S del sistema de archivos * /

blkcnt_t st_blocks; /* número de 512B bloques asignados * /

time_t st_atime; /* hora del último acceso * /

time_t st_mtime; /* hora de la última modificación * /

time_t st_ctime; /* hora del último cambio de estado * /

};

parámetro buf del grupo saliente ID puede ser utilizado para obtener ST_UID, propietario del archivo ID st_gid representación, y los archivos de los propietarios.

También hay varios conjuntos de conceptos de ID en el proceso UNIX. Son el ID de usuario real, el ID de grupo de usuarios real, el ID de usuario válido, el ID de grupo de usuarios efectivo, etc. Cuando iniciamos un proceso, generalmente el ID de usuario efectivo de este proceso es el ID real del proceso (por ejemplo, inicio sesión con el usuario eric, este usuario válido es el ID correspondiente a mi eric). Sin embargo, cuando el "bit de ID de usuario establecido" está activado, la ID válida es la ID del propietario correspondiente al archivo de programa del proceso.

$ ls -l 1.txt

-rw ------- 1 root root 16 de abril 29 14:31 1.txt

Debajo del directorio actual Hay un archivo " 1.txt " es la raíz del propietario, y solo la raíz tiene permisos de lectura y escritura.

1 int main ()

2 {

3 int fd;

4 if ((fd = open (" 1.txt ", O_RDONLY)) == -1)

5 {

6 printf (" Error de apertura. \\ N ");

7 exit (-1);

8}

9 char buf [1024] = {0};

10 lecturas (fd, buf, 1024);

11 printf (buf);

12 printf (" \\ n ");

13}

Primero uso el comando su en el terminal para usar el usuario root. Gcc read.c -dominio. Consigue el programa principal.

# gcc read.c -omain

# exit

exit

$ main

No se pudo abrir.

Obviamente, el propietario de main también es root, pero el programa principal aún no puede abrir "1.txt", esto se debe a que el ID efectivo del proceso después del inicio principal es el ID de usuario real del proceso (es decir, el ID de la cuenta eric), y " 1.txt " solo tiene acceso de lectura y escritura al usuario root, por lo que la apertura falla.

Abra el bit de ID de usuario principal para abrir el comando de shell: chmod u + s main

Utilizo el programa c, el código principal es el siguiente:

1 struct stat Buf = {0};

2 stat (" main ", &buf);

3 buf.st_mode

Copyright © Conocimiento de Windows All Rights Reserved