Guía avanzada del usuario

Seguridad de archivos y directorios


Nota -

Lea esta sección atentamente. Una buena comprensión de los permisos de archivo siempre es importante para el trabajo cotidiano.


Los permisos de archivo protegen a los archivos y los directorios para que no se puedan leer ni escribir sin autorización. A menudo tendrá archivos que quiera que otras personas puedan leer pero no cambiar. En otras ocasiones, deberá compartir archivos ejecutables (programas). Los permisos de archivo le permiten controlar el acceso a sus archivos.

Estos son los tipos básicos de acceso de archivos y directorios:

Existen tres categorías de usuarios para los que puede establecer permisos:

Mostrar permisos y estado (ls -l)

Ya ha utilizado el comando ls para listar archivos. El comando ls dispone de muchas opciones. .Use la opción -l para mostrar una lista con formato largo. Los archivos y directorios se listan por orden alfabético. La Figura 3-2 ejemplifica este método para mostrar archivos:

Figura 3-2 Mostrar permisos y estado

Graphic

El primer carácter de la línea indica el tipo de archivo. Un guión (-) es un archivo corriente; una d indica un directorio, y otros caracteres pueden indicar tipos de archivos especiales.

Los nueve caracteres siguientes indican los permisos del archivo o el directorio. Dichos caracteres están formados por tres grupos de tres elementos, que indican los permisos del propietario del archivo, del grupo de dicho propietario y del mundo respectivamente. Los permisos para emptyfile son rw-r--r--, que indican que el propietario del archivo puede leerlo y escribir en él, que todos pueden leerlo y nadie puede ejecutarlo. Los permisos del directorio veggies2 son rwxr-xr-x, que indican que todos tienen permiso para leerlo y ejecutarlo, pero sólo su propietario puede escribir en él.

Además de los permisos de archivo, la pantalla muestra la siguiente información:

Use el comando cd para desplazarse al directorio de usuario y pruebe el comando ls -l. Por supuesto, el resultado que obtenga será diferente al del ejemplo.

Ahora intente escribir un comando como éste:

$ ls -l nombre_de_directorio

donde nombre_de_directorio es el nombre de un directorio existente en el sistema de archivos. Cuando le pone nombre a un directorio, el comando ls -l imprime información relativa a todos los archivos y directorios (si los hay) de dicho directorio.

Listar archivos "ocultos" (ls -a)

Hay algunos archivos que no son listados por el comando ls. Dichos archivos comienzan por el carácter. (llamado "punto"), como por ejemplo.cshrc,.login o.profile. Use el comando ls -a para listar los citados archivos punto:

$ ls -a
.
..
.cshrc
.login
.profile
emptyfile

Observe que los archivos que comienzan por. son listados antes que los demás. Hay dos archivos especiales en este listado: el archivo. es la referencia del directorio en uso, y el archivo.. es la referencia del directorio maestro.

Hablando en general, los archivos que comienzan por. son usados por utilidades del sistema y el usuario normalmente no los modifica. Existen algunas excepciones al respecto.

Cambiar permisos (chmod)

Use el comando chmod para cambiar los permisos de un archivo o un directorio. El usuario debe ser el propietario del archivo o del directorio, o tener acceso al directorio raíz para cambiar sus permisos. La forma general del comando chmod es:

chmod permisos nombre

donde permisos indica los permisos que se quieren cambiar y nombre es el nombre del archivo o directorio afectado.

Los permisos pueden especificarse de varias formas. A continuación se cita uno de los métodos más sencillos:

  1. Usar una o más letras para indicar los usuarios implicados:

    • u (para el usuario)

  2. g (para el grupo)

  3. o (para otros)

  4. a (all; para todas las categorías anteriores)

  5. Indicar si los permisos se van a agregar (+) o eliminar (-).

  6. Utilizar una o más letras para indicar los permisos:

    • r (read; de lectura)

    • w (write; de escritura)

    • x (execute; de ejecución)

