Sistemas operativos modernos
Llamada al sistema Descripción s = chmodípath, moda) Cambia el modo de protección de un archivo s = access(path, mode) Verifica el acceso con los UID y GID reales uid = getuid( ) Obtiene el UID real uid = qeteuld( ) Obtiene el UID efectivo gid = getgid( ) Obtiene el GID real gid = getegid( ) Obtiene el GID efectivo s = chown(path, owner, group) Cambia el dueño y el grupo s = setuíd(uld) Establece el UID s = setgid(gid) Establece el GID Figura 10-39. Algunas llamadas al sistema relacionadas con la seguridad. El código de retorno ses -1 si hubo algún error; uid y gid son el U ID y el C ID , respectivamen te; path es una ruta de acceso. Los parámetros no requieren mayor explicación. La llamada access prueba si un acceso dado se permitiría empleando el UID y el GID rea les. Esta llamada al sistema es necesaria para evitar violaciones de la seguridad en programas que son SETUID y son propiedad de root. Un programa así puede hacer cualquier cosa, pero a veces necesitará averiguar si el usuario está autorizado para efectuar cierto acceso. El progra ma no puede tan sólo intentar el acceso, porque siempre lo logrará. Con la llamada access el programa podrá averiguar si se permite el acceso con el UID y el GID reales. Las siguientes cuatro llamadas al sistema devuelven los UID y GID reales y efectivos. Las últimas tres sólo puede emitirlas el superusuario; cambian el dueño de un archivo y el UID y GID de un proceso. 10.7.3 Implementación de seguridad en UNIX Cuando un usuario inicia sesión, el programa de inicio de sesión, login (que es SETUID root), pi de un nombre de inicio de sesión y una contraseña. Luego aplica a la contraseña una función de hash y busca una coincidencia en el archivo de contraseñas, /etc/passwd (los sistemas conectados a redes tienen un funcionamiento ligeramente distinto). La razón por la que se usan funciones de hash es que la contraseña nunca debe almacenarse en forma no cifrada en ninguna parte del sis tema. Si la contraseña es correcta, el programa login consulta /etc/passwd para ver cuál shell es el que prefiere el usuario; tal vez sh, pero podría ser otro, como csh o ksh. Luego, el programa de inicio de sesión usa setuid y setgid para asumir el UID y el GID del usuario (recuerde que al principio era SETUID root). Luego, el programa abre el teclado para entrada estándar (descriptor de archivo 0 ), la pantalla para salida estándar (descriptor de archivo 1 ) y la pantalla para error es tándar (descriptor de archivo 2). Por úlfimo, ejecuta el shell preferido, y con eso termina. En este punto, el shell preferido se está ejecutando con el UID y el GID cQcrectos y con la entrada, salida y error estándar configurados a sus disposifivos predeterminados. Todos los pro cesos en los que el shell se bifurque (es decir, comandos tecleados por el usuario) heredarán en
RkJQdWJsaXNoZXIy MjI4NDcx