DPD Dispositivos sistema herencia (2)

De Gleducar, http://www.gleducar.org.ar

Yes check.svg Esta página fue revisada y cumple los estándares de Gleduwiki.

Contenido

Permisos de archivos

Los permisos determinan quien puede acceder a los archivos y carpeta y que puede hacer con ellos dependiendo del tipo de acceso que tengan. Los primeros 10 caracteres de un listado ls -l de cualquier entidad se parecen a lo siguiente:

-rwxrwxrwx-

El primer carácter identifica en tipo de archivo o carpeta a la que hace referencia, y puede ser:

  • -, archivo standard
  • d, carpeta
  • b, grupo de recursos
  • c, recurso
  • l, link o enlace
  • p, tuberia

El resto de lo caracteres se dividen en 3, de la siguiente forma:

Permisos
rxw rxw rxw
Propietario Grupo Otros

Cuando un usuario intenta acceder a un archivo, el primer control confirma si es propietario. Si lo es, se le aplica el primer tipo de permisos. Si no lo es, el segundo control confirma si es un miembro del grupo propietario del archivo. Si es un miembro del grupo, se le aplica el tipo intermedio de permisos. Si no es propietario del archivo, y no es miembro del grupo propietario, se le aplica el tercer tipo de permisos.

Permisos standar

Los permisos que se pueden aplicar a los propietarios, a los grupos o a los otros son:

Funciones de los permisos
Opción Uso
r Permite la lectura del archivo. Si se aplica a una carpeta implica que se pueden ver todos sus archivos
w Permite que se pueda escribir el archivo. Si se aplica a una carpeta, se puede borrar, mover y editar los archivos
x Permite ejecutar un archivo si es un script o puede ser ejecutado por el sistema. Aplicado a una carpeta permite el acceso a la misma.
- Indica la ausencia del permiso. r-x, el usuario puede leer y ejecutar pero no escribir.

Los tipos de permisos pueden ser utilizados mediante números:

Permisos en forma numerica
Opción Valor numérico
r 4
w 2
x 1
- 0

Los valores numéricos hacen posibles dar varios cambios de permisos a la vez. Por ejemplo, si un usuario tiene permiso -rxw, en valor numérico esto significa 4(r)+2(w)+1(x).

Permisos
rxw r-x r--
4+2+1=7 4+1+0=5 4+0+0=4

Permiso final: 754

Los permisos por defecto para todos los nuevos archivos creados son 666 (rw-rw-rw-) y para las carpetas son 777(rwxrwxrwx). Este número puede ser modificado mediante la variable umask. La variable umask indica la cantidad sustraída al permiso por defecto hasta llegar a los permisos que se le aplicarán al usuario. Con un umask de 022, los permisos asignados a los nuevos archivos serán 644 (rw-r—r--) y a las carpetas 755 (rwxr-xr-x).

Resultado después de la sustracción del umask
Archivos Carpetas
666 -rw-rw-rw-
-022 ----w--w-
777 drwxrwxrwx
-022 ----w--w-
644 -rw-r--r-- 755 dwxr-xr-x

Cambiando los valores

Para cambiar los permisos de un archivo o una carpeta, se puede usar la utilidad chmod. Los argumentos pueden ser números o letras. Por ejemplo, para modificar los permisos de un archivo que permita a todos leer y escribir en él, se deberá entrar lo siguiente:

$ ls -l archivo
-rw-r—r— 1 root root 14 Sep 6 22:42 archivo
$ chmod 666 archivo
-rw-rw-rw- 1 root root 14 Sep 6 22:42 archivo

En formato simbólico, u significa usuario, g grupo y o es otro. Se puede elegir y añadir según los permisos existentes:

$ ls -l archivo
-rw-r—r— 1 root root 14 Sep 6 22:42 archivo
$ chmod go+w archivo
$ ls -l archivo
-rw-rw-rw- 1 root root 14 Sep 6 22:42 archivo

O también se pueden especificar los permisos directamente:

$ ls -l archivo
-rw-r—r— 1 root root 14 Sep 6 22:42 archivo
$ chmod ugo=rw archivo
$ ls -l archivo
-rw-rw-rw- 1 root root 14 Sep 6 22:42 archivo

