<= Anterior (directorios y archivos) =>
bash CAP. 1:
¿Qué debo aprender estudiando este capítulo?:
Cambiar los permisos de un archivo o directorio.
Usuarios y grupos de usuarios:
Para linux es muy importante la seguridad de la información de sus usuarios.
Para preservar esa información, linux utiliza un sistema de permisos y privilegios que pueden definirse o asignarse a algunos usuarios y quitarse o restringirse a otros.
De este modo se evita que un usuario elimine o modifique la información de otro.
Por eso en la estructura de directorios, hay un directorio para cada usuario y cada usuario solo puede modificar la estructura de directorios y archivos a partir de allí (de su directorio home).
Además, linux también gestiona grupos de usuarios y permite definir o asignar y quitar o restringir permisos para cada grupo de usuarios.
Esto da la posibilidad de configurar la seguridad de cada archivo, directorio o incluso servicios, aplicaciones y dispositivos en dos niveles, es decir, para cada usuario y para cada grupo de usuarios.
Básicamente, en linux podemos determinar quien puede hacer determinadas cosas y quien no.
Por eso linux nunca va a permitir que inicies sesión sin identificarte con un nombre de usuario existente en el sistema y su clave específica.
Bien, pero: ¿quien es capaz de restringir los permisos de los usuarios de linux?
En linux existe por defecto un super usuario llamado “root”, que es quien tiene todos los permisos sobre el sistema y es capaz de hacer lo que desee, es el administrador del sistema.
Como este usuario tiene acceso a todo el sistema, puede otorgar y quitar permisos a otros usuarios, modificar sus archivos, etc...
Nota:
Los administradores de sistemas, trabajan en esta área de la informática, asignando y restringiendo permisos a los usuarios, respaldando información, instalando y configurando aplicaciones y servicios, etc...
Usuarios y propietarios de la información:
En linux, quien crea un archivo o un directorio es el propietario de esa información y por lo tanto, puede restringirle el acceso a ella a cualquier otro usuario salvo al root. (El root siempre tendrá acceso a esa información).
Cada archivo o directorio, tiene como propiedades que afectan a la seguridad de la información que contienen:
el usuario propietario,
el grupo de usuarios al que pertenece el propietario,
los permisos de acceso que tienen ambos, (por separado) y
los permisos que tiene cualquier otro usuario que no pertenezca a ese grupo.
Para explicar mejor esto, pongamos un ejemplo:
Supongamos que trabajas en una empresa como cajero y en tu sistema eres el usuario “cajero1”.
Seguramente el administrador del sistema habrá creado un grupo de usuarios llamado “cajeros” y habrá agregado tu usuario a ese grupo.
El administrador habrá definido ciertos permisos para el grupo de usuarios “cajeros”.
Esos permisos son comunes a todos los miembros de ese grupo, por lo tanto tu usuario "cajero1", tiene todos los permisos asignados al grupo “cajeros”.
Cuando tu creas un archivo o un directorio, eres el propietario de esa información y por lo tanto, puedes redefinir los permisos que le das a los otros usuarios de tu grupo sobre esa información, y también puedes redefinir los permisos sobre esa información para cualquier otro usuario que no pertenezca a tu grupo.
Nota:
Por defecto, los miembros de tu mismo grupo, no pueden modificar tu información, pero tu puedes darles permiso para hacerlo.
Obviamente, también puede hacerlo el root del sistema, incluso puede quitarte la propiedad sobre esa información.
Para cambiar el propietario y el grupo del propietario de un archivo o directorio se utiliza el comando chown.
Sintaxis: sudo chown usuario:grupo archivo
La palabra sudo se utiliza para obtener, los permisos de root para ejecutar el comando deseado.
Solo los usuarios miembros del grupo administrador pueden obtener los permisos de root mediante sudo.
Permisos de archivos y directorios:
Tres son los permisos que pueden tenerse sobre un archivo o directorio, ellos son:
De lectura (se representa con la letra r por read).
De Escritura (se representa con la letra w por write).
De Ejecución (se representa con la letra x por execute).
Ejecutando “ls -l” veremos que por cada archivo y directorio contenido en el directorio donde estemos, aparece una línea parecida a la siguiente:
-rwxr-xr-x 1 user1 grupo1 128931 Feb 19 2000 gpl.txt
La información contenida en esa línea se organiza de la siguiente manera:
Caracter 1:
Nos indica si es un archivo o un directorio.
En caso de ser un archivo aparece el caracter “-”, mientras que para los directorios aparece “d”.
También puede darse el caso de que sea un link, (acceso directo). En este caso aparece “l”.
Caracteres 2, 3 y 4:
Nos indican, respectivamente, los permisos de: lectura, escritura y ejecución para el propietario del archivo.
En caso de no tener el permiso correspondiente activado encontramos el caracter “-” de lo contrario “r”, “w” o “x”, según si se le permite leer (Read), escribir (Write) o ejecutar (eXecute).
Caracteres 5, 6 y 7:
Representan lo mismo que los tres anteriores, pero para los miembros del grupo de usuarios al que pertenece el propietario.
En el 7° carácter, además, podemos encontrar “S”, lo cual indica que el archivo es de tipo SetUserId, esto quiere decir que al ejecutarlo obtendrá los permisos del propietario del archivo.
Caracteres 8, 9 y 10:
Representan lo mismo que los tres anteriores pero, para cualquier usuario que no sea miembro del grupo al que pertenece el propietario.
En el 10° caracter, también podemos encontrar “S”.
Nota:
SetUserId puede servir para casos donde el archivo es un script diseñado para que lo utilicen usuarios que normalmente no tienen permisos suficientes para hacer lo que el código del script tiene implementado.
Por ejemplo: puede que el archivo, al ejecutarse, deba acceder a una determinada unidad de almacenamiento, a la que solo tiene acceso el propietario del script.
Si este script tuviera definido el permiso de ejecución con “x” para todos los usuarios del sistema, aun así, solo el propietario lograría que el script funcione ya que solo él tiene permiso de acceso a la unidad de almacenamiento a la cual desea acceder el código dentro del script.
Que tengas permiso de ejecución sobre un archivo no implica que tengas permiso para hacer lo que dice el código escrito en ese archivo.
Volviendo al ejemplo:
-rwxr-xr-x 1 user1 grupo1 128931 Feb 19 2000 gpl.txt
Después del 10° caracter aparece un número que nos indica el número de enlaces fuertes que tiene el archivo (esto lo veremos más adelante).
Para los directorios, este número indica cuántos directorios hay dentro de él, (cuando no hay ninguno, el número es 2).
Luego de los enlaces fuertes, aparece el propietario del archivo y el grupo al que pertenece.
Luego, el tamaño del archivo (en bytes).
Luego la fecha de la última modificación. (En todos los archivos se guarda su fecha de creación, último acceso y modificación, datos que podemos manipular con el comando touch.)
Al final está el nombre del archivo o directorio.
Modificar los permisos de archivos y directorios:
Para cambiar los permisos sobre un archivo o directorio se utiliza el comando chmod.
Existen dos formas de utilizarlo.
La forma sencilla es la siguiente:
Como dijimos anteriormente, los permisos sobre un archivo o directorio se resumen en:
r = read (lectura).
w = write (escritura).
x = execute (ejecución).
Para indicar a quien o a quienes asignamos esos permisos, debemos utilizar los siguientes caracteres:
a = all (todos).
u = user (usuario propietario).
g = group (grupo del propietario).
o = others (otros).
La sintaxis de chmod es la siguiente:
chmod usuarios permisos archivo
(Se utiliza + para asignar un permiso y – para quitarlo)
chmod (a, u, g, o) (+, -) (r, w, x) archivo
Ejemplos:
Dar permisos de ejecución a todos los usuarios del sistema sobre un archivo:
chmod a+x archivo
(Para todos los usuarios (a), activar (+), ejecución (x) sobre archivo)
Dar todos los permisos a los miembros del grupo al que pertenece el propietario:
chmod g+rwx archivo
(Para el grupo del propietario, activar: lectura, escritura y ejecución, sobre archivo)
Quitar todos los permisos a los miembros del grupo al que pertenece el propietario y cualquier otro usuario:
chmod go-rwx archivo
(Para el grupo del propietario y cualquier otro usuario que no pertenezca a él, quitar los permisos de lectura, escritura y ejecución sobre archivo)
La forma compleja de cambiar los permisos:
Un poco más complejo que lo anterior es utilizar numeración binaria.
En este caso, el conjunto de permisos rwx, se representa con un valor decimal que corresponde a un binario de tres bits.
Para construir el binario, básicamente se pone un 1 en el lugar del permiso activo y 0 en el inactivo, luego se convierte ese binario a su decimal.
Por ejemplo:
Todos los permisos activos rwx, se representa con el binario 111.
Ese binario, en decimal es igual a 7 (4+2+1).
Si quisiera desactivar la escritura, es decir el segundo permiso, allí he de poner un cero con lo cual el binario quedaría en 101.
Esto en decimales es 5 (4+0+1).
De modo que, todas las combinaciones posibles de estos tres permisos rwx, se representan con un decimal de 0 a 7 que surge de la conversión a decimal, de un binario de 3 bits.
Como los permisos se organizan en tres grupos (propietario, grupo y otros), al establecer los permisos tenemos que pasar 3 decimales, (uno para cada grupo de valores).
Por ejemplo:
Si quiero que determinado archivo tenga todos los permisos para:
el propietario,
el grupo del propietario y
cualquier otro usuario,
debo hacer: chmod 777 archivo
El primer 7 representa rwx activos para el propietario del archivo.
El segundo 7 representa rwx activos para todos los miembros del grupo de usuarios al que pertenece el propietario del archivo.
Y el último 7 representa rwx activos para todos los demás usuarios del sistema.
Puedes usar la siguiente tabla como guía:
Comprender numeración binaria:
Estamos acostumbrados a utilizar la numeración decimal.
En el sistema decimal, las características fundamentales son las siguientes:
Todos los números se representan con diez caracteres (0 a 9).
La posición de cada caracter vale diez veces el valor del caracter a su derecha.
por ejemplo:
Si al decimal 10, le agrego otro caracter 0 a la derecha, el valor del uno pasa a valer diez veces más y el decimal se convierte en cien (10 * 10 = 100).
En la numeración binaria ocurre lo mismo, pero en base 2 por eso se llama binario.
Es decir, que en la numeración binaria:
Todos los números se representan con dos caracteres (0 a 1).
La posición de cada caracter vale dos veces el valor del caracter a su derecha.
Conviene ver los binarios como posiciones que puedo activar o desactivar.
Cuando una posición está activa, se representa con un 1 y cuando está inactiva se representa con un 0.
Pero esos ceros o unos, no representan el valor, solo indican que la posición está activa o inactiva.
Imaginemos que tenemos 8 bits (8 bits son un byte):
[][][][][][][][]
Para representar el número cero, vamos a apagar cada bit poniendo un cero en cada lugar:
[0][0][0][0][0][0][0][0]
Para representar el número uno, activamos el bit de la derecha poniendo un uno en ese lugar:
[0][0][0][0][0][0][0][1]
Como cada posición vale el doble que la posición a su derecha, para representar el número dos, tenemos que activar sólo el segundo bit de la derecha, dado que 2+0 = 2
[0][0][0][0][0][0][1][0]
Ahora, para representar el número tres, tenemos que activar las dos posiciones de la derecha porque 2+1 = 3
[0][0][0][0][0][0][1][1]
Siguiendo siempre esta misma lógica, se pueden representar todos los números.
A continuación puedes ver como se representan los números del uno al diez, en decimal y en binario:
decimal 0 binario 0
decimal 1 binario 1
decimal 2 binario 10
decimal 3 binario 11
decimal 4 binario 100
decimal 5 binario 101
decimal 6 binario 110
decimal 7 binario 111
decimal 8 binario 1000
decimal 9 binario 1001
decimal 10 binario 1010
¿Qué debo aprender estudiando este capítulo?:
Cambiar los permisos de un archivo o directorio.