InicioLinuxDe Windows a Linux: Usuarios y Permisos

De Windows a Linux: Usuarios y Permisos

Linux6/16/2012
Vamos a abordar un aspecto que puede resultar complejo para los nuevos usuarios: Linux como sistema multiusuario, administración de los usuarios y -lo más importante- de los permisos para los contenidos generados por cada usuario del sistema. Introducción Cuando decimos que Linux es un OS Multiusuario aludimos a que distintos usuarios pueden trabajar simultaneamente en un mismo operativo, cada uno con su cuenta. En este artículo vamos a crear un nuevo usuario nada más que para explicar el proceso mediante el cual la privacidad de la información de cada user puede ser manipulada a través del sistema de permisos en Linux. Se trata de un aspecto fundamental de los sistemas Linux (y en líneas generales de todos los otros que nacen a partir de UNIX). Para no ofuscar la misión de este artículo apelemos a un ejemplo cotidiano que cualquier lector podrá entender rápidamente. Hemos instalado alguna distribución de Linux en la PC de casa. Disponemos de la cuenta root de esa distro, además de la de nuestro user no root creado durante la instalación. Ahora bien, tenemos 1 hermano que también quiere usar la PC y no nos interesa para nada que éste pueda acceder a nuestra información o configuración (no lo queremos por ahi toqueteando los tweaks de nuestra interface gráfica que tan linda nos quedó, ni queremos que pueda acceder a nuestros documentos, descargas, etc, etc). Por fortuna Linux nos permitirá crearle a este hermano su propia cuenta de usuario, lo cual creará para él un nuevo directorio /home/elusredelhermano en que podrá almacenar sus archivos, descargas, definir si quiere usar KDE o Gnome y configurarlo con un wallpaper que seguramente no será de nuestro agrado ;= Creando un usuario para nuestro hermano Comencemos por crear la cuenta del nuevo usuario. Vamos a llamarlo "hermano" y la crearemos desde la consola porque nos interesa comenzar a familiarizarnos con este entorno en que trabajaremos seguido. Para poder dar de alta un nuevo usuario tendremos que loguearnos como root tal cual se describe a continuación. dijo:carp@home:/$ su root Contraseña: root@home:/# adduser hermano Añadiendo el usuario `hermano' ... Añadiendo el nuevo grupo `hermano' (1002) ... Añadiendo el nuevo usuario `hermano' (1002) con grupo `hermano' ... Creando el directorio personal `/home/hermano' ... Copiando los ficheros desde `/etc/skel' ... Introduzca la nueva contraseña de UNIX: elegimosunaclave Vuelva a escribir la nueva contraseña de UNIX: repetimoslaclave passwd: contraseña actualizada correctamente Cambiando la información de usuario para hermano Introduzca el nuevo valor, o presione ENTER para el predeterminado Nombre completo []: Mi hermano Número de habitación []: Teléfono del trabajo []: Teléfono de casa []: Otro []: ¿Es correcta la información? [S/n] S root@home:/# Una lectura del output del comando adduser nos dice con toda claridad qué ha sucedido. 1) Se ha creado un nuevo usuario (hermano) 2) Se ha creado un nuevo grupo (hermano) 3) Se ha creado el directorio para este usuario (/home/hermano) 4) Se nos pide una clave que debemos proporcionar 5) Se nos pide información que podemos brindar o no (en mi caso solo puse el nombre y luego enter en el resto de los campos). 6) Se nos pide confirmar los datos y con esto el usuario se ha creado. Podemos ya mismo ir a nuestro menu buscar salir o leave y luego elegir switch user/cambiar usuario para reingresar con el usuario hermano y la clave elegida y comprobar que allí está el escritorio pelado tal cual lo vimos cuando ingresamos por primera vez al entrar con nuestro user no root. Vale aclarar que, la sesión en que estabamos trabajando antes de cambiar de usuario sigue activa u podemos regresar a ella cuando lo deseemos. Definiendo permisos Ahora bien, nos bastará con buscar un explorador de archivos estando conectado con la cuenta hermano para comprobar que éste tiene acceso a nuestro home y puede subir de nivel inclusive hasta el / y leer el contenido de algunos ficheros de configuración importantes pero no modificarlos. En líneas generales Linux no permitirá que un nuevo usuario pueda modificar ficheros vitales para el sistema reservando esta tarea para el usuario Root. Puede sucedernos sin embargo que no deseamos que el usuario hermano tenga acceso al listado de directorios de nuestra carpeta de user no root /home/carp o, por el contrario, que necesitamos que pueda ejecutar cosas (programas) que se encuentran allí y sobre los cuales no tiene permisos de ejecución. De este modo, vamos a introducirnos en el mundo de los permisos y veremos cómo manipularlos. Entendiendo los permisos Comenzemos por realizar un ls -l (la -l es flag para large y listará los directorios en formato largo, es decir, con todos los detalles) en el directorio /etc y tomemos las primeras líneas de la salida. dijo:hermano@nodo0:/$ ls -l /etc total 1288 drwxr-xr-x 3 root root 4096 oct 3 21:47 acpi -rw-r--r-- 1 root root 2981 oct 3 21:46 adduser.conf -rw-r--r-- 1 root root 47 dic 17 22:17 adjtime drwxr-xr-x 2 root root 4096 nov 23 16:02 akonadi -rw-r--r-- 1 root root 196 oct 4 00:03 aliases drwxr-xr-x 2 root root 16384 dic 15 21:48 alternatives -rw-r--r-- 1 root root 395 nov 1 2009 anacrontab drwxr-xr-x 7 root root 4096 oct 4 19:21 apache2 [...] Este comando en su versión large (-l) nos muestra detalles sobre cada directorio y archivo dentro de /etc. A los fines de comprender los permisos nos interesa: Permisos User Grupo Nombre drwxr-xr-x 7 root root 4096 oct 4 19:21 apache2 Tipos de permisos Los permisos existentes en Linux son Read (lectura), Write (escritura), Execution (ejecución) y se otorgan a 3 clases de usuarios del sistema: Creador del archivo o directorio (Owner), Usuarios pertenecientes al grupo del creador (Group), Otros usuarios que no son ni el creador ni pertenecen a su grupo (Others). Para cada uno de estos 3 tipos de usuario, deben definirse permisos de modo que el sistema sepa quienes tienen o no acceso a qué tareas. Es así que los permisos de la carpeta apache2 deberían leerse así: drwxr-xr-x 7 root root 4096 oct 4 19:21 apache2 d: es un directorio rwx: el creador u owner (root, según el ls, posee todos los permisos). r-x: otros usuarios en el grupo root pueden listar los archivos del directorio y acceder al mismo. r-x: otros usuarios que no sean el creador ni pertenezcan a su grupo listar los archivos del directorio y acceder al mismo. Una cosa que suele generar confusión cuando intentamos comprender los permisos es que éstos significan distintas cosas dependiendo de si se trata de un archivo o un directorio. Las diferencias son las siguientes: Ficheros: r = permiso para leer el contenido del archivo w = permiso para modificar el contenido x = permso para ejecutar el archivo Directorios: r = permiso para listar los archivos del directorio w = permiso para crear o eliminar archivos en el directorio x = permso para acceder al directorio Al listar con ls -l los contenidos de un directorio, el primer caracter de la lista de permisos nos dirá si se trata de un archivo (-), un directorio (d), o un link (l). Por ejemplo: -rw-r--r-- 1 root root 662 dic 15 21:21 hosts (el primer caracter es un "-": se trata de un archivo). drwxr-xr-x 7 root root 4096 oct 4 19:21 apache2 (el primer caracter es una "d": se trata de un directorio). lrwxrwxrwx 1 root root 13 oct 3 21:46 motd -> /var/run/motd (primer caracter "l", link) Modificando permisos Habiendo logrado comprender cuales son los tipos de usuarios y permisos que debemos tener en cuenta a la hora de conocer los privilegios de cada user, veremos cómo modificar estos permisos. Empezaremos con un ejemplo práctico: el usuario hermano puede acceder a los contenidos de mi carpeta (carp) en /home/carp. Veamos un listado de como están los permisos en /home dijo:carp@nodo0:/$ ls -l /home total 116228 drwxr-xr-x 63 carp carp 4096 dic 22 18:30 carp drwxr-xr-x 2 ftp nogroup 4096 dic 7 15:26 ftp drwxr-xr-x 15 hermano hermano 4096 dic 23 00:23 hermano carp@nodo0:/$ Según vimos unas líneas más arriba cuando distinguimos el significado de los permisos Read, Write y Execute en archivos y directorios, el directorio /carp tiene todos los permisos para su owner (es decir, yo), y luego tiene permisos de lectura y ejecución tanto para el grupo carp como para el resto de los usuarios. Visto y considerando que no queremos que el usuario hermano pueda listar los contenidos de /home/carp necesitaremos remover el permiso x (Ejecución, que en directorios permite acceder) del tipo de usuario others, dado que el user hermano no forma parte de mi grupo. Es decir necesitamos que los permisos queden: dijo:drwxr-xr-- 63 carp carp 4096 dic 22 18:30 carp Para esto utilizaremos el comando chmod con la siguiente sintaxis: dijo:carp@home:/$ chmod o-x /home/carp carp@nodo0:/$ Si volvemos a listar los contenidos de /home con ls -l: carp@home:/$ ls -l /home total 116228 drwxr-xr-- 63 carp carp 4096 dic 22 18:30 carp drwxr-xr-x 2 ftp nogroup 4096 dic 7 15:26 ftp drwxr-xr-x 15 hermano hermano 4096 dic 23 00:23 hermano carp@nodo0:/$ Y si el usuario hermano intenta acceder a nuestro directorio: dijo: hermano@nodo0:/$ cd /home/carp bash: cd: /home/carp: Permiso denegado hermano@nodo0:/$ Ahora bien, analicemos el modo en que utilizamos el comando chmod (chmod o-x) decomponiéndolo. chmod o-x = chmod Es decir que estamos pidiendo que a los usuarios others (o) se le quite (-) permiso de ejecucion (x) sobre el directorio. Si cambiaramos el signo de - por + de modo que el comando fuera chmod o+x, restauraríamos el permiso que acabamos de remover. Las opciones para este comando son: a = all users u = user g = group o = others Veamos algunos ejemplos: chmod a+x /home/carp (le da a todos permiso de ejecución sobre /home/carp) chmod o-rx /home/carp (le quita al user others permisos de lectura y ejecución) chmod o+rwx /home/carp (le da a others todos los permisos sobre el dir /carp. Una muy mala idea!) Vale aclarar que el usuario carp puede alterar los permisos del directorio carp porque según vimos en el listado obtenido por ls -l tiene permisos para esto (drwxr-xr-x), pero no tendrá éxito intentando manipular los permisos de otro usuario como hermano dado que no posee permisos de escritura en su carpeta. No sucederá lo mismo si lo intentamos con el user Root, que tiene permisos absolutos y puede modificar lo que desee. Modificando permisos en el sistema Octal El comando chmod puede utilizarse con el denóminado sistema octal en que 8 números (del 0 al 7) representan distintas combinaciones de permisos. Para comprender cómo funciona el sistema octal debemos simplemente memorizar qué permisos da cada número. Veamos las equivalencias: 0 = Ningún permiso (---) 1 = Permiso de ejecución solamente (--x) 2 = Permiso de escritura solamente (-w-) 3 = Permisos de escritura y ejecución (-wx) 4 = Permisos de lectura solamente (r--) 5 = Permisos de lectura y ejecución (r-x) 6 = Permisos de lectura y escritura (rw-) 7 = Permisos de lectura, escritura y ejecución (rwx) Notesé que el 7 es la suma del 1 (--x), 2 (-w-) y 4 (r--), es decir, que se asignan todos los permisos. Apliquemos un ejemplo con el sistema octal. Supongamos que el usuario Root ha creado un directorio llamado /scripts y no desea que ninguno de los usuarios no root pueda listar o acceder a los contenidos de éste. Debido a que ninguno de los users creados (carp y hermano) están en el grupo de root (que lleva como nombre root) la denegación de permisos tendrá que afectar a la clase de usuario others. dijo:root@home:/# chmod 770 scripts root@home:/# ls -l [...] drwxrwx--- 2 root root 4096 dic 17 04:48 scripts [...] Como puede observarse, ahora el directorio /scripts tiene rwx para el owner (el user root), rwx para el grupo (grupo root) y ningún permiso (---) para el resto de los mortales (entre los que se encuentran carp, hermano y cualquier futuro usuario que se cree en el sistema). Modificando el propietario de un directorio o fichero A veces sucede que necesitamos que un directorio o fichero esté en poder de un usuario distinto a quien lo creó y dar permisos a others no es la solución correcta dado que estaríamos dandolé permisos a todos los usuarios en lugar de a un usuario específico. En Linux y sistemas operativos derivados de Unix, suele utilizarse para estos casos el comando chown que nos permite "pasarle la propiedad" de un archivo o directorio a otro usuario. Veamos un ejemplo en que el user root crea un archivo y luego le pasa la propiedad al user carp. dijo:root@home:/# touch archivoparacarp.txt root@home:/# ls -l [...] -rw-r--r-- 1 root root 0 dic 23 01:55 archivoparacarp.txt [...] Ahora bien, el fichero creado tiene los permisos por defecto (rw para el owner y sólo r para otros miembros del grupo y usuarios ajenos al mismo). Supongamos que el root user quiere pasarle la propiedad al user carp: dijo:root@home:/# chown carp archivoparacarp.txt root@home:/# ls -l [...] -rw-r--r-- 1 carp root 0 dic 23 01:55 archivoparacarp.txt [...] Los permisos no han cambiado pero sí la propiedad del fichero con el resultado de que ahora el usuario carp es el owner y, por extensión, quien posee permisos Read y Write sobre el .txt creado. Cambiando el grupo Es muy corriente que el escenario que acabamos de describir, en que necesitamos darle privilegios a un usuario sobre algún contenido pero no queremos hacerlo a través de others, se de también en situaciones en que no queremos perder la propiedad de un directorio o contenido. Necesitamos que el user carp tenga todos los permisos sobre un archivo pero no queremos darle la propiedad de éste ni dotarlo con los permisos vía others dado que ésto otorgaría los privilegios que sólo queremos para carp a todos los usuarios del sistema. La solución en estos escenarios llega a través de los grupos (cuya existencia no es un mero capricho) y el comando chgrp que nos permitirá cambiar el grupo de usuarios de un contenido. Supongamos que nuevamente el Root user necesita darle privilegios de lectura y escritura al user carp sobre un archivo específico, pero esta vez lo hará definiendo esos permisos para la clase de user group y luego cambiará a carp el grupo en cuestión (root, dado que es el usuario root quien creará el fichero). Veamos el procedimiento: dijo:root@home:/# touch archivoparacarp2.txt root@home:/# ls -l [...] -rw-r--r-- 1 root root 0 dic 23 01:55 archivoparacarp2.txt [...] El usuario root cambia a continuación el grupo a que el archivo pertenece de root a carp y asigna, luego, los permisos deseados al grupo: dijo:root@home:/# chgrp carp archivoparacarp2.txt root@home:/# chmod 664 archivoparacarp2.txt root@home:/# ls -l [...] -rw-rw--r-- 1 root carp 0 dic 23 01:55 archivoparacarp2.txt [...] Como podemos apreciar, el grupo ha cambiado y los permisos asignados vía 664 afectarán al user carp que podrá leer y escribir este archivo. El usuario root sigue siendo el owner y carp participa de los privilegios asignados porque el fichero pertenece a root con permisos rw tanto como al grupo carp con los mismos permisos. Esta es una forma de darle control sobre un contenido a un usuario sin exponer el contenido a todos los usuarios ni perder la propiedad del mismo.
Datos archivados del Taringa! original
30puntos
437visitas
0comentarios
Actividad nueva en Posteamelo
0puntos
3visitas
0comentarios
Dar puntos:

Dejá tu comentario

0/2000

Autor del Post

v
vladsoft🇦🇷
Usuario
Puntos0
Posts79
Ver perfil →
PosteameloArchivo Histórico de Taringa! (2004-2017). Preservando la inteligencia colectiva de la internet hispanohablante.

CONTACTO

18 de Septiembre 455, Casilla 52

Chillán, Región de Ñuble, Chile

Solo correo postal

© 2026 Posteamelo.com. No afiliado con Taringa! ni sus sucesores.

Contenido preservado con fines históricos y culturales.