miércoles, 30 de septiembre de 2015

chgrp – Cambiando el grupo propietario

En antiguas versiones de Unix, el comando chown sólo cambiaba el propietario del archivo, no el grupo propietario. Para ese propósito, se utilizaba un comando aparte, el comando chgrp . Funciona de forma muy parecida a chown, excepto por ser mucho más limitado.

lunes, 28 de septiembre de 2015

chown – Cambia el propietario y el grupo de un archivo

El comando chown se utiliza para cambiar el propietario y el grupo propietario de un archivo o un directorio. Se requieren privilegios de superusuario para utilizar este comando. La sintaxis de chown tiene este aspecto:

chown [propietario][:[grupo]] archivo...

chown puede cambiar el propietario del archivo y/o el grupo propietario dependiendo del primer argumento del comando. Aquí tenemos algunos ejemplos:

Tabla 9-7: Ejemplos de argumentos de chown
Argumento Resultado
bob Cambia el propietario del archivo del propietario actual al usuario bob.
bob:users Cambia la propiedad del archivo de su actual propietario al usuario bob y cambia el grupo propietario del archivo al grupo users.
:admins Cambia el grupo propietario al grupo admins. El propietario del archivo no cambia
bob: Cambia el propietario del archivo del propietario actual al usuario bob y cambia el grupo propietario al grupo de inicio de sesión del usuario bob.

Digamos que tenemos dos usuarios; janet, quien tiene acceso a privilegios de superusuario y tony, que no los tiene. El usuario janet quiere copiar un archivo de su directorio home al directorio home del usuario tony. Como el usuario janet quiere que tony pueda editar el archivo, janet cambia la propiedad del archivo copiado de janet a tony:

[janet@linuxbox ~]$ sudo cp myfile.txt ~tony
Password:
[janet@linuxbox ~]$ sudo ls -l ~tony/myfile.txt
-rw-r--r-- 1 root root 8031 2008-03-20 14:30 /home/tony/myfile.txt
[janet@linuxbox ~]$ sudo chown tony: ~tony/myfile.txt
[janet@linuxbox ~]$ sudo ls -l ~tony/myfile.txt
-rw-r--r-- 1 tony tony 8031 2008-03-20 14:30 /home/tony/myfile.txt

Aquí vemos que el usuario janet copia el archivo de su directorio al directorio home del usuario tony. A continuación, janet cambia la propiedad del archivo de root (como resultado de usar sudo) a tony. Usando los dos puntos al final del primer argumento, janet también ha cambiado el grupo propietario del archivo al grupo con el que inicia sesión tony, que resulta ser el grupo tony.

Fíjate que tras el primer uso de sudo, a janet no se le vuelve a preguntar por su contraseña. Esto es porque sudo, en la mayoría de las configuraciones, “confía” en ti unos minutos antes de que su temporizador se acabe.

viernes, 25 de septiembre de 2015

Ubuntu y sudo

Uno de los problemas recurrentes para los usuarios normales es ejecutar ciertas tareas que requieren privilegios de superusuario. Estas tareas incluyen instalar y actualizar software, editar archivos de configuración del sistema, y acceder a dispositivos. En el mundo Windows, a menudo se hace dando a los usuarios privilegios de administrador. Esto permite a los usuarios ejecutar estas tareas. Sin embargo, también permite que los programas ejecutados por el usuario tengan las mismas capacidades. Esto no es deseable en la mayoría de los casos, ya que permite al malware (software malicioso), como los virus, tener dominio absoluto del ordenador. En el mundo Unix, siempre ha habido una mayor división entre los usuarios normales y los administradores, debido a la herencia multiusuario de Unix. El enfoque tomado en Unix es proporcionar privilegios de superusuario sólo cuando se necesite. Para hacer esto, normalmente se usan los comandos su y sudo.

Hasta hace pocos años, la mayoría de las distribuciones Linux confiaban en su para este propósito. su no requería la configuración que requería sudo, y tener una cuenta root es tradicional en Unix. Esto creaba un problema. Los usuarios tendían a operar como root cuando no era necesario. De hecho, algunos usuarios utilizaban sus sistemas exclusivamente como root, ya que eliminaban todos esos molestos mensajes de “permiso denegado”. Así es como se reduce la seguridad de un sistema Linux a la de un sistema Windows. No es una buena idea.