Se puede utilizar el signo + para añadir a los permisos existentes y el - para borrarlos. El signo = ignora la existencia de permisos y fija el valor indicado. La opción -c indica a chmod que devuelva los nombres de los archivos que han cambiando, y la -f elimina la visualización por pantalla de los mensajes de error.

Permisos especiales

Pueden ser utilizados 3 tipos de permisos en determinadas circunstancias. Aparte de los simpre aplicables de lectura, escritura y ejecución, algunas veces es necesario algo más para un archivo o una carpeta. Estos permisos especiales son los 3 siguientes:

  • Asignar ID de usuario (set user ID) (SUID)
  • Asignar ID de grupo (set group ID) (SGID)
  • Sticky bit

SUID

La asignación de ID de usuario se aplica cuando se desea que un determinado usuario ejecute un programa que de otro modo no podría.

Por ejemplo, sólo el usuario root sería capaz de ejecutar la función funcion xyz (comenzar backups, restaurar el sistema, entrar en otros recursos, etc) a causa de las ramificaciones de seguridad, pero se necesita que los usuarios ejecuten un shell script para realizar esta acción, porque no se dispone del tiempo necesario para hacerlo personalmente.

Se puede crear este shell script como root y asignar el permiso SUID de modo que el usuario que ejecute el script sea root sólo dentro de ese script. Antes y después del manuscrito, es únicamente un usuario, pero durante la ejecucion del script es como si fuera root. El permiso numerico de SUID, 4000, es sumado al valor de otros permisos. Una vez aplicado este, cambia la x en el campo del ejecutable para el propietario de los permisos a una s:

$ ls -l archivo
$ chmod 4777 archivo

Recordar: El objetivo de la utilización de este permiso es que el proceso sea ejecutado por la persona que lo creó (root en este caso) y no por la persona que lo ejecuta. Sintaxis:

$ chmod u+s archivo

SGID

Similar en la naturaleza a SUID, el permiso de la identificación de grupo del sistema se aplica cuando es necesario que la persona que ejecuta el archivo sea un miembro del grupo que posee el archivo (y no el propietario). Esto cambia el x en el permiso del grupo a un s, y el valor numérico es 2000:

$ ls -l archivo
$ chmod 2777 archivo
$ ls -l archivo

La sintaxis del comando es:

chmod g+s archivo

Sticky Bit

Este permiso no trabaja como los otros permisos especiales. Con un valor numérico de 1000, sus operaciones difieren cuando están aplicadas a una carpeta o a un archivo. Cuando está aplicado a un directorio, evita que los usuarios supriman archivos de las carpetas que les conceden el permiso de escritura, a menos que sean el propietario del archivo. Por defecto, cualquier usuario que tenga permiso de escritura en una carpeta puede suprimir archivos dentro de esa carpeta, incluso si no tiene el permiso de escritura de ese archivo. Cuando se aplica sobre un archivo, el archivo se convierte en “sticky�? (bloqueado). La primera vez que se accede o se ejecuta el archivo y se carga en memoria, permanece cargado en memoria física (RAM) o espacio swap de modo que pueda funcionar más rápidamente que si se lee desde el disco. Si el archivo no es ejecutable, el último bit de permiso ( para otra categoria) se convierte en T. Si el archivo es un archivo ejecutable, o el permiso se aplica a una carpeta, el bit pasado se convierte en una t. Cuando se aplica el permiso chmod y las letras, aparece t de todos modos (sea archivo o carpeta).

Propiedad de los archivos

Permisos de usuarios y grupos

Los archivos y carpetas usan 3 tipos de permisos, (propietario, grupo y otros). Esto permite restringir el acceso a los archivos dependiendo del usuario y grupo que los use. Los sistemas GNU/Linux disponen de varias herramientas que permiten cambiar los permisos de acceso al archivo.

chown

El comando chown se usa para cambiar el propietario de los archivos o las carpetas, se usa con la siguiente sintaxis:

chown cambia el propietario de cada archivo, usuario o grupo, si sólo se da un nombre de usuario (o UID numérico), entonces ese usuario se convierte en el propietario de cada archivo dado, y el grupo al que pertenece el archivo no cambia. Si al nombre de usuario sigue un signo de dos puntos y un nombre de grupo (o GID numérico), sin espacios entre ellos, entonces también se cambia el grupo al que pertenece cada archivo.

