hoy vamos a ver una serie de permisos
extras, que podemos asignarles a los ficheros y directorios de nuestro
Unix y Linux. Estos permisos nos posibilitan hacer cosas tan
interesantes como que un proceso corra con otro usuario diferente al que
lo ejecuta o que un directorio tenga permisos un tanto “especiales”.
Estos permisos son los siguientes:
- set-user-ID-on-execution (AKA SUID) permite que, al ejecutarse un fichero, se realice bajo los privilegios del propietario. Por ejemplo, si necesitamos ejercer los privilegios de root para poder acceder a cierto módulo, escribir en logs, leer/escribir de dispositivos, etc.
- set-group-ID-on-execution (AKA SGID) permite que, al ejecutarse un fichero, se realice bajo los privilegios del grupo propietario del fichero.
- Sticky bit: Este permiso, si se asigna a un ejecutable, nos permite que este se guarde directamente en memoria para que al ejecutarse las siguientes veces, sea leido desde allí. Realmente lo que hace es guardar copia en la swap, por lo que en los sistemas modernos, poco o nada nos va a beneficiar. Lo que todavía resulta muy interesante es al asignarlo a un directorio. Si se lo asignamos al directorio, nos permite que los ficheros creados en el mismo, independientemente de los permisos que tengan, únicamente podrán ser eliminados y/o renombrados por el propietario de los ficheros residentes en el mismo. Un claro ejemplo de esto es el directorio /tmp.
Como en los permisos básicos, para
asignar estos permisos, podemos usar el modo simbólico o el modo
octal. Para el modo octal, deberemos agregar en la primera cifra…
- chmod 4xxx fichero para activar el modo Suid
- chmod 2xxx fichero para activar el modo Sgid
- chmod 1xxx fichero para activar el modo sticky bit
Un poco mas sencillo es el modo simbólico:
- chmod +s fichero para activar el modo suid
- chmod g+s fichero para activar el modo sgid
- chmod +t fichero para activar el sticky bit
Para ver un ejemplo de esto del SUID, he
hecho una copia del programa id, que nos devuelve el usuario con el
cual le estamos ejecutando y el resultado es el siguiente:
$ ls -l id -r-xr-xr-x 1 root wheel 63632 8 jun 15:44 id
como root, ejecutamos el comando chmod para cambiarlo a suided:
# chmod u=+s id
o bien:
# chmod 4555 id
dando como resultado:
-r-sr-xr-x 1 root wheel 63632 Jun 8 15:44 id
Ahora, si ejecutamos el comando id modificado, obtendremos lo siguiente:
$ ./id uid=501(jesusdml),gid=20(staff),euid=0(root),groups=20(staff).....
Como se puede apreciar, aunque seamos el usuario jesusdml, en este caso, el euid o id efectivo, es el de root. Si dejamos el fichero tal y como estaba, obtendremos lo siguiente:
# chmod u=-s id
o bien:
# chmod 0555 id
dará como resultado el fichero con los permisos originales y por tanto con la respuesta original:
$ ./id uid=501(jesusdml),gid=20(staff),groups=20(staff),101...
Por supuesto, antes de ir dando SUID o
SGID a nuestro software, hay que tener cuidado porque estos programas
con ejecutados con el usuario propietario de los mismos. Esto significa
que cualquier otro usuario que los ejecute, podrá tener acceso como tal y
son víctimas frecuentes de exploits locales.
Cabe destacar que si ejecutamos un
script con SUID o SGID, los programas que se ejecuten dentro del script
no correrán con estas propiedades.
Saludos,
Fuente:
http://www.flu-project.com/
No hay comentarios:
Publicar un comentario