DPD Dispositivos sistema herencia (2)
De Gleducar, http://www.gleducar.org.ar
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:
| 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:
| 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:
| 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).
| 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).
| 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.
| 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:
| 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:
- Los Duros o Hard Links, y
- 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
| 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.
| 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:
| 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
- Unix Reviews
- Página LPI
- Apuntes IBM
- Manuales GPL
- Página de documentación libre de la UOC
- Documentación de capacitación de la empresa XTech