Opciones frecuentemente utilizadas por chown
Opción Uso
-c Muestra un mensaje donde menciona solamente aquellos archivos cuyo propietario cambia realmente.
-f No muestra mensajes de error sobre archivos cuyo propietario no puede cambiarse.
-R Cambia recursivamente el propietario de directorios y sus contenidos.
-v Describe la acción efectuada (o no) para cada archivo de forma interactiva.

Ejemplo:

$ ls -l archivo
-rw-rw-rw- 1 root root 14 Sep 6 22:42 archivo
$ chown usuario archivo
$ ls -l archivo
-rw-rw-rw- 1 usuario root 14 Sep 6 22:42 archivo

chgrp

El comando chgrp se usa para cambiar el grupo propietario de un archivo o una carpeta. El comando busca en el archivo /etc/group para confirmar la existencia del grupo especificado antes de cambiar los permisos. Las opciones más comunes se pueden ver en la tabla 6-2. El comando se usa con la siguiente sintaxis:

Opciones frecuentemente utilizadas por chgrp
Opción Uso
-c Muestra un mensaje donde menciona solamente aquellos archivos cuyo propietario cambia realmente.
-h Actúa sobre enlaces simbólicos propiamente en vez de sobre lo que apunten. Disponible solamente si el sistema proporciona la primitiva lchown.
-f No muestra mensajes de error sobre archivos cuyo grupo no pueda cambiarse.
-R Cambia recursivamente el grupo al que pertenecen directorios y sus contenidos. (Y continúa incluso si se encuentran errores.)
-v Describe la acción efectuada (o no) para cada archivo de forma interactiva.


El usuario root puede efectuar los cambios al grupo que desee; para que un usuario pueda hacerlo, debe ser el propietario del archivo y pertenecer al grupo donde está efectuando el cambio.

Si el usuario root cambia el propietario y el grupo al mismo tiempo, se puede utilizar chown y separar los dos valores por : (dos puntos):

$ ls -l archivo
-rw-rw-rw- 1 usuario root 14 Sep 6 22:42 archivo
$ chown usuario2:grupo archivo
$ ls -l archivo
-rw-rw-rw- 1 usuario2 grupo 14 Sep 6 22:42 archivo
Si el usuario o el grupo no existen, la acción del comando falla

Crear y cambiar enlaces duros y simbólicos

A veces es útil o necesario tener un mismo archivo en varias localizaciones del sistema de archivos, por ejemplo, para acceder con diferentes permisos sobre un archivo dependiendo de su localización. En Linux existe una solución para eso: los enlaces o links.

Estos son de dos tipos:

  1. Los Duros o Hard Links, y
  2. Los Suaves, Enlaces Simbólicos, Symbolic Links o Symlinks.

Los Hard Links

Estos enlaces comparten el inodo del archivo original. De hecho, un hard link es indistinguible del original y por eso los cambios en el link afectan al archivo original, excepto en el borrado. Borrar el link no elimina al original ni a la inversa. Este tipo de enlace conserva los permisos del original y marcas de tiempo. Por contra, no se pueden usar para hacer enlaces a directorios ni pueden extenderse a otros sistemas de archivos. Su sintaxis es como sigue:

ln /ruta/completa/archivo  nombre_enlace

Los Symlinks

Estos enlaces si que pueden extenderse a otros sistemas de archivos. También pueden hacer referencia a directorios, de hecho, pueden referenciar hasta archivos inexistentes. La lectura y escritura, así como la copia del enlace, afectan al archivo objetivo, mientras que el borrado afecta al propio enlace. Borrar el archivo objetivo tampoco elimina el enlace automáticamente. Su sintaxis es como sigue:

ln -s /ruta/completa/archivo nombre_enlace

Ubicación correcta de los archivos del sistema

Otra de las capacidades necesarias en un sistema Linux es la localización de archivos. Afortunadamente, Linux dispone de una gran variedad de métodos para buscar archivos. Los comandos find, locate, which y where son muy útiles para estas tareas.

find

La utilidad find se utiliza para buscar archivos. Esta herramienta comienza buscando por un directorio especificado y continúa por todos los subdirectorios que están bajo el mismo, en busca de nombres de archivos que coincidan con el patrón especificado. Cuando no se especifica ninguna carpeta, la utilidad find, comienza por la carpeta actual (pwd) y continúa por todos las subcarpetas dentro de éste. La sintaxis correcta del comando es la siguiente:

