\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 <<dueño>>, 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 <<w>> 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 <<x>> 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 <<x>> 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}
