lunes, 30 de mayo de 2016
GESTIONAR USUARIOS Y PERMISOS EN LINUX. CHOWN, CHMOD
COMO AÑADIR, EDITAR O ELIMINAR USUARIOS
Si bien el hecho de crear o borrar usuarios es algo que hoy en día se puede hacer de forma gráfica en la gran mayoría de distribuciones, creo que vale la pena aprenderlo a hacer desde la línea de comandos, dado que nos da una visión mucho más potente de lo que hacemos, y por otro lado, mantenemos una cierta coherencia durante la guía.
Como pequeño recordatorio sobre algo que comenté en el primer post sobre la estructura de permisos, en Linux, aparte del usuario root y los usuarios locales, también hay una larga lista de cuentas que van asociadas servicios o componentes del sistema.
Es importante tener esto ultimo en mente porqué cuando hablemos de crear y gestionar usuarios nos estamos refiriendo siempre a usuarios locales, dejando a un lado a las cuentas del sistema.
Añadir un nuevo usuario
Para añadir un nuevo usuario en Linux puedes utilizar el comando #adduser, con un sudo o sudelante, dado que la acción requiere de permisos de superusuario. Verás que al hacer esto, el mismo sistema te pedirá una serie de detalles sobre el usuario, tales como la contraseña de UNIX o el nombre completo de usuario. Puedes omitir perfectamente el resto de datos, tales como el teléfono de trabajo, el teléfono de casa, etc.
sudo adduser usuario
Ah, algo importante a tener en cuenta, al crear un nuevo usuario, también se creará un nuevo grupo con el mismo nombre, dentro del cual se va a incluir este usuario. Más adelante, cuando hable de la parte de grupos verás como añadir o quitar un usuario dentro de un grupo.
Eliminar un usuario
Si para añadir un usuario utilizamos #adduser, para eliminarlo el comando utilizado es #userdel. En este caso, es solo aplicar el comando y el usuario se borrará automáticamente del sistema. La sintaxis es básicamente la misma:
sudo userdel usuario
Ya verás que, al eliminar el usuario, si este estaba dentro de un grupo en el que unicamente había este usuario, el grupo también se borrará. Este es el caso, por ejemplo, de un usuario local, que al momento de crearse, se crea también un grupo en el que unicamente está él.
Cambiar la contraseña de un usuario
Asimismo, también te puede interesar cambiar la password de un usuario concreto. Para ello se utiliza el comando #passwd. Aquí tienes la sentencia:
sudo passwd usuario
Ver todos los usuarios del sistema
En Linux, toda la información relativa a los usuarios es almacenada en un archivo de texto. Este archivo es /etc/passwd. Si quieres ver los usuario que existen en el sistema, puedes visualizarlo abriendo este fichero mediante el siguiente comando (verás que no utilizo el sudo delante, pues lo abriremos en modo lectura):
gedit /etc/passwd
Ten cuenta que mediante este archivo también podrás editar las propiedades de usuario, aunque yo recomendaría utilizarlo únicamente a modo informativo (de ahí el hecho de no abrirlo con sudo), y utilizar los comandos apropiados en caso de querer modificar algo.
Las contraseñas obviamente no se muestran en texto plano en este archivo, sino que van protegidas por hash.
COMO AÑADIR, EDITAR O ELIMINAR GRUPOS
Los grupos se utilizan básicamente para permitir o restringir el acceso a ficheros y directorios de forma fácil, y evitar el tener que parametrizar cada uno de los permisos usuario por usuario. Si tenemos una serie de usuarios que deben compartir el mismo nivel de permisos, estos pueden pertenecer al mismo grupo.
Añadir un Grupo
Para añadir un grupo, basta con abrir nuevamente una ventana de terminal, y siguiendo con la misma lógica que en el caso de usuarios, teclear la siguiente sentencia:
sudo groupadd grupo
Ten en cuenta que al crear un nuevo usuario, también se crea un nuevo grupo automáticamente, por lo que no hace falta que lo crees tu manualmente.
Eliminar un Grupo
Como te he explicado como crear un nuevo grupo, también vale la pena comentar como eliminar un grupo existente, si bien esto es algo que difícilmente vas a tener que utilizar, a menos que administres un sistema con una gran cantidad de usuarios y grupos creados.
sudo groupdel grupo
Al igual que en el caso de los usuarios, te recomiendo NO borrar en ningún caso uno de los grupos creados por el sistema en la instalación inicial, a no ser que sepas muy bien lo que haces.
Añadir un Usuario dentro de un Grupo
En el caso de que administres un equipo con varios usuarios, y hayas tenido que crear nuevos grupos para gestionar mejor sus permisos, es probable que necesitas saber como añadir un usuario dentro de un grupo. Esto puedes hacerlo mediante el siguiente comando:
sudo adduser usuario grupo
Eliminar un Usuario de un Grupo
Del mismo modo, para eliminar un usuario dentro de un determinado grupo, puedes valerte de la siguiente sentencia:
sudo deluser usuario grupo
Ver todos los Grupos del Sistema
El archivo de texto que almacena la información relativa a los grupos del sistema es /etc/group. Puedes consultarlo (te recomiendo de nuevo no editar nada en este archivo) mediante el siguiente comando (verás que no utilizo sudo delante, ya que lo abriremos solo en modo lectura):
gedit /etc/group
Aquí me remito a lo mismo que he dicho en el caso del archivo /etc/passwd. Hay muchos grupos del sistema, por lo que yo te recomendaría utilizarlo únicamente a modo informativoy valerte de los comandos apropiados en caso de querer modificar algo.
CAMBIAR EL PROPIETARIO DE UN FICHERO CONCHOWN Y CHGRP
A grandes rasgos, en Linux todos los archivos o directorios pertenecen a un usuario y un grupo. Teniendo esto en cuenta, se definen los permisos de lectura, escritura y ejecución a nivel del usuario propietario de ese fichero, del grupo propietario y de los demás usuarios.
Paréntesis: En los comandos que verás a continuación, a la hora de indicar el archivo o directorio, en caso de que este no se encuentre dentro del directorio de trabajo actual, deberás especificarlo mediante su ruta absoluta dentro de la estructura de directorios del sistema. Si tienes dudas en esto, en este post tienes mas info sobre como moverte a través de los diferentes directorios desde la terminal.
Cambiar Usuario Propietario
El comando que sirve para cambiar el propietario de un determinado archivo o directorio a nivel de usuario es #chown. A continuación te dejo con la sintaxis básica de este comando. En este caso, el grupo no cambiará.
sudo chown usuario ruta-fichero
Ten en cuenta que al cambiar el usuario propietario de un fichero, el grupo propietario no variará. Aunque el nuevo usuario pertenezca a otro grupo distinto, el grupo propietario del fichero seguirá siendo el de antes.
En caso de que se trate de un directorio, si quieres que la orden se aplique de forma recursiva para todos los ficheros contenido en él, el comando será el siguiente:
sudo chown -R usuario ruta-directorio
Si utilizas este mismo comando sin el parámetro -R, el cambio que hayas especificado solo tendrá efecto sobre el directorio, pero no sobre su contenido.
Vamos a suponer que queremos cambiar el propietario del archivo hola.txt dentro de la carpeta Documentos del usuario tom. El actual propietario es el usuario tom, y queremos que el nuevo sea el usuario lisa.
sudo chown lisa /home/tom/Documentos/hola.txt
Cambiar Grupo Propietario
Para cambiar el grupo propietario de un fichero te puedes valer del comando #chgrp, aunque más adelante verás que también lo puedes hacer con #chown. A continuación te dejo con la sintaxis básica:
sudo chgrp grupo ruta-archivo
De forma análoga a lo que ocurre al cambiar el propietario a nivel de usuario, en este caso el grupo propietario cambiaré, pero el usuario seguirá siendo el mismo de antes.
En caso de que se trate de un directorio, si quieres que la orden se aplique de forma recursiva para todos los ficheros contenido en él, el comando será el siguiente:
sudo chgrp -R grupo ruta-directorio
Al igual que antes, si utilizas el comando sin el parámetro -R, la orden solamente tendrá efecto sobre el directorio especificado, pero NO sobre el contenido dentro de él.
Hay otra modalidad de funcionamiento del comando #chown que sirve para cambiar el grupo propietario de un fichero. Ello consiste en especificar un grupo, pero no indicar el usuario. En este ultimo caso, la operación es la misma que realiza el comando #chgrp. La sintaxis es la siguiente:
sudo chown :grupo ruta-archivo
Si quieres cambiar tanto el usuario como el grupo al que pertenece un determinado fichero, la sintaxis de uso es la siguiente:
sudo chown usuario:grupo ruta-archivo
Vamos a suponer que queremos cambiar el propietario del archivo hola.txt dentro de la carpeta Documentos del usuario tom. El grupo propietario es tom, y queremos que el nuevo sea el grupo lisa.
sudo chgrp lisa /home/tom/Documentos/hola.txt
EDITAR LOS PERMISOS DE LECTURA, ESCRITURA Y EJECUCIÓN CON CHMOD
El comando que sirve para cambiar los permisos de lectura, escritura y ejecución de un determinado archivo es #chmod. Lo puedes utilizar de dos formas, según las dos formas de representar los permisos que puedes ver el post que te enlazo, aunque de momento voy a limitarme a explicar la forma numérica o en octal.
Modo Numérico o en Octal
A continuación te dejo con la sintaxis básica de este comando:
sudo chmod XYZ ruta-archivo
En esta representación, X se refiere a los permisos del usuario propietario, Y a los permisos del grupo propietario y Z a los permisos del resto de usuarios. X, Y y Z pueden ser cualquier número entero del 0 al 7, teniendo en cuenta la siguiente regla:
- 0 – Ningún permiso,
- 1 – Dar permiso de ejecución,
- 2 – Dar permiso de escritura,
- 4 – Dar permiso de lectura
Cualquier combinación de permisos se obtiene sumando los números que lo representan.
Para cambiar los permisos de un directorio, la sentencia es exactamente la misma, teniendo en cuenta que, como tal, solamente aplicara al directorio en cuestión y no a su contenido. Si quieres que se aplique de forma recursiva para todo el contenido, deberemos utilizar el comando así:
sudo chmod XYZ -R ruta-directorio
Vamos a suponer que queremos cambiar los permisos del archivo hola.txt dentro de la carpeta Documentos del usuario tom. Queremos dar permisos de lectura y escritura al usuario y grupo propietarios, y solo de lectura al resto del mundo.
sudo chmod 664 /home/tom/Documentos/hola.txt
Esta estructura de permisos (lectura y escritura para usuario y grupo, y solo lectura para el resto de usuarios) es la que suele ser habitual para todos los archivos de texto o imágenes dentro de la home de un usuario, por lo que muy probablemente ya tendrá por defecto esos permisos.
Sobre el ejemplo anterior, imagina que quieres restringir los permisos de lectura y escritura solo al usuario, y que tanto los usuarios dentro del grupo propietario como el resto del mundo solo tengan permiso de lectura.
sudo chmod 644 /home/tom/Documentos/hola.txt
En este otro caso, imagina que has creado un script en Python dentro de la carpeta Documentos. Por defecto, lo habitual es que tenga la estructura de permisos 664. Si quieres añadir permisos de ejecución a nivel de usuario, podrías hacerlo con:
sudo chmod 764 /home/tom/Documentos/script.py
En Linux, el permiso de ejecución es en muchos casos necesarios, por ejemplo en el caso de servidores web que corra php, donde muchos de los archivo son scripts y necesitan tener permisos de ejecución.
10 cosas que debes saber de Linux
1. No hay registro en Linux: las configuraciones del sistema se editan de otro modo.
2. Todo en Linux es un fichero: todo, incluso los dispositivos y otros conceptos abstractos de sistemas operativos tienen un fichero asociado.
3. En Linux no hay letras de unidad: adiós a C:, D:, etc.
4. Debes ver la terminal de comandos como algo similar al editor de registro (aunque hace mucho más)
5. Si estás acostumbrado a la consola de Windows hay algunas diferencias: por ejemplo, la barra de separación de rutas es normal (“/”), no invertida (“\”), y debes recordar algunos comandos como ls (dir), cp (copy) o mv (rename).
6. Acostúmbrate a completar con el tabulador: Indispensable para linuxeros.
7. Páginas de manual con man: ayudas en todo momento de comandos del sistema.
8. Instala con gestores de paquetes: normalmente no hay paquetes de instalación como tales, y cualquier aplicación o juego se instala a través de un gestor de paquetes (Synaptic/apt-get en Ubuntu, YaST/zypper, etc).
9. No hay ejecutables (.EXE) como tales: hay binarios ejecutables que simplemente tienen uno de sus atributos que especifican que se pueden ejecutar.
10. Puedes ejecutar programas en tu directorio actual: poniendo ./nombreprograma (por ejemplo “./firefox”).
LA ESTRUCTURA DE DIRECTORIOS DE LINUX AL DESNUDO
La estructura de los directorios el Linux, así como su contenido y funciones, viene definida en el denominado Filesystem Hierarchy Standard (FHS), que vendría a ser como un estándar de jerarquía para los sistemas de archivos en Linux y otros derivados de UNIX.
FHS distingue entre lo que serían directorios estáticos, que son aquellos que contienen binarios, bibliotecas, documentación, etc., de los dinámicos, que son aquellos que requieren de acciones más a menudo, tales como copias de seguridad, etc.
También podemos diferencias claramente lo que son los directorios compartibles, que significa que contienen ficheros que pueden utilizarse desde otros dispositivos, de los no compartibles, que solo pueden utilizarse desde el dispositivo en el que se encuentran.
Antes de empezar a listar los diferentes directorios, es importante que sepas que el hecho de que todos ellos parten de una única raíz común, no significa que varios de ellos no puedan estar en particiones separadas del resto.
De hecho, en muchas distros GNU/Linux es una práctica muy común el hecho ubicar ciertos directorios en particiones separadas del resto.
LISTADO DE LAS PRINCIPALES CARPETAS DEL SISTEMA
/
Toda la estructura de directorios en los sistemas basados en UNIX parte de un directorio raíz también llamado directorio root y que se simboliza por una barra inclinada o /. De este directorio, es desde donde nacen todo el resto de directorios.
Cualquier dirección de archivo o carpeta en Linux empieza por el directorio raíz o /, seguido de todos los directorios y subdirectorios que que lo contienen, separados cada uno de ellos por /.
A continuación conocerás con más en detalle a todos los directorios principales que parten del directorio raíz, junto con algunos de sus subdirectorios.
/BIN
El directorio /bin es un directorio estático y es donde se almacenan todos los binarios necesarios para garantizar las funciones básicas a nivel de usuario.
En /bin solo de guardan los ejecutables de usuario, ya que los binarios necesarios para tareas administrativas gestionadas por el usuario root o superusuario del sistema se encuentran en el directorio /sbin.
Incluye también los binarios que permiten la ejecución de varias utilidades estándar de la terminal de Linux, concretamente cat, cp, echo, grep, gzip, kill, ls, mv, rm, ping, su, ps, tar y vi.
/BOOT
Es un directorio estático e incluye todos los ejecutables y archivos que son necesarios en el proceso de arranque del sistema, y que deberán ser utilizados antes que que el kernel empiece a dar las órdenes de ejecución de los diferentes módulos del sistema.
Es también donde se encuentra el gestor de arranque GRUB.
/DEV
Este directorio incluye todos los dispositivos de almacenamiento conectados al sistema, tales como particiones, otros discos duros internos, unidades USB, y en definitiva cualquier cosa que el sistema pueda entender como un volumen lógico de almacenamiento.
Como particularidad, en Linux todo es gestionado como un archivo, incluyendo los volúmenes montados.
/ETC
Es el encargado de almacenar los archivos de configuración tanto a nivel de componentes del sistema operativo en sí, como de los programas y aplicaciones instaladas a posteriori.
Es un directorio que debería contener únicamente archivos de configuración, y no debería contener binarios.
/HOME
Es el directorio de usuario del sistema, y por lo tanto, el destinado a almacenar todos los archivos del usuario, como documentos, fotos, vídeos, música, plantillas, etc. También incluye archivos temporales de aplicaciones ejecutadas en modo usuario, que sirven para guardar las configuraciones de programas, etc.
Dentro /home hay los directorios personales de todos los usuarios del sistema, nombrados según el nombre de usuario utilizado. Así por ejemplo, si en un sistema pongamos que hay dos usuarios denominados User1 y User2, la estructura será así:
/home/User1/home/User2
Cada directorio de usuario contiene asimismo diferentes carpetas para ayudarlo a clasificar la información. Estas generalmente son: /Documentos, /Imágenes, /Música, /Plantillas y /Vídeos /, así como otros archivos y carpetas ocultas, que son las encargados de guardar la información de configuraciones de las aplicaciones del usuario.
Para visualizar los ficheros ocultos dentro del directorio individual de cada usuario, puedes hacerlo rápidamente mediante la combinación de comandos CTRL + F. Por cierto, y muy importante, todas los archivos y carpetas ocultas en Linux empiezan por un punto, seguido del nombre de la carpeta.
En muchas distribuciones es una práctica recomendada el hecho de ubicar el directorio /homees una partición separada del resto, por tal de facilitar que, en caso de reinstalar el sistema operativo, puedas mantener intacta la partición de la /home, y de este modo mantener todos los archivos personales.
/LIB
Incluye las bibliotecas esenciales que son necesarios para que se puedan ejecutar correctamente todos los binarios que se encuentran en los directorios /bin y /sbin, asi como los módulos del propio kernel.
En los sistemas operativos de 64 bits, además de /lib existe otro directorio denominado /lib64, referida a las bibliotecas para aplicaciones de 64 bits.
/MEDIA
Representa el punto de montaje de todos los volúmenes lógicos que se montan temporalmente, ya sean unidades externas USB, otras particiones de disco, etc.
En la mayoría de distros GNU/Linux, desde hace ya algún tiempo, cada vez que se monta una unidad externa, partición, etc., esta se monta dentro del directorio /media y a su vez dentro de un directorio especifico dependiendo del usuario del sistema que monta el volumen.
De este modo, si en un sistema hay varios usuarios, pongamos User1 y User2, los puntos de motage de los volúmenes que montan cada uno de ellos se mostraran en directorios separados tal como así:
/media/User1/media/User2
/MNT
Es un directorio vacío que cumple funciones similares a /media, pero que actualmente no se suele utilizar, ya que la mayoría de distros hacen uso de este último para los puntos de montaje temporales.
/OPT
En cierto modo vendría a ser como una extensión del directorio /usr, pero en este caso van todos aquellos archivos de solo lectura que son parte de programas auto-contenidos y que, por lo tanto, no siguen los estándares de almacenar los diferentes archivos dentro de los diferentes subdirectorios de /usr (que sería lo recomendable)
Haciendo una analogía con Windows, vendría a ser algo como el directorio de “Archivos y Programas”, pero en este caso, como hemos dicho, para determinados programas que ya vienen auto-contenidos.
/PROC
Este directorio contiene información de los procesos y aplicaciones que se están ejecutando en un momento determinado en el sistema, pero realmente no guarda nada como tal, ya que lo que almacena son archivos virtuales, por lo que el contenido de este directorio es nulo.
Básicamente son listas de eventos del sistema operativo que se generan en el momento de acceder a ellos, y que no existen dentro del directorio como tales.
En este enlace de LinuxTotal tienes información más detallada sobre las particularidades de este directorio y todo el juego que le puedes sacar a la hora de obtener información muy diversa del sistema.
/ROOT
Vendría a ser como el directorio /home del usuario root o superusuario del sistema. A diferencia de los otros usuarios, que se encuentran todos dentro de /home en sus respectivas subcarpetas, el directorio del usuario root está en su propia carpeta colgando directamente de la raíz del sistema.
/SBIN
Si hemos dicho que en /bin se almacenaban los binarios relativos a las funciones normales de usuario, /sbin hace lo mismo pero para los binarios relativos tareas propias del sistema operativo, y que solamente pueden ser gestionadas por el usuario root, tales como el arranque, tareas de restauración, reparación, etc.
/SRV
Sirve para almacenar archivos y directorios relativos a servidores que puedas tener instalados dentro de tu sistema, ya sea un servidor web www, un servidor FTP, CVS, etc. Así, por ejemplo, en el caso de tener instalado un servidor web, sería buena idea tener el directorio web público dentro de /srv, tal como así:
/srv/www
/SYS
Al igual que /proc, contiene archivos virtuales que proveen información del kernel relativa a eventos del sistema operativo. Es en cierto modo una evolución de /proc, y a diferencia de este último, los archivos se distribuyen de forma jerárquica.
/TMP
Como ya da a entender su nombre, sirve para almacenar archivos temporales de todo tipo, ya sea de elementos del sistema, o también de diferentes aplicaciones a nivel de usuario como puedan ser Firefox o Chrome/Chromium.
/USR
El directorio /usr viene de “User System Resources” y actualmente sirve para almacenar todos los archivos de solo lectura y relativos a las utilidades de usuario, incluyendo todo el software instalado a través de los gestores de paquetes de cada distribución. Contiene los siguientes subdirectorios:
/usr/bin/usr/include/usr/lib/usr/sbin/usr/local/usr/src/usr/share
Antiguamente /usr también contenía la carpeta particular de usuario, junto con todos sus documentos, vídeos, fotos, etc., pero más adelante se creo /home para este propósito, dejando/usr reservado para los archivos relativos a programas.
/VAR
contiene varios archivos con información del sistema, como archivos de logging, emails de los usuarios del sistema, bases de datos, información almacenada en la caché, información relativa a los paquetes de aplicaciones almacenados en /opt, etc. En cierto modo se podría decir que actúa a modo de registro del sistema.
COMO LISTAR Y VISUALIZAR LAS DIFERENTES CARPETAS
Para poder visualizar u obtener un listado de todas las carpetas del sistema que cuelgan de la raíz, puedes hacerlo desde el mismo administrador de archivos, o bien desde la línea de comandos.
Desde el administrador de archivos, por defecto te encuentras siempre en tu carpeta principal de usuario dentro de la carpeta home. Para ver las carpetas del sistema debes dirigirte a la raíz, y verás todas las que cuelga de ella.
También puedes obtener un listado completo de todos los directorios que cuelgan de la raíz desde la línea de comandos. Para ello, debes abrir primero una ventana de Terminal y situarte en el directorio raíz.
El comando cd te servirá para situarte en el directorio raíz y con ls podrás visualizar todos los archivos y carpetas contenidos en él.
$ cd /$ ls
También puedes jugar un poco con el comando ls, añadiendo ciertos parámetros para obtener listados más detallados. Una opción muy útil, por ejemplo, es ls -l, con la que obtendrás los diferentes directorios en forma de lista, junto con los permisos de lectura, escritura y ejecución asociados a cada una de ellos.
$ ls -l
Suscribirse a:
Entradas (Atom)