jueves, 13 de diciembre de 2012

Los "oscuros números" de chmod




  Después de haber llamado vuestra atención con este título tan peculiar vuelvo a escribir para hablar de los números que acompañan al comando chmod encargados de asignar los permisos de usuario.
  Para los que no entendáis mi explicación aquí tenéis un ejemplo:
chmod 777 miFichero
  Este número 777 es el que voy a explicar de donde procede y como calcularlo en función de los permisos que queramos asignar.

  El número está compuesto por tres cifras XXX, la primera hace referencia a los permisos del usuario, la segunda a  los del grupo y la tercera cifra a los permisos de otros.
  Cada una puede tomar valores entre 0 y 7 otorgando distintos permisos en función  del número escogido.
0 = Ningún permiso
1 = Ejecución
2 = Escritura
3 = Escritura y ejecución
4 = Lectura
5 = Lectura y ejecución
6 = Lectura y escritura
7 = Lectura, escritura y ejecución
Pero, ¿cómo los calculamos(cada cifra se calcula por separado)?
r = lectura 
w = escritura
x = ejecución
r     w     x
---------------
0     0     0                 =>  0
0     0     1                 =>  1
0     1     0                 =>  2
0     1     1                 =>  3
1     0     0                 =>  4
1     0     1                 =>  5
1     1     0                 =>  6
1     1     1                 =>  7


Veamos algunos ejemplos para grabar con fuego que complementen lo explicado:
  • Otorgarle al fichero "miFichero" permisos de lectura y escritura para el usuario, le ejecución para el grupo y ninguno para otros usuarios.
    chmod 610 miFichero 
  • Otorgarle al fichero "miFichero" permisos de lectura y escritura para el usuario, para el grupo de lectura y para otros de lectura también.
    chmod 644 miFichero
  • Otorgarle al fichero "miFIchero" todos los permisos al usuario y ninguno al resto, tango al grupo como a otros.
    chmod 700 miFichero
Con estos ejemplos concluyo la entrada, nos leemos en breve :D.

NOTA: Leed los comentarios del post que hay información muy interesante que complementa el contenido de éste :D.

5 0verl0ad Labs: Los "oscuros números" de chmod   Después de haber llamado vuestra atención con este título tan peculiar vuelvo a escribir para...

4 comentarios:

Adrián dijo...

rwx se corresponde con los valores en octal descompuestos donde r=4,w=2 y x=1, el 0 quedaría para no asignar permisos.

Entonces por cada bloque se van sumando los valores, por ejemplo:

chmod 610 miFichero

6 = 4+2+0 = rw-
1 = 1+0+0 = --x
0 = 0+0+0 = ---

Lo que finalmente construiría el permiso total rw- --x ---

Así es como lo aprendí yo.

Aetsu Alpha dijo...

Interesante, es otra forma de aprenderlo xD.
Las alternativas siempre merece la pena conocerlas, gracias por compartirlo.

d1cor dijo...

Además, y como aporte, ya que el post está genial y muy didáctico, cabe agregar el uso de permisos especiales.
Esa primer terna de permisos que no está visible en los tres numeritos en octal.
Los permisos especiales son una terna más que permiten setear algunas cosas extra, como privilegios diferenciados de ejecución, o restricciones en la eliminación de archivos y herencia de grupo de un directorio en nuevos archivos contenidos.

Las ternas de permisos de usuario quedarían:
EUGO (especiales, dueño, grupo, otros)

donde los valores de UGO son los que vos ya comentaste, y los de E son 3:

4 (100) -> Permiso Set User ID (SUID)
2 (010) -> Permiso Set Group ID (SGID)
1 (001) -> Permiso Sticky

SGID sobre un ejecutable permite que quien lo corra lo haga con los permisos del ususario dueño.
SGID idem, pero para el grupo.
STICKY sobre un directorio permite dos cosas, primero que cada elemento creado dentro del directorio herede el grupo del mismo, y segundo, que el elemento que se crea en un directorio sticky solo pueda ser renombrado o eliminado por el dueño creador, y por el usuario root.

#setear el SUID:
chmod u+s ejecutable
o
chmod 4xyz ejecutable

#setear el SGID:
chmod g+s ejecutable
o
chmod 2xyz ejecutable

#setear el STICKY:
chmod +t directorio
o
chmod 1xyz directorio

Te invito a hacer algunas pruebas, si bien no suelen "setearse" muy seguido, sí se usan casi todo el tiempo.

Sin ir mas lejos, fijate la salida de los siguientes comandos:

ls -l /usr/bin/passwd

y

ls -ld /tmp

Espero haber sido util! Estaria bueno que armes algun post sobre esto.
Saludos!
d1cor

Rock Neurotiko dijo...

@Adrian, justo lo que yo iba a comentar, yo lo aprendi con esa regla también :-)

< >