En el ejemplo siguiente, se agrega un permiso de lectura al directorio carrots para los usuarios que pertenezcan al mismo grupo (de esta forma, permisos es g+w y nombre es carrots):

$ ls -l carrots
drwxr-xr-x  3 user2           1024 Feb 10 11:15 carrots
$ chmod g+w carrots
$ ls -l carrots
drwxrwxr-x  3 user2           1024 Feb 10 11:15 carrots
$

Como puede ver, el guión (-) del conjunto de caracteres de grupo se cambia por una w como resultado del uso del comando.

Para que otros usuarios que no pertenezcan al grupo no puedan leer ni ejecutar este mismo directorio (permisos es o-rx), tendría que escribir lo siguiente:

$ ls -l carrots
drwxrwxr-x  3 user2           1024 Feb 10 11:15 carrots
$ chmod o-rx carrots
$ ls -l carrots
drwxrwx---  3 user2           1024 Feb 10 11:15 carrots
$

Ahora, la r (de read) y la x (de execute) del conjunto de caracteres correspondiente a otros usuarios se cambian por guiones (-).

Cuando cree un archivo o un directorio nuevo, el sistema le asignaráautomáticamente permisos.

En general, la configuración predeterminada para los archivos nuevos es:

-rw-r--r--

y para los directorios nuevos es:

drwxr-xr-x

Por consiguiente, para hacer ejecutable un archivo nuevo como turnip su propietario (user2) deberá introducir lo siguiente:

$ ls -l turnip
-rw-r--r--  3 user2           1024 Feb 10 12:27 turnip
$ chmod u+x turnip
$ ls -l turnip
-rwxr--r--  3 user2           1024 Feb 10 12:27 turnip
$

Si quiere afectar a las tres categorías de usuarios a la vez, use la opción a. Si quiere hacer que un archivo nuevo como garlic sea ejecutable por todos, tendrá que introducir lo siguiente:

$ ls -l garlic
-rw-r--r--  3 user2           1024 Feb 10 11:31 garlic
$ chmod a+x garlic
$ ls -l garlic
-rwxr-xr-x  3 user2           1024 Feb 10 11:31 garlic
$

Como resultado de esto, el indicador x aparecerá en las tres categorías.

También puede cambiar los permisos de grupos de archivos o directorios utilizando carácter comodín *. Por ejemplo, para cambiar los permisos de todos los archivos del directorio actual veggies para que sólo el usuario pueda escribir en ellos, deberá escribir lo siguiente:

$ pwd
/home/user2/veggies
$ ls -l
-rwxrwxrwx  3 user2          21032 Feb 12 10:31 beats
-rwxrwxrwx  2 user2             68 Feb 10 11:09 corn
-rwxrwxrwx  3 user2          12675 Feb 08 09:31 garlic
-rwxrwxrwx  1 user2           1024 Feb 14 16:38 onions
$ chmod go-w *
$ ls -l
-rwxr-xr-x  3 user2          21032 Feb 12 10:31 beats
-rwxr-xr-x  2 user2             68 Feb 10 11:09 corn
-rwxr-xr-x  3 user2          12675 Feb 08 09:31 garlic
-rwxr-xr-x  1 user2           1024 Feb 14 16:38 onions
$

En este ejemplo se incluye el comando pwd para mostrar que el directorio en el que realiza la operación chmod debe ser el actual.

Establecer permisos absolutos

Hasta el momento, en esta presentación de los permisos sólo se ha incluido el comando chmod para cambiar permisos relativos a la configuración actual. Si utiliza una forma diferente del comando chmod, que aplica códigos numéricos para especificar permisos, puede establecer el permiso de un archivo o un directorio de manera absoluta.

La sintaxis de este modo de utilizar el comando chmod es:

chmod numcode name

donde numcode es el código numérico y name es el nombre del archivo o del directorio al que está cambiando los permisos.

