Protección de los usuarios y los procesos en Oracle® Solaris 11.2

Salir de la Vista de impresión

Actualización: Julio de 2014
 
 

Cómo determinar los privilegios que necesita un programa

Utilice este procedimiento de depuración cuando falle un comando o un proceso. Después de encontrar el primer error del privilegio, es posible que deba ejecutar el comando ppriv -eD command nuevamente para encontrar los requisitos de privilegios adicionales.

  1. Escriba el comando que está fallando como argumento para el comando ppriv.
    % ppriv -eD touch /etc/acct/yearly
    
    touch[5245]: missing privilege "file_dac_write"
         (euid = 130, syscall = 224) needed at zfs_zaccess+0x258
    touch: cannot create /etc/acct/yearly: Permission denied 
  2. Utilice el número syscall los resultados de la depuración para determinar qué llamada del sistema está fallando.

    Se ha encontrado el nombre del número syscall en el archivo /etc/name_to_sysnum.

    % grep 224 /etc/name_to_sysnum
    
    creat64                 224

    En este ejemplo, la llamada creat64() está fallando. Para que se realice correctamente, el proceso debe tener asignado el derecho a crear un archivo en el directorio /etc/acct/yearly.

Ejemplo 7-5  Utilización del comando truss para examinar el uso de privilegios

El comando truss puede depurar el uso de privilegios en un shell común. Por ejemplo, el siguiente comando depura el proceso con errores touch:

% truss -t creat touch /etc/acct/yearly

creat64("/etc/acct/yearly", 0666)            
                       Err#13 EACCES [file_dac_write
]
touch: /etc/acct/yearly cannot create

Las interfaces ampliadas /proc informan el privilegio file_dac_write faltante después del código de error en la salida del comando truss.

Ejemplo 7-6  Utilización del comando ppriv para examinar el uso de privilegios en un shell de perfil

En este ejemplo, el usuario jdoe puede asumir el rol objadmin. El rol objadmin incluye el perfil de derechos de gestión de acceso a objetos. Este perfil de derechos permite al rol objadmin cambiar permisos en archivos que no son propiedad de objadmin.

En el fragmento siguiente, jdoe no puede cambiar los permisos en el archivo useful.script:

jdoe% ls -l useful.script

-rw-r--r--  1 aloe  staff  2303 Apr 10 10:10 useful.script
jdoe% 
chown objadmin useful.script

chown: useful.script: Not owner
jdoe% 
ppriv -eD chown objadmin useful.script

chown[11444]: missing privilege "file_chown" 
            (euid = 130, syscall = 16) needed at zfs_zaccess+0x258
chown: useful.script: Not owner

Cuando jdoe asume el rol objadmin, se modifican los permisos en el archivo:

jdoe% su - objadmin
Password: xxxxxxxx

# ls -l useful.script
-rw-r--r--  1 aloe  staff  2303 Apr 10 10:10 useful.script

# chown objadmin useful.script
# ls -l useful.script
-rw-r--r--  1 objadmin  staff  2303 Apr 10 10:10 useful.script
# chgrp admin useful.script

# ls -l objadmin.script
-rw-r--r--  1 objadmin  admin  2303 Apr 10 10:11 useful.script
Ejemplo 7-7  Modificación de un archivo que es propiedad del usuario root

Este ejemplo ilustra la protección contra la escalada de privilegios. Para ver una explicación, consulte Escalada de privilegios y privilegios del núcleo. El archivo es propiedad del usuario root. El rol menos poderoso, el rol objadmin, necesita todos los privilegios para cambiar la propiedad del archivo, por lo que la operación no se ejecuta correctamente.

jdoe% su - objadmin
Password: xxxxxxxx

# cd /etc; ls -l system
-rw-r--r--  1 root  sys   1883 Oct 10 10:20 system

# chown objadmin system
chown: system: Not owner
# ppriv -eD chown objadmin system
chown[11481]: missing privilege "ALL" 
     (euid = 101, syscall = 16) needed at zfs_zaccess+0x258
chown: system: Not owner