|
PERMISOS Y PROPIETARIOS DE ARCHIVOS EN UNIX
============================================
Todos los archivos y directorios en los Unix's tienen propietarios y permisos,
es la base de la seguridad de archivos del sistema. Se pueden cambiar los
permisos y los propietarios para restar o agregar restricciones de acceso.
Los permisos son tambien los que definen si un archivo se puede ejecutar como
un comando.
cuando tipeamos ls -l vemos algo como esto:
-rwxr-x--- 1 vorax users 65 Dec 13 15:59 prueba*
drwx------ 2 vorax users 1024 Dec 12 00:02 tmp/
El primer campo es el que indica los permisos (-rwxr-x---). Tambien vemos que
"vorax" es el *usuario* propietario del archivo y "users" es el *grupo*
propietario.
/tmp es un directorio, el primer caracter de los permisos es una "d".
Estos son los caracteres que pueden aparecer al principio de los permisos:
Caracter Significado
úÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ - | Archivo comun ³
³ d | Directorio ³
³ b | Block Device (disco,CD-ROM,etc) ³
³ l | Symbolic Link (BSD o V.4) ³
³ s | Socket (BSD o V.4) ³
³ = | FIFO (System V, Linux) ³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
Los permisos se interpretan asi:
Son 10 caracteres, si quitamos el primero que es el que indica el tipo de
archivo nos quedan 9 que se agrupan de a tres:
úÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ propietario grupo otros usuarios ³
³ (owner) (group) (others) ³
³ | rwx | | r-x | | --- | ³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
r= read-lectura w= write-escritura x=eXecute-ejecucion
Con estos datos sabemos que el usuario propietario del archivo (owner) puede
leer(r), escribir(w) y ejecutar(x). Los miembros del grupo propietario pueden
leerlo(r) y ejecutarlo(x). Los otros usuarios no pueden hacer nada (---)
En el caso del directorio (/tmp):
(drwx------)
En un directorio los caracteres se interpretan asi:
r= Permite ver el contenido del directorio con ls.
w= Se pueden crear, mover o borrar archivos dentro del directorio.
x= Se puede acceder al directorio mediante cd.
Lo mas comun para un directorio es r-x o rwx.
Modo numerico
-------------
Los permisos pueden representarse con tres numeros octales (base 8) (ej:664)
y podemos usar el modo numerico para cambiar los permisos a un archivo.
El primer digito indica los privilegios del propietario, el segundo los del
grupo y el tercero los de los otros usuarios. Cada digito se obtiene sumando
todos los privilegios (rwx) de cada propietario (owner,group,others): Cada
privilegio es un bit de un grupo de 3, su valor posicional si valen 1:
r=4 w=2 x=1
úÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ Volviendo a nuestro ejemplo (-rwxr-x---)
³owner = rwx = 4+2+1 = 7 ³ la codificacion numerica es 750 y este numero
³group = r-x = 4+1 = 5 ³ se obtiene de la forma que se muestra en la figura.
³other = --- = 0 ³ Si tomamos cada digito octal como un numero de tres
³ 750³ digitos binarios. Y si consideramos que si el
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ permiso esta habilitado es 1 y si no 0, entonces
r-x seria 101 en binario, en decimal 4+0+1=5,y obtenemos un digito del permiso
octal.
Los mas comunes son : 0,1,4,5,6,7 y en los tres casos: 600 750 640 644
SUID: 4000 SGID: 2000 (ver mas adelante)
CAMBIAR PERMISOS (comando chmod)
--------------------------------
Cuando creamos un archivo nos convertimos en sus propietarios y podemos
cambiar los permisos de este mediante el comando "chmod"
<=SOLO EL PROPIETARIO PUEDE CAMBIAR LOS PERMISOS=>
La sintaxis es: chmod <especificacion> archivo_o_directorio
Hay dos formas de cambiar los permisos: en forma numerica o con codigos de
letras.
=Modo numerico=
(en el prompt del UNIX)
unix:~$ ls -l prueba
-rwxr-x--- 1 vorax users 65 Dec 13 15:59 prueba*
unix:~$chmod 511 prueba
unix:~$ls -l prueba
-r-x--x--x 1 vorax users 65 Dec 13 15:59 prueba*
unix:~$chmod 710 prueba
unix:~$ls -l prueba
-rwx--x--- 1 vorax users 65 Dec 13 15:59 prueba*
Aunque al principio puede parecer dificil, posiblemente el modo numerico
sea el que mas uses. Arriba explico como se obtiene el numero.
=Modo simbolico=
La sintaxis es: chmod [ugoa...][=-+][rwxXstugo][...] pueden hacerse
multiples operaciones simbolicas separadas por comas.
1) Primero debemos especificar que permisos queremos modificar mediante una
letra: u= los del propietario (user)
g= los del grupo (group)
o= los de los otros (other)
a= los de todos (ugo)
2) Debemos indicar si agregamos o sacamos un permiso, + y - respectivamente
o si lo modificamos, signo =
3)Indicamos los permisos mediante el codigo de letras.
Ejemplo, para agregar el permiso de lectura para el grupo y los otros:
unix:~$ chmod go+r
otros ejemplos :
unix:~$ ls -l prueba
-rwxr-x--- 1 vorax users 65 Dec 13 15:59 prueba*
unix:~$ chmod u-w,g-r,o+x prueba
unix:~$ ls -l prueba
-r-x--x--x 1 vorax users 65 Dec 13 15:59 prueba*
unix:~$ chmod u+w,o-x prueba
unix:~$ ls -l prueba
-rwx--x--- 1 vorax users 65 Dec 13 15:59 prueba*
unix:~$chmod a+x,u-rw prueba
unix:~$ ls -l prueba
---x--x--x 1 vorax users 5 Dec 13 15:59 prueba*
NOTAS
Estos comandos son equivalentes: chmod ugo+rx =igual a= chmod a+rx
Se pueden usar comodines: chmod a-r *sec* (saca permiso de lectura a todos
los archivos que tengan "sec" en su nombre: seco.txt casiseco.txt,etc)
Varios archivos a la ves: chmod a+x zap.x wedit.x
Recursivamente (como attrib /s en DOS) chmod a-r * -R (saca permiso de lectura
a todos los archivos y directorio del directorio actual y subdirectorios)
Si un directorio tiene permiso de escritura para todos (chmod o+w) cualquiera
puede borrar los archivos que esten adentro sin importar los permisos.
Cualquiera con permisos de lectura puede copiar el archivo. El propietario
de la copia es el que la copio.
Chmod no cambia los permisos de un link, si no del archivo al que este apunta.
SUID y GUID
===========
Hay casos en que un usuario comun necesita tener privilegios. Por ejemplo
el programa passwd que permite cambiar el password de un un usuario necesita
escribir en /etc/passwd, y un usuario comun no tiene privilegios para hacerlo.
Para solucionar esto UNIX permite que un programa se 'encubra' bajo la
identidad de su propietario, asumiendo un UID o GID distinto al del usuario
que lo ejecuto. Un programa que puede hacer esto se denomina SUID o SGID.
Cuando un programa SUID se ejecuta, el "effective UID" (EUID) es el del
propietario del archivo, aunque el usuario que lo ejecuto sea otro.
Si seteamos los bits de permiso suid o sgid a un archivo ejecutable, otros
usuarios pueden tener acceso a los mismos recursos (mediante el ejecutable)
que los propietarios reales. Ejemplo:
el programa cat que se encuentra generalmente en /bin nos permite ver el
contenido de un archivo al que tenemos acceso de lectura:
unix:~$ cat /etc/passwd
root:KQc4YhmF6pc6X:0:0:root:/root:/bin/bash
bin:*:1:1:bin:/bin:
[sigue]
Los permisos normales de /bin/cat son:
unix:~$ls -l /bin/cat
-rwxr-xr-x 1 root bin 7737 Aug 6 1995 /bin/cat*
SI SOMOS ROOT PODEMOS HACER ESTO:
unix:~$chmod u+s /bin/cat (agregamos suid a /bin/cat)
unix:~$ls -l /bin/cat
-rwsr-xr-x 1 root bin 7737 Aug 6 1995 /bin/cat*
( ^-la x de ejecucion fue reemplazada por una "s")
Entonces cada vez que un usuario usa "cat" toma momentaneamente la identidad
de su propietario (root) por lo tanto puede leer cualquier archivo aunque
no tenga permisos reales (si de Carlos) para hacerlo. :)
Si seteamos suid un shell tenemos acceso de root como si entramos con login
y password: (HAY QUE SER ROOT PARA HACER ESTO)
unix:~$cp /bin/sh ./rootsh
unix:~$chmod u+s rootsh
unix:~$ls -l rootsh
-rwsr-xr-x 1 root users 299649 Dec 13 18:56 rootsh*
unix:~$rootsh
unix:~# (somos root :)
Si rootsh tuviera estos permisos:
-rwsr-sr-x 1 juan clientes 299649 Dec 13 18:56 rootsh*
Tomariamos la identidad de "juan" y el grupo "clientes", aunque realmente
fueramos "carlos" del grupo "users".
NOTAS
Si encontramos un archivo suid escribible por nosotros es suficiente para
ganarse el r00t.
No les recomiendo dejar shells suid root en los lugares que hakean como
forma para volver a entrar, muchas utilidades de seguridad los detectan
y hay mejores metodos para asegurarse el reingreso.
Estos comandos son equivalentes: chmod a+x,u+s =igual a= chmod 4111
chmod a+x,g+s =igual a= chmod 2111
chmod u+s,g+s =igual a= chmod 6111
Sticky Bit= si la ultima x de un archivo es un "t" el programa
es Sticky. Esta permiso en archivos es obsoleto pero se usa en directorios.
Este comando muestra todos los SUID find / -type f -perm +u+s -ls
Si un archivo es SUID o SGID pero no ejecutable (!) se ve una S mayuscula
prueben!.
CAMBIAR PROPIETARIOS (chown,chgrp)
---------------------------------
Para cambiar el grupo o usuario propietario de un archivo, se debe ser
"due¤o" del mismo, o root. Para cambiar el grupo se debe pertenecer a el.
Sintaxis:
Cambiar grupo : chgrp <grupo> archivo
Cambiar 'owner': chown <usurio> archivo
Ejemplos:
unix:~$chown vorax .hosts_n (cambio el propietario del archivo .hosts_n)
unix:~$chgrp users .hosts_n (cambio el grupo propietario del archivo)
unix:~$chown vorax * (todos los archivos del directorio)
unix:~$chown vorax .titbax prueba ckd.c (varios archivos)
Si usamos los numeros UID o GID:
unix:~$chown 501 .rare.txt (507 es el UID del usuario)
unix:~$chgrp 100 .rare.txt (100 es GID del grupo)
Todo junto:
chown usuario:grupo archivo
unix:~$chown juan:users juan.txt (setea usuario:grupo de una vez)
unix:~$chown juan: (setea usuario y el grupo con el que esta logeado)
Y todas las combinaciones posibles...
Usen el comando id en cada uno de los ejemplos para entender mejor.
===========================================================================
Sacado del e-zine RareGazz nº 10 por BrainSCAN para HackUMA
Aún no hay comentarios para este recurso.
Monografias, Exámenes, Universidades, Terciarios, Carreras, Cursos, Donde Estudiar, Que Estudiar y más: Desde 1999 brindamos a los estudiantes y docentes un lugar para publicar contenido educativo y nutrirse del conocimiento.
Contacto »