Derek Molloy

Raspberry Pi® a fondo para desarrolladores


Скачать книгу

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.

      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.

      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.

      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,