Cuando apareció Ubuntu, sus creadores tomaron un rumbo diferente. Por defecto, Ubuntu desactiva el acceso a la cuenta root (impidiendo establecer una contraseña para la cuenta), y en su lugar utiliza sudo para proporcionar privilegios de superusuario. La cuenta de usuario inicial tiene acceso a privilegios completos de superusuario vía sudo y puede proporcionar poderes similares a posteriores cuentas de usuario.

miércoles, 23 de septiembre de 2015

sudo – Ejecutar un comando como otro usuario

El comando sudo es como su en muchos aspectos, pero tiene algunas capacidades adicionales importantes. El administrador puede configurar sudo para permitir a los usuarios normales ejecutar comandos como un usuario diferente (normalmente el superusuario) de una forma muy controlada. En particular, un usuario estaría limitado a uno o más comandos específicos y no a otros. Otra diferencia importante es que el uso de sudo no requiere la contraseña del superusuario. Para autenticarse usando sudo, el usuario utiliza su propia contraseña. Digamos, por ejemplo, que sudo ha sido configurado para permitirnos ejecutar una programa ficticio de copias de seguridad llamado “backup_script”, que requiere privilegios de superusuario. Con sudo podría hacerse así:

[me@linuxbox ~]$ sudo backup_script
Password:
System Backup Starting...

Después de introducir el comando, se nos pregunta por nuestra contraseña (no la del superusuario) y una vez que la autenticación está completada, el comando especificado se lleva a cabo. Una diferencia importante entre su y sudo es que sudo no abre una nueva shell, ni carga el entorno de otro usuario. Esto significa que los comandos no necesitan ser entrecomillados de forma diferente a la que lo estarían si lo ejecutáramos sin usar sudo. Ten en cuenta que este comportamiento puede ser anulado especificando varias opciones. Mira la man page de sudo para más detalles.

Para ver qué privilegios otorga sudo, usa la opción “-l” para listarlos:

[me@linuxbox ~]$ sudo -l
User me may run the following commands on this host:
    (ALL) ALL

lunes, 21 de septiembre de 2015

su – Ejecutar un Shell con Ids sustitutos de usuarios y grupos

El comando su se usa para arrancar un shell como otro usuario. La sintaxis del comando es así:

su [-[l]] [user]

Si se incluye la opción “-l”, la sesión shell resultante es un shell de login para el usuario especificado. Esto significa que el entorno del usuario se carga y el directorio de trabajo se cambia al directorio home del usuario. Esto es lo que queremos normalmente. Si no especificamos el usuario, se asume el superusuario. Fíjate que (extrañamente) la opción "-l" puede ser abreviada como “-”, que es como se usa más a menudo. Para iniciar una shell para el superusuario, haríamos esto:

[me@linuxbox ~]$ su -
Password:
[root@linuxbox ~]#