$ find  /directorio expresión

Las búsquedas por medio de la utilidad find pueden ser lentas y utilizar muchos recursos del sistema, dependiendo de la búsqueda requerida. La tabla 8-1 muestra algunas de las opciones que se pueden utilizar al usar el comando find. Algunos ejemplos serían:

$ find /home/usuario -name archivo
$ find /home/usuario -user root
Opciones frecuentemente utilizadas por find
Opción Uso
-atime Búsqueda basada en el número de días desde el último acceso.
-ctime Búsqueda basada en el número de días desde el último cambio en la entrada del directorio.
-group Búsqueda de archivos pertenecientes al grupo especificado.
-newer Búsqueda de archivos más recientes que el archivo especificado.
-name Búsqueda de archivos cuyo nombre coincida con la cadena especificada.
-user Búsqueda de archivos pertenecientes al usuario especificado.

locate

El comando locate proporciona un método seguro para indexar y buscar rápidamente archivos en el sistema. Utiliza codificación incremental para comprimir su base de datos y hacer las búsquedas más veloces, pero también almacena los permisos y propietario del archivo, de modo que los usuarios que no puedan ver esos archivos, no podrán acceder a ellos. El comando locate utiliza por defecto la base de datos slocate para encontrar los archivos. Es posible especificar otra base de datos para ser usada. La sintaxis del comando es la siguiente:

$ locate -opciones argumentos

La base de datos se actualiza por medio del comando updatedb, sin argumentos. Sólo el usuario root está autorizado a utilizar este comando en el sistema.

Opciones frecuentemente utilizadas por locate
Opción Uso
-u Comienza por el directorio raíz / cuando se crea la base de datos slocate.
-U /PATH Comienza por el directorio especificado cuando se crea la base de datos slocate.
'-e DIR Excluye los directorios especificados cuando se crea la base de datos slocate.
-c Analiza el archivo /etc/updatedb.conf cuando se crea la base de datos slocate.
-i Busca sin tener en cuenta mayúsculas y minúsculas.
-o FILE Especifica el archivo de salida a crear.
-d PATH Especifica la ruta a las bases de datos a buscar.

wich

El comando which toma uno o más argumentos. Para cada uno de sus argumentos, muestra por la salida estándar (stdout) la ruta completa a los ejecutables que se pueden ejecutar cuando dicho argumento se escribe en la línea de comandos. Ésto lo hace buscando archivos ejecutables o scripts en los directorios especificados en la variable de entorno PATH, utilizando el mismo algoritmo que bash.

Esta utilidad nos permite ver la ruta completa a un comando antes de ejecutarlo. Puede ser útil para comprobar que estamos haciendo uso del comando que queremos ejecutar. La utilidad utiliza la siguiente sintaxis:

which -opciones nombre_de_programa 

whereis

El comando whereis busca un archivo específico dentro de archivos fuente, binarios y páginas del manual. Los nombres especificados, antes de ser buscados, se separan de la definición de la ruta y de las extensiones del tipo .ext (por ejemplo .c). Finalmente, la utilidad whereis trata de encontrar los programas deseados dentro de las localizaciones de código. La tabla 8-3 resume las opciones utilizadas con whereis:

Opciones frecuentemente utilizadas por whereis
Opción Uso
-b Búsqueda de binarios.
-m Búsqueda de entradas manuales.
-s Búsqueda de fuentes.
-u Búsqueda de entradas inusuales que no tienen una entrada por cada tipo.

El siguiente es un ejemplo del uso de whereis para localizar información sobre el comando ls:

$ whereis ls
$ ls: /bin/ls  /usr/man/man1/ls.l.gz

Bibliografía



Volver a Contenidos de la capacitación técnica 2006
Copyright © 2002-2010 Asociación Civil Gleducar
Todo los contenidos de este sitio se encuentran bajo una licencia libre del tipo Copyleft
Este sitio ha sido desarrollado usando Software Libre y respeta los estándares web.
Además ha sido diseñado para verse correctamente usando cualquier navegador, en cualquier resolución de pantalla.