Raspberry Pi® a fondo para desarrolladores. Derek Molloy
Читать онлайн книгу.de las tareas descritas en este libro. Debemos, no obstante, comprender bien cómo está configurada la cuenta y por qué funciona tan bien.
Bajo muchas distribuciones de Linux, incluida Raspbian, se emplea sudo siempre que se hace necesario realizar una labor con privilegios de administrador. Normalmente, la herramienta nos pide la contraseña del administrador y seguidamente nos permite operar con esos privilegios durante un cierto periodo de tiempo. La cuenta de usuario pi de Raspbian se ha configurado de manera que no necesita que escribamos la contraseña para los privilegios de administrador.
La sección siguiente describe la gestión de cuentas de usuario, pero si creamos una nueva cuenta de usuario y deseamos que pueda usar la herramienta sudo, su nombre se debe añadir al archivo sudoers file, /etc/sudoers, utilizando la herramienta visudo. Para ello, inicie sesión como root y escriba visudo, o bien escriba directamente sudo visudo como pi. Las últimas líneas del archivo /etc/sudoers proporcionan la configuración de la cuenta de usuario pi, lo que explica por qué no hace falta contraseña para que este usuario ejecute la herramienta sudo:
#User privilege specification
Root ALL=(ALL:ALL) ALL
#username hostnames=(users permitted to run commands as) permitted commands
pi ALL=(ALL) NOPASSWD: ALL
En esta configuración, el usuario pi recibe privilegios sobre todos (el primer ALL) los nombres de host para ejecutar comandos como cualquier usuario (el segundo ALL), así como para ejecutar todos los comandos del sistema (el tercer ALL) sin tener que escribir contraseña alguna. La herramienta (sudo) funciona bien, pero puede complicar la redirección de la salida de un comando, lo que veremos claramente más adelante en este capítulo.
Existe otro comando en Linux que nos permite ejecutar un intérprete de comandos con un usuario sustituto: su. Escribir su - (lo mismo que su - root) abre un nuevo intérprete de comandos con permisos de acceso de superusuario completos. Asimismo, se puede utilizar como sigue (una vez hayamos habilitado el inicio de sesión de root):
pi@erpi ~ $ su -
Password: mySuperSecretPassword
root@erpi:~# whoami
root
root@erpi:~# exit
logout
pi@erpi ~ $ whoami
pi
El símbolo del sistema, #, indica que hemos iniciado sesión con la cuenta de superusuario. Para volver a deshabilitar el acceso como root en el RPi, podemos escribir sudo passwd -l root.
Administración del sistema
El sistema de archivos de Linux consiste en una jerarquía de directorios que sirven para organizar los archivos en un sistema Linux. Esta sección examina la propiedad de los archivos, el uso de los enlaces simbólicos y el concepto de permisos de acceso del sistema.
El sistema de archivos de Linux
Linux utiliza estructuras de datos, llamadas "inodos" (inodes, nodos-i o nodos índice) para representar los objetos del sistema de archivos, como archivos y directorios. Cuando se crea un sistema de archivos ampliado (ext) de Linux, como ext3 o ext4, en un disco físico, se configura simultáneamente una tabla de inodos (inode table). Esta tabla comprende los vínculos a la estructura de datos inodo para cada archivo y directorio en un disco físico. La estructura de datos inodo para cada archivo y directorio almacena información como permisos, punteros a sectores físicos de almacenamiento, marcas de tiempo (time stamps) o número de enlaces (link counts). Podemos ver un ejemplo de ello realizando un listado ls -ail del directorio raíz, donde -i haga que ls muestre los índices inodo. Veremos lo siguiente para el directorio /tmp :
pi@erpi ~ $ cd /
pi@erpi / $ ls -ail | grep tmp
269 drwxrwxrwt 7 root root 4096 Jun 18 01:17 tmp
Por lo tanto, 269 es el índice inodo de /tmp. Si pasamos al directorio /tmp usando cd, creamos un archivo temporal (a.txt ) y ejecutamos ls -ail, veremos que el directorio actual (.) tiene exactamente el mismo índice inodo:
pi@erpi / $ cd tmp
pi@erpi /tmp $ touch a.txt
pi@erpi /tmp $ ls -ail
269 drwxrwxrwt 7 root root 4096 Jun 18 01:41 .
2 drwxr-xr-x 22 root root 4096 Jun 16 01:57 ..
4338 -rw-r--r-- 1 pi pi 0 Jun 18 01:41 a.txt
También podemos ver que el directorio raíz (..) tiene un índice inodo de 2, y que un archivo de texto (a.txt) tiene un índice inodo de 4338. Por lo tanto, no podemos cambiar de directorio (con cd) directamente a un índice inodo, porque el índice inodo podría no referirse a un directorio.
La figura 3-3 muestra el listado de un directorio de Linux, con los permisos que nos permiten trabajar con los archivos en Linux. La primera letra indica el tipo de archivo, por ejemplo: un directorio (d), un enlace (l) o un archivo estándar (-). También podemos encontrar tipos de archivos más raros: (c) carácter especial, (b) bloque especial, (p) fifo y (s) socket. Los directorios y los archivos estándar no necesitan más explicación, pero los enlaces sí, como vemos aquí:
Figura 3-3: Listado de un directorio de Linux con los permisos de cada archivo.
Enlaces a archivos y directorios
Hay dos tipos de enlaces en Linux: los enlaces simbólicos (soft links o symbolic links) y los enlaces duros (hard links). Un enlace simbólico es un archivo que hace referencia a la ubicación de otro archivo o directorio. Por contra, los enlaces duros se vinculan directamente con el índice inodo, pero no se pueden vincular con un directorio. Podemos crear un enlace usando ln /path/to/file.txt linkname. Se crea un enlace simbólico añadiendo -s a la llamada. Para ilustrar esto, el ejemplo siguiente creará un enlace simbólico y un enlace duro al archivo /tmp/test.txt:
pi@erpi ~ $ cd /tmp
pi@erpi /tmp $ touch test.txt
pi@erpi /tmp $ ln -s /tmp/test.txt softlink
pi@erpi /tmp $ ln /tmp/test.txt hardlink
pi@erpi /tmp $ ls -al
total 8
drwxrwxrwt 2 root root 4096 Jun 18 01:55 .
drwxr-xr-x 22 root root 4096 Jun 16 01:57 ..
-rw-r--r-- 2 pi pi 0 Jun 18 01:55 hardlink
lrwxrwxrwx 1 pi pi 13 Jun 18 01:55 softlink -> /tmp/test.txt
-rw-r--r-- 2 pi pi 0 Jun 18 01:55 test.txt
Puede observar un número 2 delante del archivo test.txt (después de los permisos del archivo). Este es el número de enlaces duros asociados al archivo. Es una cuenta que se incrementó en 1 cuando se creó el enlace duro, llamado hardlink. Si tuviéramos que eliminar el enlace duro, por ejemplo mediante rm hardlink, esta cuenta volvería al valor 1. Para ilustrar la diferencia entre enlaces simbólicos y enlaces duros, añadimos un fragmento de texto al archivo test.txt:
pi@erpi /tmp $ echo "testing links on the RPi" >> test.txt
pi@erpi /tmp $ more hardlink
testing links on the RPi
pi@erpi /tmp $ more softlink
testing links on the RPi
pi@erpi /tmp $ mkdir subdirectory
pi@erpi /tmp $ mv test.txt subdirectory/
pi@erpi /tmp $ more hardlink
testing links on the RPi
pi@erpi /tmp $ more softlink
softlink: No such file or directory
Podemos observar que cuando el archivo test.txt se mueve al subdirectorio,