Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Tópico Cubierto: Indica, según el programa de certificación LPI, qué tópico le corresponde a este tema.
Linux asocia cada archivo con un número de propiedades por seguridad y otros razones. Un grupo de propiedades,
conocidas como permisos, son atributos especiales que controlan la capacidad de los usuarios para realizar varias
operaciones sobre ellos.
Unix, y los sistemas estilo Unix tales como Linux, son inherentemente sistemas operativos multiusuarios, y tienen
la necesidad de proporcionar mejor control, para que un usuario malicioso no pueda interferir con otros archivos de
usuarios. Por ejemplo, un usuario puede tener información sensible que otro usuario puede querer acceder. Sin
permisos de archivos, el otro usuario puede ser capaz de acceder a ellos. Pero con los permisos debidamente
configurados, el usuario no puede leer el archivo.
Cada archivo, directorio, o dispositivo tiene un grupo de permisos asociados con él. Estos permisos son visibles con
el comando ls y la opción -l , por ejemplo:
# ls -l
-rw-r–r– 1 root root 1059 Nov 18 13:23 /etc/passwd
-rw-r--r--
En cada bloque de tres caracteres, los caracteres r, w, y x significan que el archivo puede ser leído (Read),
escrito/modificado (Write), o ejecutado (eXecute). Un guión significa que el permiso no está puesto (por ejemplo,
arriba, el archivo test.txt se puede leer y modificar por el propietario, pero no se puede ejecutar). Así, por ejemplo
r-x significa que los permisos de lectura y ejecución están puestos, pero no el de escritura.
Como regla, es más fácil utilizar la sigla U.G.O (Usuarios, Grupos y Otros), a cada grupo de tres caracteres le
pertenecen los permisos correspondientes.
Cuando hablamos de otros es todo aquel que no sea el usuario propietario, ni se encuentre en el grupo definido del
archivo.
De esta forma, estamos viendo los atributos generales que posee un inodo, que es el objeto que representa los datos
dentro del sistema de archivos.
Los componentes informativos de un fichero están compuestos por un campo y tres secciones, que son las
siguientes:
Comando chmod
Muchos permisos se ponen automáticamente cuando se crea un archivo. Estos permisos están basados en el
usuario, las preferencias administrativas y los datos.
chmod ( change mode ) permite cambiar los permisos de acceso de un archivo o directorio.
Se pueden utilizar muchas opciones con el comando chmod. Las utilizadas más frecuentemente son los siguientes:
-v Lista los archivos y directorios a los que se les va aplicando el comando, a medida que el mismo se ejecuta.
Cambiar permisos
A cada archivo se le asigna automáticamente un conjunto de permisos, que se puede definir con el comando
umask. Para cambiar los permisos predeterminados, se usa el comando chmod, que modifica los permisos de
lectura, escritura, y ejecución para el usuario, grupo y otros.
La forma que tenemos de poder cambiar los permisos son con letras o números.
Con letras podemos hacerlo utilizando u, g, o, a (usuario, grupo, otros, todos los permisos)
Ejemplo:
Defino lectura y escritura para el usuario para el directorio etc de manera recursiva.
chmod -R u=rw etc
De esta forma, lo que podemos hacer es + agregar un permiso, - quitar un permiso o = igualar un permiso a todos
esos valores.
También contamos con la manera numérica para poder definir los permisos.
Para definir los permisos de manera numérica a un archivo o directorio hay que ingresar tres números, el primero
será para los permisos de Usuario, el segundo para el Grupo y el tercero para Otros.
Cuando se quiere definir más de un permiso lo que se hace es combinar los valores
Definir todo para el usuario, lectura y ejecución para el grupo y lectura para otros
Comando chown
El comando chown cambia el propietario de cada archivo, usuario o grupo, pero sólo si se le especifica 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, no cambia. Si al nombre de usuario lo 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. La sintaxis
básica de esta utilidad es la siguiente:
Se pueden utilizar opciones con el comando chown. Las utilizadas más frecuentemente son las que se muestran en
la siguiente tabla:
Opciones Descripción
-c Muestra un mensaje donde menciona solamente aquellos ficheros cuyo propietario cambia realmente.
-f No muestra mensajes de error sobre ficheros cambiarse.
-R Cambia recursivamente el propietario de directorios y sus contenidos.
-v Describe la acción efectuada (o no) para cada fichero de forma interactiva.
Ejemplo
Asignar el propietario educacionit al directorio /directorio1 de manera recursiva (a todo su contenido)
Comando chgrp
El comando chgrp se usa para cambiar solamente el grupo propietario de un archivo o directorio. El comando busca
en el fichero /etc/group para confirmar la existencia del grupo especificado antes de cambiar los permisos. La
sintaxis básica de esta utilidad es la siguiente:
Se pueden utilizar opciones con el comando chgrp. Las utilizadas más frecuentemente son las que se muestran en
la siguiente tabla:
Opciones Descripción
-c Muestra un mensaje donde menciona solamente aquellos ficheros 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 ficheros 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 fichero 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.
Comando umask
Algunos ejemplos:
[restauracion@/home/crond1 $] umask -p
umask 0002
[restauracion@/home/crond1 $] umask -S
u=rwx,g=rwx,o=rx
El umask es la inversa del chmod. En el caso de umask el valor 022 es el equivalente a 755 en chmod. El umask lo
podemos calcular como la cantidad de números que faltan para llegar a 7.
En el caso de definir un umask 000 al crear un archivo el permiso máximo chmod será 666, en cambio para un
directorio será 777.
En el resultado del comando se ven cuatro cifras. La primera es la que va a definir el SUID, SGID o Stickybit.
Permisos Especiales
Permisos adicionales
Los sistemas UNIX emplean, típicamente, tres permisos o modos adicionales. Estos permisos especiales se asignan
a archivos o directorios en conjunto, no a cada clase de forma separada (como sucedía con los permisos básicos).
Estos tres permisos (especificables de forma independiente), un bit por cada uno de ellos, permiten 8
combinaciones posibles que se expresan con un dígito en base 8 (del 0 al 7, uno por cada combinación posible) que
se antepone al modo de permisos. Así, el modo se ampliaría ahora del 0000 al 7777.
Pueden ser utilizados 3 tipos de permisos en determinadas circunstancias. Aparte de los siempre aplicables de
lectura, escritura y ejecución, algunas veces es necesario algo más para un archivo o directorio. Estos permisos
especiales son los 3 siguientes:
SUID
Permiso set user ID, setuid o SUID: cuando un archivo tiene este permiso asignado y es ejecutado, el proceso
resultante asumirá el ID de usuario efectivo del propietario del archivo. El ejemplo típico es el cambio de una
clave de usuario: ningún usuario debería poder modificar /etc/shadow directamente. La única forma de poder
modificarlo debería ser a través del comando correspondiente, que necesariamente tendrá que tener asignado el
setuid. Es decir, el comando /usr/bin/passwd ejecutado por un usuario se ejecutará como si lo hubiese invocado
el root, de manera de poder modificar /etc/shadow.
Ejemplo:
Se puede ver que en los permisos del usuario aparece una “s” en vez de una “x”
# ls -l /usr/bin/passwd
Para ver todos los archivos que hay con este permiso en el sistema:
Permiso set group ID, setgid o SGID: cuando un archivo que tiene este permiso asignado se ejecuta, el proceso
resultante asumirá el ID de grupo efectivo definido en el archivo. Cuando el setgid le es asignado a un directorio,
archivos nuevos y directorios creados debajo de ese directorio heredarán el grupo de ese directorio, a diferencia del
comportamiento por defecto, que es usar el grupo primario del usuario efectivo al asignar el grupo de archivos
nuevos y directorios.
Ejemplo:
$ ls -ld /test
drwxr-sr-x 241 educacionit educacionit 4096 Sep 12 19:29 /test
$ sudo mkdir /test/prueba
$ ls -ld /test
Ver todos los archivos que hay con ese permiso en el sistema:
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 un directorio o a un archivo. Cuando está aplicado a un directorio, evita que los
usuarios borren 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 un directorio puede borrar archivos
dentro de ese directorio, incluso si no tiene el permiso de escritura de ese archivo.
Hoy en día con las técnicas actuales de administración de memoria ya quedó en desuso. Cuando se aplicaba sobre
un archivo, el archivo se convertía en “sticky” (bloqueado). La primera vez que se accedía o se ejecuta el archivo y
se carga en memoria, permanecía cargado en memoria de modo que pudiera iniciar más rápidamente. Si el archivo
no es ejecutable, el último bit de permiso se convierte en “T”. Si el archivo es un fichero ejecutable, o el permiso se
aplica a un directorio, 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 directorio).
El directorio /tmp cuenta con este permiso activo, porque es un directorio en el que todos los usuarios tienen
permiso de escritura, pero nadie podrá borrar ningún archivo que no le pertenezca.
Ejemplo:
Este permiso se puede setear con
$ ls -ld /tmp
Ver todos los archivos que hay con ese permiso en el sistema:
Listando Atributos
Comando lsattr
Atributos de archivos
En los sistemas ext2/3/4 los archivos poseen atributos, estos se pueden hacer visibles con el comando lsattr
El archivo print2.pdf posee el atributo de inmutabilidad “i”. Los demás guiones indican atributos deshabilitados.
Los atributos son los siguientes:
Se puede cambiar el estado de un atributo con el comando chattr; el siguiente ejemplo muestra la eliminación del
atributo “i”:
Estableciendo Reglas
El comando setfacl sirve para definir el acceso de usuarios y grupos adicionales a uno más directorios y/o archivos.
El comando getfacl permite ver los permisos agregados.
Agregar al usuario matias con permisos de lectura y ejecución sobre el archivo test.sh
Libros:
LPI Linux Certification in a Nutshell, Third Edition, June 2010 —> Capitulo 7
LPIC-1: Linux Professional Institute Certification Study Guide: (Exams 101 and 102), 2nd Edition, February
2009 —> Capítulo 4
Paginas:
LinuxParaTodos
Permisos
Tópico Cubierto: Indica, según el programa de certificación LPI, qué tópico le corresponde a este tema.
Tipos de redirecciones
La salida estándar es la salida normal de un comando. De manera predeterminada esta salida se muestra en la
terminal del usuario.
[rino@restauracion scripts]$ ls
test educacionit sakis3g
117-101.pdf file scritps
117-101.txt filescripts ssh2
agregarurl filescripts~ test.html
La salida de un comando se puede redireccionar a un archivo con la ayuda del signo mayor “>” como se ve en el
siguiente ejemplo:
Esto generará un archivo llamado salida.txt el cual contendrá el resultado del comando ls. Para verificarlo se puede
utilizar el comando cat salida.txt
Si el archivo salida.txt existiera, el contenido será sobreescrito con el resultado de la redirección.
Para poder agregar contenido al final del archivo, sin sobreescribir el contenido existente, se puede utilizar doble
signo mayor “>>” como se ve en el ejemplo:
[rino@restauracion testing]$ ls -z
ls: invalid option -- z
Try `ls --help' for more information.
Al ejecutar el comando ls con una opción incorrecta, el error se muestra en pantalla de manera normal. En este caso
va a cambiar el tratamiento para poder redirigir el resultado a un archivo.
La salida de error de un comando se puede redireccionar a un archivo con un dos y signo mayor “2>” como se ve
en el siguiente ejemplo:
Al igual que con la salida estándar, en caso de que el archivo error.txt no exista lo creará, y en caso de existir lo
sobreescribirá. Para mantener el contenido sin sobreescribirlo se utiliza “2>>”
Con esto se puede diferenciar en distintos archivos ambas salidas de un mismo comando:
En este ejemplo el error mostrado por el archivo que no existe será guardado en error.txt mientras que el resultado
del asterisco se guardará en salida.txt
En este caso lo que se hace es redireccionar la salida a ambos.txt luego con el 2>&1 se está redirigiendo el
resultado del STDERR (que tiene asociado el número 2) al STDOUT (que tiene asociado el número 1). Es
importante recordar el orden en el que se redirige el contenido. Al final se agrega la redirección de STDERR a
STDOUT.
Al ejecutar el comando sort < desordenado.txt pasa el contenido del archivo desordenado.txt al comando sort, el
cual mostrará el resultado a través del STDOUT.
De esta manera el resultado ordenado por el comando sort es guardado en el archivo ordenado.txt
Tuberías
Las tuberías permiten redireccionar la salida estándar de un comando hacia la entrada de otro, pudiendo dos o más
comandos.
Ejemplos Sencillos
[rino@restauracion testing]$ ls | wc
12 20 93
En este ejemplo se pasa el resultado del comando ls al comando wc el cual muestra la cantidad de líneas, palabras y
letras.
Otro ejemplo:
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
(salida recortada...)
backup:x:34:34:backup:/var/backups:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
brasil:x:1001:1001:brasil,,,:/home/brasil:/bin/bash
clamav:x:111:124::/var/lib/clamav:/bin/false
(salida cortada...)
En este caso el contenido del archivo passwd es pasado al sort, el cual lo ordena alfabéticamente, por último pasa al
comando more que pondrá pausa para poder paginar el resultado.
Usando tee
El comando tee lee desde el STDIN, escribe en el STDOUT y al mismo tiempo en uno o más archivo.
En este ejemplo pasa el resultado del cat al comando sort, luego lo toma el tee y lo guarda en un archivo. A su vez
se la salida es mostrada en pantalla y paginada por el more.
Con la opción “tee -a” se agregará contenido al final del archivo sin sobreescribirlo.
Xargs
Sintaxis
Este comando toma como entrada la salida de otro comando y lo pasa como argumento, siendo echo el comando
predeterminado que usa xargs.
Este comando es muy útil cuando un comando nos muestra un error de exceso de argumentos. Por ejemplo intentar
borrar un directorio con miles de archivos ejecutando “rm *” el asterisco expandirá como argumento la totalidad de
archivos.
# ls | xargs
ambos cinco cuatro dos error filetee ocho rino salida salida.1 seis siete testing tres uno
# ls | xargs -n 1
# echo archivo1
# echo archivo2
En este ejemplo el ls pasará el resultado al xargs quien ejecutará el comando echo rm por cada archivo (ejecutará
múltiples echo rm, uno por cada archivo)
rm archivo1.tmp
rm archivo2.tmp
rm archivo3.tmp
Bibliografía
Libros:
LPI Linux Certification in a Nutshell, Third Edition, June 2010 —> Capitulo 7
LPIC-1: Linux Professional Institute Certification Study Guide: (Exams 101 and 102), 2nd Edition, February
2009 —> Capitulo 4
Páginas:
Preparando LPIC-1 104.7 Encontrar archivos de sistema y colocar archivos en su correcta ubicación