Después de introducir el comando, nos pide la contraseña del superusuario. Si la introducimos correctamente, un nuevo prompt de shell aparece indicando que esta nueva shell tiene privilegios de superusuario (“#” en lugar de “$”) y el directorio de trabajo actual es ahora el directorio home del superusuario (normalmente /root.). Una vez que estamos en el nuevo shell, podemos ejecutar comandos como superusuario. Cuando terminemos, escribimos “exit” para volver al shell previo:

[root@linuxbox ~]# exit
[me@linuxbox ~]$

También es posible ejecutar un único comando en lugar de comenzar un nuevo comando interactivo usando su de la siguiente forma:

su -c 'comando'

Usando esta forma, un única línea de comandos es pasada al nuevo shell para su ejecución. Es importante incluir el comando entre comillas simples, ya que no queremos que se realice una expansión en nuestro shell, sino en el nuevo shell:

[me@linuxbox ~]$ su -c 'ls -l /root/*'
Password:
-rw------- 1 root root 754 2007-08-11 03:19 /root/anaconda-ks.cfg

/root/Mail:
total 0
[me@linuxbox ~]$

viernes, 18 de septiembre de 2015

Cambiar identidades

Muchas veces, encontraremos necesario tomar la identidad de otro usuario. A menudo querremos obtener permisos de superusuario para llevar a cabo tareas administrativas, pero también es posible “convertirse” en otro usuario normal para cosas tales como probar una cuenta. Hay tres formas para asumir una identidad alternativa:
  1. Cerrar la sesión y volver a abrirla como el usuario alternativo.
  2. Usar el comando su.
  3. Usar el comando sudo.
Nos saltaremos la primera técnica ya que sabemos cómo hacerlo y además no tiene las ventajas de las otras dos. Desde dentro de nuestra propia sesión de shell, el comando su nos permite asumir la identidad de otro usuario, abriendo una nueva sesión de shell con los IDs de ese usuario o ejecutar un comando como ese usuario. El comando sudo permite a un administrador modificar un archivo de configuración llamado /etc/sudoers, y definir comandos específicos que usuarios particulares tienen permiso ejecutar bajo una identidad asumida. La elección de qué comando usar está muy condicionada por la distribución Linux que uses. Tu distribución probablemente incluya los dos comandos, pero su configuración favorecerá un comando u otro. Empezaremos con su.

miércoles, 16 de septiembre de 2015

Algunos permisos especiales

Aunque normalmente vemos la máscara octal de permisos expresada como un número de tres dígitos, es más correcto técnicamente expresarla en cuatro dígitos ¿por qué? Porque, además de permisos de lectura, escritura y ejecución, hay algunas otras configuraciones de permisos menos usadas.

El primero de ellos es el setuid bit (octal 4000). Cuando lo aplicamos a un archivo ejecutable, cambia la ID efectiva de usuario (effective user ID) del usuario real (el usuario que realmente está utilizando el programa) por la del propietario del programa. Muy a menudo esto se aplica a unos pocos programas cuyo propietario es el superusuario. Cuando un usuario normal ejecuta un programa que está “setuid root”, el programa funciona con los privilegios efectivos del superusuario. Esto permite al programa acceder a archivos y directorios a los que un usuario normal tendría normalmente prohibido su acceso. Por supuesto, debido que esto plantea problemas de seguridad, el número de programas setuid debe reducirse al mínimo necesario.

El segundo permiso menos usado es el setgid bit (octal 2000) el cual, como el setuid bit, cambia el ID de grupo efectivo (effective group ID) del ID de grupo real (real group ID) por el del propietario del archivo. Si el setgid bit se aplica en un directorio, a los archivos nuevos, creados dentro del directorio, se les darán los permisos de grupo propietario que tiene el directorio en lugar de los permisos de grupo propietario del creador del archivo. Esto es útil en un directorio compartido cuando los miembros de un grupo común necesitan acceso a todos los archivos del directorio, independientemente del primer grupo propietario del archivo.

El tercero se llama el sticky bit (octal 1000). Esto es una reliquia del antiguo Unix, donde era posible marcar un archivo ejecutable como “no intercambiable”. En archivos, Linux ignora el sticky bit, pero si se aplica a un directorio, evita que los usuarios borren o renombren archivos a menos que el usuario sea el propietario del directorio, el propietario del archivo o el superusuario. Esto, a menudo, se usa para controlar el acceso a un directorio compartido, como /tmp.

Aquí hay algunos ejemplos de uso de chmod con notación simbólica para establecer estos permisos especiales. Primero asignaremos setuid a un programa:

chmod u+s program

A continuación, asignaremos setgid a un directorio:

chmod g+s dir

Finalmente, asignaremos el sticky bit a un directorio:

chmod +t dir

Cuando vemos la salida de ls, podemos determinar los permisos especiales. Aquí tenemos algunos ejemplos, primero un programa que tiene setuid:

-rwsr-xr-x

Un directorio que tiene el atributo setgid:

drwxrwsr-x

Un directorio con el sticky bit establecido:

drwxrwxrwt

lunes, 14 de septiembre de 2015

umask – Establecer los permisos por defecto

El comando umask controla los permisos por defecto dados a un archivo cuando este es creado. Usa notación octal para expresar una máscara de bits, que será utilizada para eliminar los atributos de modo (permisos) de un archivo. Echemos un vistazo:

[me@linuxbox ~]$ rm -f foo.txt
[me@linuxbox ~]$ umask
0002
[me@linuxbox ~]$ > foo.txt
[me@linuxbox ~]$ ls -l foo.txt
-rw-rw-r-- 1 me me 0 2008-03-06 14:53 foo.txt

Primero hemos eliminado cualquier copia antigua de foo.txt para asegurarnos de que empezamos de cero. A continuación, hemos ejecutado el comando umask sin argumentos para ver el valor actual. Ha respondido con el valor 0002 (el valor 0022 es otro valor por defecto muy común), que es la representación octal de nuestra máscara. Luego hemos creado una nueva instancia de foo.txt y hemos observado sus permisos.

Podemos ver que tanto el propietario como el grupo tienen permisos de lectura y escritura, mientras que los demás sólo tienen permisos de lectura. La razón por la que el mundo no tiene permisos de escritura es por el valor de la máscara. Repitamos nuestro ejemplo, esta vez estableciendo la máscara nosotros mismos:

[me@linuxbox ~]$ rm foo.txt
[me@linuxbox ~]$ umask 0000
[me@linuxbox ~]$ > foo.txt
[me@linuxbox ~]$ ls -l foo.txt
-rw-rw-rw- 1 me me 0 2008-03-06 14:58 foo.txt

Cuando establecemos la máscara como 0000 (en la práctica la desactivamos), podemos ver que el archivo ahora es editable por el mundo. Para entender cómo funciona, tenemos que mirar a los números octales de nuevo. Si tomamos la máscara y la expandimos a binario, y luego la comparamos con los atributos, podemos ver lo que sucede:

Permisos del archivo original
--- rw- rw- rw-
Máscara
000 000 000 010
Resultado
--- rw- rw- r--

Olvida por el momento los ceros a la izquierda (volveremos a ellos en un minuto) y observa que donde aparece el 1 en nuestra máscara, el atributo se elimina, en este caso, los permisos de escritura del mundo. Esto es lo que hace la máscara. Donde aparezca un 1 en el valor binario de la máscara, un atributo es desactivado. Si miramos el valor de máscara 0022, podemos ver lo que hace:

Permisos del archivo original
--- rw- rw- rw-
Máscara
000 000 010 010
Resultado
--- rw- r-- r--

De nuevo, donde aparece un 1 en el valor binario, el correspondiente atributo es desactivado. Prueba con algunos valores (prueba algunos sietes) para acostumbrarte a su funcionamiento. Cuando lo hayas hecho, recuerda limpiar:

[me@linuxbox ~]$ rm foo.txt; umask 0002

La mayoría de las veces no tendrás que cambiar la máscara; la que tu distribución trae por defecto irá bien. Sin embargo, en algunas situaciones de alta seguridad, querrás controlarla.

viernes, 11 de septiembre de 2015

Configurando los permisos de un archivo con la GUI

Ahora que hemos visto cómo se configuran los permisos en archivos y directorios, podemos entender mejor los diálogos de permisos en la GUI. Tanto en Nautilus (GNOME) como en Konqueror (KDE), al pulsar con el botón derecho en el icono de un archivo o un directorio se mostrará un cuadro de diálogo de propiedades. Aquí tenemos un ejemplo de KDE 3,5:

Figura 2: Cuadro de diálogo de 
propiedades de un archivo en KDE 3.5

Aquí podemos ver la configuración para el propietario, el grupo y el mundo. En KDE, pulsando el botón “Advanced Permissions” (Permisos avanzados), nos mostrará un nuevo diálogo que nos permitirá establecer cada uno de los atributos individualmente. ¡Otra victoria para la comprensión proporcionada por la línea de comandos!

miércoles, 9 de septiembre de 2015

¿Qué diablos es octal?

Octal (base 8), y su primo, hexadecimal (base 16) son sistemas numéricos que se utilizan a menudo para expresar números en ordenadores. Nosotros los humanos, debido al hecho de que (al menos la mayoría de nosotros) hemos nacido con diez dedos, contamos usando un sistema numérico en base 10. Los ordenadores, por otra parte, han nacido sólo con un dedo y por tanto todo lo cuentan en binario (base 2). Su sistema numérico sólo tiene dos números, 0 y 1. Así que contar en binario tiene esta pinta:

0, 1, 10, 11, 100, 101, 110, 111, 1000, 1001, 1010, 1011...

En octal, se cuenta con los números de cero al siete, así:

0, 1, 2, 3, 4, 5, 6, 7, 10, 11, 12, 13, 14, 15, 16, 17, 20, 21...

Para contar en hexadecimal se usan los números del cero al nueve más las letras "A" a "F":

0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F, 10, 11, 12, 13...

Mientras que podemos ver el sentido del binario (ya que los ordenadores sólo tienen un dedo), ¿para que sirven los octales y los hexadecimales? La respuesta tiene que ver con la conveniencia humana. Muchas veces, pequeños trozos de datos se representan en los ordenadores como patrones de bits. Tomemos como ejemplo un color RGB. En la mayoría de las pantallas de ordenador, cada pixel se compone de tres componentes de color: ocho bits para el rojo, ocho bits para el verde y ocho bits para el azul. Un bonito azul claro podría ser un número de 24 dígitos:

010000110110111111001101

¿Te gustaría leer y escribir este tipo de números todos los días? Creo que no. Aquí es donde otro sistema numérico nos puede ayudar. Cada dígito en hexadecimal representa cuatro dígitos en binario. En octal, cada dígito representa tres dígitos binarios. Así que nuestro azul claro de 24 dígitos podría reducirse a un número hexadecimal de seis dígitos:

436FCD

Dado que los dígitos en el número hexadecimal "se alinean" con los dígitos del número binario, podemos ver que el componente rojo de nuestro color es 43, el verde 6F, y el azul CD.

Hoy en día, la notación hexadecimal (a menudo llamada "hex") es más común que la octal, pero como veremos pronto, la capacidad de los octales para expresar tres bits de binario será muy útil...

lunes, 7 de septiembre de 2015

chmod – Cambiando el "modo" (los permisos) de un archivo

Para cambiar el modo (los permisos) de un archivo o un directorio, se utiliza el comando chmod.  Ten en cuenta que sólo el propietario del archivo o el superusuario pueden cambiar los permisos de un archivo o un directorio. chmod soporta dos formas distintas de especificar los cambios de permisos: representación en números octales o representación simbólica. Primero veremos la representación en números octales.

Con la notación octal usamos números octales para especificar el patrón de los permisos que queremos. Como cada dígito en un número octal representa tres dígitos binarios, esto coincide muy bien con la forma de almacenar los permisos de archivo. Esta tabla muestra lo que queremos decir:

Tabla 9-4: Permisos de archivo en Binario y Octal
Octal
Binario
Permisos de archivo
0
000
---
1
001
--x
2
010
-w-
3
011
-wx
4
100
r--
5
101
r-x
6
110
rw-
7
111
rwx

Usando tres dígitos octales, podemos establecer los permisos de archivo para el propietario, el grupo propietario y el mundo:

[me@linuxbox ~]$ > foo.txt
[me@linuxbox ~]$ ls -l foo.txt
-rw-rw-r-- 1 me me 0 2008-03-06 14:52 foo.txt
[me@linuxbox ~]$ chmod 600 foo.txt
[me@linuxbox ~]$ ls -l foo.txt
-rw------- 1 me me 0 2008-03-06 14:52 foo.txt

Pasándole el argumento “600”, podemos establecer los permisos del propietario para leer y escribir mientras borramos todos los permisos para el grupo propietario y el mundo. Aunque recordar la correspondencia entre octal y binario puede parecer un inconveniente, normalmente sólo tendrás que usar algunos muy comunes: 7(rwx), 6(rw-), 5(r-x), 4(r--), y 0(---).

chmod también soporta notación simbólica para especificar los permisos de archivo. La notación simbólica se divide en tres partes: a quién afecta el cambio, qué operaciónes se realizarán, y qué permisos se establecerán. Para especificar quién se ve afectado se usa una combinación de los caracteres “u”, “g”, “o” y “a” de la siguiente manera:

Tabla 9-5: Notación simbólica de chmod
Símbolo
Significado
u
Abreviatura de “usuario” pero significa el propietario del archivo o el directorio.
g
El grupo propietario.
o
Abreviatura de “otros”, pero se refiere al mundo.
a
Abreviatura de “all” (todos). Es la combinación de “u”, “g” y “o”

Si no se especifica ningún carácter, se asume “all”. La operación puede ser un “+” indicando que un permiso ha de ser añadido, un “-” indicando que un permiso ha de ser retirado, o un “=” indicando que sólo los permisos especificados deben ser aplicados y todos los demás han de ser eliminados.

Los permisos se especifican con los caracteres “r”, “w” y “x”. Aquí tenemos algunos ejemplos de la notación simbólica:

Tabla 9-6 Ejemplos de notación simbólica de chmod
Notación
Significado
u+x
Añade permisos de ejecución para el propietario
u-x
Elimina permisos de ejecución del propietario
+x
Añade permisos de ejecución para el propietario, el grupo y el mundo. Equivalente a a+x
o-rw
Elimina los permisos de lectura y escritura para cualquier persona, que no sea el propietario ni el grupo propietario.
go=rw
Configura al grupo propietario y a cualquier persona, que no sea el propietario, para que tengan permisos de lectura y escritura. Si el grupo propietario o el mundo previamente tenían permisos de ejecución, los elimina.
u+x, go=rx
Añade permisos de ejecución para el propietario y establece los permisos para el grupo y para otros de lectura y ejecución. Múltiples especificaciones pueden ser separadas por comas.

Algunos prefieren usar la notación octal, otros prefieren la simbólica. La notación simbólica ofrece la ventaja de permitirte establecer un atributo individual sin molestar a los otros.

Échale un vistazo a la man page de chmod para más detalles y una lista de opciones. Una advertencia con respecto a la opción “--recursive”: actúa tanto en archivos como en directorios, así que no es tan útil como uno esperaría, rara vez queremos que archivos y directorios tengan los mismos permisos.

viernes, 4 de septiembre de 2015

Leer, escribir y ejecutar

Los derechos de acceso a archivos y directorios se definen en términos de derechos de lectura, escritura y ejecución. Si vemos la salida del comando ls, podemos obtener alguna pista de cómo se implementan:

[me@linuxbox ~]$ > foo.txt
[me@linuxbox ~]$ ls -l foo.txt
-rw-rw-r-- 1 me me 0 2008-03-06 14:52 foo.txt

Los primeros diez caracteres de la lista son los atributos del archivo. El primero de estos caracteres es el tipo de archivo. Aquí tenemos los tipos de archivo que se ven más a menudo (hay otros, menos comunes):

Tabla 9-1: Tipos de archivo
Atributo Tipo de archivo
- Archivo normal
d Directorio
l Enlace simbólico. Fíjate que con los enlaces simbólicos, el resto de los atributos del archivo son siempre “rwxrwxrwx” y que son valores ficticios. Los atributos reales son los del archivo al que el enlace simbólico apunta.
c Archivo especial de caracteres. Este tipo de archivo se refiere a un dispositivo que trata los datos como una secuencia de bytes, como pueden ser un terminal o un modem.
b Archivo especial de bloques. Este tipo de archivo se refiere a un dispositivo que trata los datos en bloques, como pueden ser un disco duro o una unidad de CD.

Los nueve caracteres restantes de los atributos del archivo, se llaman file mode (modo de archivo), y representan los permisos de lectura, escritura y ejecución del propietario de archivo, del grupo propietario del archivo y del resto de usuarios:
Propietario
Grupo
Mundo
rwx
rwx
rwx

Cuando establecemos los atributos de modo r, w y x tienen el siguiente efecto sobre los archivos y directorios:

Tabla 9-2: Atributos de permisos
Atributo
Archivos
Directorios
r
Permite que un archivo sea abierto y leido.
Permite que el contenido del directorio sea listado si el atributo de ejecución también está configurado.
w
Permite que un archivo sea escrito o sobrescrito, sin embargo este atributo no permite renombrar o borrar los archivos. La capacidad de borrar o renombrar archivos viene determinada por los atributos del directorio.
Permite crear, borrar y renombrar archivos dentro de un directorio si el atributo de ejecución también está establecido.
x
Permite que un archivo sea tratado como un programa y ejecutarlo. Los archivos de programas escritos en lenguajes de script también deben ser configurados como legibles para ser ejecutados.
Permite entrar en el directorio, p.ej., cd directorio

Aquí tenemos algunos ejemplos de configuraciones de atributos de archivo:

Tabla 9-3: Ejemplos de atributos de permisos
Atributos de archivo
Significado
-rwx------
Un archivo normal que se puede leer, escribir y ejecutar por el propietario del archivo. Nadie más tiene acceso.
-rw-------
Un archivo normal que se puede leer y escribir por el propietario del archivo. Nadie más tiene acceso.
-rw-r--r--
Un archivo normal que se puede leer y escribir por el propietario del archivo. Los miembros del grupo propietario del archivo pueden leerlo. El archivo lo puede leer todo el mundo.
-rwxr-xr-x
Un archivo normal que lo puede leer, escribir y ejecutar el propietario del archivo. El archivo puede ser leído y ejecutado por todos los demás.
-rw-rw----
Un archivo normal que lo puede leer y escribir únicamente el propietario del archivo y los miembros del grupo propietario.
lrwxrwxrwx
Un enlace simbólico. Todos los enlaces simbólicos tienen permisos "ficticios". Los permisos reales se guardan en el archivo real al que apunta el enlace simbólico.
drwxrwx---
Un directorio. El propietario y los miembros del grupo propietario pueden entrar en el directorio y crear, renombrar y borrar archivos dentro del directorio.
drwxr-x---
Un directorio. El propietario puede entrar en el directorio y crear, renombrar y borrar archivos dentro del directorio. Los miembros del grupo  propietario pueden entrar en el directorio pero no pueden crear, borrar o renombrar archivos.

miércoles, 2 de septiembre de 2015

Propietarios, miembros del grupo, y todos los demás

Cuando estábamos explorando el sistema allá por el capítulo 3, pudimos encontrar un problema cuando intentábamos examinar un archivo como /etc/shadow:

[me@linuxbox ~]$ file /etc/shadow
/etc/shadow: regular file, no read permission
[me@linuxbox ~]$ less /etc/shadow
/etc/shadow: Permission denied

La razón de este mensaje de error es que, como usuarios normales, no tenemos permiso para leer este archivo.

En el modelo de seguridad de Unix, un usuario puede poseer archivos y directorios. Cuando un usuario posee un archivo o directorio, el usuario tiene control sobre su acceso. Los usuarios pueden, a su vez, pertenecer a un grupo que consiste en uno o más usuarios a los que se les da acceso, a archivos y directorios, por sus propietarios. Además de conceder acceso a un grupo, un propietario puede también conceder algún tipo de derechos de acceso a todo el mundo, a quienes en el lenguaje de Unix nos referimos como el mundo. Para encontrar información sobre tu identidad, usa el comando id:

[me@linuxbox ~]$ id
uid=500(me) gid=500(me) groups=500(me)

Veamos la salida. Cuando se crea una cuenta de usuario, al usuario se le asigna un número llamado ID de usuario o uid que es, por el bien de los humanos, asignado a un nombre de usuario. Al usuario se le asigna un ID de grupo primario o gid y puede pertenecer a grupos adicionales. El ejemplo anterior es de un sistema Fedora. En otros sistemas, como Ubuntu, la salida puede ser un poco diferente:

[me@linuxbox ~]$ id
uid=1000(me) gid=1000(me)
groups=4(adm),20(dialout),24(cdrom),25(floppy),29(audio),30(dip),44(video),46(plugdev),108(lpadmin),114(admin),1000(me)

Como podemos ver, los números uid y gid son diferentes. Esto simplemente es porque Fedora empieza numerando las cuentas de los usuarios normales desde el 500, mientras que Ubuntu empieza en el 1000. También podemos ver que el usuario de Ubuntu pertenece a muchos más grupos. Esto tiene que ver con la forma en que Ubuntu maneja los privilegios para los dispositivos y servicios del sistema.

Pero ¿de dónde viene esta información? Como tantas otras muchas cosas en Linux, de un par de archivos de texto. Las cuentas de usuario están definidas en el archivo /etc/passwd y los grupos están definidos en el archivo /etc/group. Cuando las cuentas y los grupos de usuarios son creados, estos archivos son modificados junto con el archivo /etc/shadow que guarda la información de las contraseñas de los usuarios. Para cada cuenta de usuario, el archivo /etc/passwd define el nombre de usuario (login), uid, gid, el nombre real de la cuenta, el directorio home y el shell de login. Si examinas el contenido de /etc/passwd y /etc/group, verás que además de las cuentas de los usuarios normales, hay cuentas para el superusuario (uid 0) y otros usuarios del sistema.

En el próximo capítulo, veremos procesos, y verás que algunos de esos otros "usuarios" están, de hecho, muy ocupados.

Mientras que muchos sistemas tipo Unix asignan los usuarios normales a un grupo común como “users”, la práctica moderna de Linux es crear un único grupo de un sólo miembro con el mismo nombre que el usuario. Esto hace más fácil asignar ciertos tipos de permisos.