Raspberry Pi® a fondo para desarrolladores. Derek MolloyЧитать онлайн книгу.
La tabla 3-3 muestra la estructura de comandos para chown y chgrp. Asimismo, lista algunos comandos de ejemplo para trabajar con usuarios, grupos y permisos.
Tabla 3-3: Comandos para trabajar con usuarios, grupos y permisos.
Comando | Descripción |
chown molloyd a.txtchown molloyd:users a.txtchown -Rh molloyd /tmp/test | Cambia el propietario del archivo.Cambia propietario y grupo al mismo tiempo.Cambia la propiedad del directorio /tmp/test de forma recursiva. -h afecta a los enlaces simbólicos en lugar de a los archivos referenciados. |
chgrp users a.txtchgrp -Rh users /tmp/test | Cambia la propiedad de grupo del archivo.Cambia recursivamente con la misma -h que chown. |
chmod 600 a.txtchmod ugo+rw a.txtchmod a-w a.txt | Cambia permisos, como en la figura 3-3, para que el usuario tenga permisos de lectura/escritura al archivo. Tanto el grupo como otros no tienen acceso.Otorga a los usuarios, grupo y otros permiso de lectura/escritura a a.txt.Elimina el acceso de escritura para todos los usuarios de a, lo que quiere decir todos (usuarios, grupos y otros). |
chmod ugo=rw a.txt | Establece los permisos de lectura/escritura para todos. |
umaskumask -S | Lista la configuración de permisos por defecto. Con -S se muestra umask de una forma más legible. |
umask 022umask u=rwx,g=rx,o=rx | Modifica los permisos predeterminados en todos los archivos y directorios de nueva creación. Los dos comandos umask mostrados aquí son equivalentes. Si establecemos este valor de máscara y creamos un archivo o directorio, será drwxr-xr-x para el directorio, y -rw-r--r-- para el archivo. Es posible establecer una umask específica de usuario en el archivo .login de la cuenta. |
chmod u+s myexechmod g+s myexe | Establece un bit especial, llamado setuid bit (set user ID on execute, establecer ID de usuario al ejecutar) y setgid bit (set group ID on execute, establecer ID de grupo al ejecutar), que permite que un programa se ejecute como si lo hiciera otro usuario, pero con los permisos del propietario o grupo del archivo. Por ejemplo, esto permitiría que un programa concreto se ejecutase como si fuera el superusuario quien lo iniciase. Si el archivo no es ejecutable, se muestra una S mayúscula, en lugar de una s minúscula. |
chmod 6750 myexechmod u=rwxs,g=rxs,o= myexe | Establece el valor del bit setuid de forma absoluta. Ambos otorgarán a myexe los permisos rwsr-s---, con ambos bits, setuid y setgid, configurados (observe el espacio antes de myexe).Por razones de seguridad no se puede aplicar el bit setuid a un script del intérprete de comandos. |
stat /tmp/test.txt | Ofrece información útil sobre el estado del sistema de archivos para un archivo o directorio, por ejemplo el dispositivo físico en que se encuentra, información de su inodo, el último acceso o las últimas modificaciones o cambios. |
Veamos un ejemplo de la última entrada de la tabla 3-3, el comando stat:
molloyd@erpi:/tmp$ stat test.txt
File: 'test.txt'
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: b302h/45826d Inode: 6723 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2015-06-19 00:06:28.551326384 +0000
Modify: 2015-06-19 00:06:28.551326384 +0000
Change: 2015-06-19 0:07:13.151016841 +0000
Birth: -
Observe que cada archivo de Linux conserva las marcas de tiempo de acceso, modificación y cambio. Podemos cambiar las marcas temporales de acceso y modificación artificialmente usando touch -a text.txt y touch -m test.txt, respectivamente (el tiempo de cambio se ve afectado en ambos casos). El tiempo de cambio se ve afectado también por las operaciones del sistema como chmod; el tiempo de modificación se ve afectado por una operación de escritura en el archivo, y el tiempo de acceso, en teoría, se ve afectado por una operación de lectura. Sin embargo, este comportamiento operacional significa que la lectura de un archivo ocasiona una escritura. Esta característica de Linux ocasiona un desgaste significativo en la tarjeta SD del RPi y un rendimiento deficiente en las operaciones de E/S. Por tanto, la funcionalidad de marca de tiempo de acceso a los archivos suele estar deshabilitada por defecto en la SD de arranque del RPi, mediante la opción de montaje (mount option) noatime en el archivo de configuración /etc/fstab que veremos en la sección siguiente. Observe que hay una opción similar, nodiratime, específica para directorios. No obstante, la opción noatime impide la actualización de la marca de tiempo para los accesos tanto a archivos como a directorios.
Para finalizar el análisis de la figura 3-3, decir que el ejemplo de la figura tiene 22 enlaces duros al archivo. Para un directorio, esto representa el número de subdirectorios, su directorio padre (..) y a sí mismo (.). El propietario de la entrada es el root y está en el grupo del root. La entrada siguiente, 4096, es el tamaño exigido para guardar los metadatos sobre los archivos contenidos en ese directorio (el tamaño mínimo es un sector, generalmente 4.096 bytes).
Para finalizar: si pedimos un listado de directorios ls -ld en el directorio root, veremos un bit t en los permisos del directorio /tmp. Dicho bit se conoce como sticky bit (literalmente, bit pegajoso), e indica que solo el permiso de escritura no basta para borrar archivos. Así pues, en el directorio /tmp cualquier usuario puede crear archivos, pero nadie puede borrar los archivos de otro usuario.
molloyd@erpi:/tmp$ cd /
molloyd@erpi:/$ ls -dhl tmp
drwxrwxrwt 7 root root 4.0K Jun 19 00:18 tmp
El comando ls -dhl lista los nombres de directorio, el parámetro d, y no su contenido, en formato legible para las personas (al menos para algunas), el parámetro h (de human readable) y en su versión larga, parámetro d.
El directorio raíz (root) de Linux
Explorar el sistema de archivos de Linux resulta aterrador para los principiantes. Si vamos al nivel superior con el comando cd / en el RPi y escribimos ls, veremos un listado del nivel más alto de la estructura de directorios del siguiente modo:
molloyd@erpi:/$ ls
bin boot.bak etc lib media opt root sbin sys usr
boot dev home lost+found mnt proc run srv tmp var
¿Qué significa todo esto? Cada uno de estos directorios tiene su papel y, si los entendemos bien, nos permitirán saber por dónde empezar a buscar archivos de configuración o los archivos binarios que necesitemos. En la tabla 3-4 tenemos una descripción breve de cada subdirectorio de nivel más alto de Linux.
Tabla 3-4: Estructura de directorios de nivel superior en Linux.
Directorio | Descripción |
bin | Contiene los binarios ejecutables utilizados por todos los usuarios y está en la variable de entorno PATH de forma predeterminada. Otro directorio, /usr/bin, contiene ejecutables que no resultan básicos para el arranque o reparación del sistema. |
boot | Contiene los archivos para arrancar el RPi. |
boot.bak | Contiene una copia de /boot generada tras una actualización del sistema. |
dev | Contiene los nodos de dispositivo, enlazados a sus controladores. |
etc | Archivos de configuración para el sistema local. |
home | Contiene los directorios raíz (home) de las cuentas de usuario (/home/pi es el directorio raíz de la cuenta de usuario pi). |
lib | Contiene las librerías estándar del sistema. |
lost+found | Aquí figuran los archivos sin vínculos que aparezcan tras ejecutar fsck (file system check and repair, comprobación y reparación del sistema de archivos). El comando mklost+found vuelve a crear el directorio lost+found si se ha eliminado. |
media | Utilizado para montar dispositivos removibles, como tarjetas micro-SD. |
mnt | Su uso típico es para montar sistemas de archivos temporales. |
opt | Un buen lugar para instalar software opcional de terceros. |
proc | Un archivo virtual que representa los procesos en ejecución en el RPi. Por ejemplo, si pasamos al directorio cd /proc y escribimos cat iomem, veremos algunos mapeos de asignaciones de memoria. |
root | El directorio raíz de la cuenta root (superusuario) en las distribuciones Raspbian y Debian Linux. En muchas otras distribuciones, es el directorio /home/root. |
run | Proporciona |