El código numérico completo consta de tres números. Se usa un número para cada una de las tres categorías: usuario, grupo y otros. Por ejemplo, el siguiente comando establece permisos absolutos de lectura, escritura y ejecución para el usuario y el grupo, y sólo permiso de ejecución para otros usuarios:

$ chmod 771 garlic

La Tabla 3-1 ilustra cómo el código 771 representa los permisos asignados a garlic.

Tabla 3-1 Permisos de garlic

Permiso 

Usuario 

Grupo 

Otros 

Lectura 

Escritura 

Ejecución 

Total 

Cada columna de la Tabla 3-1 representa una de las categorías: usuario, grupo y otros. Para establecer permisos de lectura se agrega un 4 en la columna apropiada, para establecer permisos de escritura un 2 y para permisos de ejecución un 1. El total de las tres columnas, en la última hilera de la tabla, es el código numérico completo.

A continuación se muestra otro ejemplo del uso de este método de establecer permisos absolutos, incluyendo el comando ls -l para demostrar el resultado:

$ ls -l onion
-rw-r--r--  3 user2           1024 Feb 10 11:46 onion
$ chmod 755 onion
$ ls -l onion
-rwxr-xr-x  3 user2           1024 Feb 10 11:48 onion
$

Se establecen los permisos del archivo onion para que el usuario pueda leerlo, escribir en él o ejecutarlo; los miembros del grupo puedan leerlo y ejecutarlo y otros usuarios puedan también leerlo y ejecutarlo. La Tabla 3-2 muestra el desglose de los códigos numéricos utilizados para establecer los permisos de onion.

Tabla 3-2 Permisos de onion

Permiso 

Usuario 

Grupo 

Otros 

Lectura 

Escritura 

Ejecución 

Total 

Por supuesto, para conceder permisos de lectura, escritura y ejecución al propio usuario, a su grupo o a otros usuarios respecto al archivo cabbage, escribiría lo siguiente:

$ ls -l cabbage
-rw-r--r--  3 user2           1024 Feb 10 11:51 cabbage
$ chmod 777 cabbage
$ ls -l cabbage
-rwxrwxrwx  3 user2           1024 Feb 10 11:53 cabbage
$

La Tabla 3-3 muestra el desglose de este ejemplo.

Tabla 3-3 Permisos de cabbage

Permiso 

Usuario 

Grupo 

Otros 

Lectura 

Escritura 

Ejecución 

Total 

El código numérico 777 representa el nivel de permisos máximo que puede conceder.

Se puede utilizar el carácter comodín * para establecer permisos absolutos para todos los archivos del directorio, del mismo modo que se cambian los permisos relativos. Por ejemplo, para establecer permisos absolutos de todos los archivos del directorio veggies de modo que el usuario pueda leer, escribir y ejecutar dichos permisos, su grupo pueda leerlos y ejecutarlos, y los demás usuarios puedan sólo ejecutarlos, tendría que escribir lo siguiente:

$ pwd
/home/user2/veggies
$ ls -l
-rwxrwxrwx  3 user2          21032 Feb 12 10:31 beats
-rwxrwxrwx  2 user2             68 Feb 10 11:09 corn
-rwxrwxrwx  3 user2          12675 Feb 08 09:31 garlic
-rwxrwxrwx  1 user2           1024 Feb 14 16:38 onions
$ chmod 751 *
$ ls -l
-rwxr-x--x  3 user2          21032 Feb 12 10:31 beats
-rwxr-x--x  2 user2             68 Feb 10 11:09 corn
-rwxr-x--x  3 user2          12675 Feb 08 09:31 garlic
-rwxr-x--x  1 user2           1024 Feb 14 16:38 onions
$

En este ejemplo se incluye el comando pwd para ilustrar que el directorio en el que realiza esta operación debe ser el directorio actual. El comando ls -l se muestra sólo para ilustrar los cambios que han sufrido los permisos. Cuando se establecen permisos absolutos no es necesario saber qué permisos están en activo.

Si desea más información acerca del comando chmod(1), consulte man Pages(1): User Commands.