\section{Permisos de usuario} \label{sec:permisos} %%%%%%%%%%%%%%%% % Introducción % %%%%%%%%%%%%%%%% \subsection{Introducción} ?`Para qué sirven los permisos de usuario? Bueno, es una pregunta bastante obvia teniendo en cuenta que GNU/Linux es un sistema operativo multiusuario. Cuando muchas personas utilizan un mismo equipo, debe haber un mecanismo que sirva para diferenciar los archivos de un usuario de los demás archivos. Un concepto no del todo correcto es pensar que los usuarios se utilizan exclusivamente por personas. Los procesos\footnote{Recordemos que un proceso es un programa en ejecución.} que se ejecutan en un sistema GNU/Linux tienen también un usuario <>, que coincide generalmente con el usuario que ejecutó dicho programa. Además, los \emph{demonios}\footnote{Procesos que dan servicios, como por ejemplo el servidor de páginas web.} tienen su propio usuario por cuestiones de seguridad. En esta sección se verá el tema de los permisos de usuario desde el punto de vista de un usuario común, y no de un administrador. Más adelante se verán los detalles de mayor complejidad que generalmente incumben al administrador. %%%%%%%%%%%%%%%%%%%%% % Conceptos básicos % %%%%%%%%%%%%%%%%%%%%% \subsection{Conceptos básicos} Los permisos de un archivo cualquiera (inclusive los directorios) se agrupan en 3 grupos de 3 bits cada uno, como se muestra más abajo: \begin{verbatim} rwx rwx rwx | | | | | otros | grupo usuario \end{verbatim} Como se ha dicho, cada grupo posee 3 bits: \begin{description} \item[Bit r:] Lectura \item[Bit w:] Escritura \item[Bit x:] Ejecución \end{description} Con las diferentes combinaciones, se puede configurar un archivo para que pueda ser leído y modificado por su dueño, y sólo leído por el grupo y los demás, por ejemplo el archivo \archivo{/etc/passwd}: \begin{verbatim} -rw-r--r-- 1 root root 1509 Apr 4 12:44 /etc/passwd \end{verbatim} Este archivo es del usuario \textbf{root}, y del grupo del mismo nombre, solamente se puede modificar (bit <> de escritura) por su usuario dueño, y leer por el grupo y los demás. Los grupos son un tema más que nada administrativo, no lo tocaremos en esta sección, sólo hay que tener en cuenta que generalmente en un sistema GNU/Linux, un usuario cualquiera pertenece a su grupo (grupo del mismo nombre que su nombre de usuario) y al grupo \emph{users}. A diferencia de sistemas operativos como \emph{DOS} y \emph{Windows}, el hecho de que un archivo tenga una extensión \comando{.com} o \comando{.exe} no significa que será un programa ejecutable. Al necesitar restringir los derechos de ejecución de cualquier archivo\footnote{Siempre teniendo en cuenta a los archivos ejecutables, es decir programas.}, la acción de ejecutar cualquier programa estará supeditada al permiso correspondiente (bit <> de ejecución). Esto es importante de tener en cuenta a la hora de escribir programas que serán interpretados, ya que al final de cuentas los archivos serán de texto, y para que se ejecuten se le deberá activar el permiso de ejecución. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Un caso especial, los directorios % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{Un caso especial, los directorios} Quizás a más de un lector le ha asaltado la siguiente duda: ?`para qué servirá el bit de ejecución en los directorios?. Obviamente, los directorios no se ejecutan, y evidentemente, el bit <> en los directorios existe. Como se ha aclarado anteriormente, en estos casos, dicho bit tiene un significado especial. El bit de ejecución en los directorios permite poder ver la información acerca de los archivos que contienen. El bit de lectura permite listar los contenidos de un directorio. El bit de escritura permite crear y borrar archivos dentro de un directorio. Generalmente es conveniente manejar los permisos de lectura y ejecución de los directorios en forma conjunta, para evitar confusiones. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Cambio de permisos: el comando chmod % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{Cambio de permisos: el comando \comando{chmod}} Para cambiar los permisos de los archivos se usa el comando \comando{chmod}. Su sintaxis es la siguiente: \begin{verbatim} chmod [-R] modo archivo... \end{verbatim} La opción \comando{-R} permite cambiar recursivamente los permisos de todos los archivos dentro de un directorio. El argumento \comando{modo} está compuesto por alguna combinación de las letras \emph{u} (usuario dueño), \emph{g} (grupo dueño), y \emph{o} (otros), seguido de un símbolo + o - dependiendo si se quiere activar o desactivar un permiso, siguiendo por último una combinación de las letras correspondientes a los distintos permisos: \emph{r}, \emph{w} y \emph{x}. Así, si se necesita dar permisos de ejecución al usuario y al grupo de un archivo, el comando deberá ejecutarse de la siguiente manera: \begin{verbatim} chmod ug+x nombre-de-archivo \end{verbatim} O si se necesita sacar el permiso de lectura y ejecución de todos los archivos y subdirectorios del directorio \archivo{/home/usuario/prueba} para el \emph{grupo} y los \emph{otros}, se debe ejecutar: \begin{verbatim} chmod -R go-rx /home/usuario/prueba \end{verbatim} %%%%%%%%%%%%%%%%%%%%%%%% % Representación octal % %%%%%%%%%%%%%%%%%%%%%%%% \subsection{Representación octal} Existe una manera mas ágil de representar los permisos de archivo. Teniendo en cuenta que cada grupo de 3 bits es un número binario, la representación en octal consiste en traducir cada grupo a un número octal, de tal manera que quede como resultado un número de 3 dígitos, cada dígito representando a un grupo de 3 bits. Mejor aclarar esto con un ejemplo: \begin{verbatim} rwx rw- r-- representación escrita 111 110 100 representación binaria 7 6 4 representación octal | | | | | otros | grupo usuario \end{verbatim} La tabla \ref{tab:permisos} da una guía de la traducción de números binarios a octales. \begin{table}[htbp] \begin{center} \begin{tabular}{|c|c|} \hline \emph{Binario} & \emph{Octal} \\ \hline \hline 000 & 0 \\ 001 & 1 \\ 010 & 2 \\ 011 & 3 \\ 100 & 4 \\ 101 & 5 \\ 110 & 6 \\ 111 & 7 \\ \hline \end{tabular} \caption{Traducción de binario a octal} \label{tab:permisos} \end{center} \end{table} Entonces se puede concluir que los siguientes comandos son equivalentes: \begin{verbatim} chmod u+rwx go-rwx nombre-de-archivo.txt chmod 700 nombre-de-archivo.txt \end{verbatim} .