% Linux Installation and Getting Started    -*- TeX -*-
% perms.tex
% Copyright (c) 1992, 1993 by Matt Welsh, Larry Greenfield and Karl Fogel
%
% This file is freely redistributable, but you must preserve this copyright 
% notice on all copies, and it must be distributed only as part of "Linux 
% Installation and Getting Started". This file's use is covered by
% the copyright for the entire document, in the file "copyright.tex".

% Traduccion realizada por Eduardo Lluna Gil. Envie sus comentarios a:
%            Eduardo Lluna Gil, 2:346/207.8 (FidoNet)
%            elluna@aii.upv.es (InterNet)
% $Log: perms.tex,v $
% Revision 0.5.0.1  1996/02/10 23:45:15  rcamus
% Primera beta publica
%
%


\section{Permisos de Ficheros} 
\label{sec-file-perms}\label{sec-perms}

\index{ficheros!permisos de|(}
\index{permisos!de ficheros|(}

\subsection{Conceptos de permisos de ficheros}
\index{ficheros!permisos!defined}
\index{permisos!defined}
\index{fcheros!pertenencia a un usuario}

Al ser UNIX un sistema multiusuario, para proteger ficheros de usuarios
particulares de la manipulaci\'on por parte de otros, UNIX proporciona un
mecanismo conocido como {\bf permisos de ficheros}. Este mecanismo permite
que ficheros y directorios ``pertenezcan'' a un usuario en particular. Por
ejemplo, como Larry cre\'o ficheros en su directorio ``home'', Larry es el
propietario de esos ficheros y tiene acceso a ellos.

UNIX tambi\'en permite que los ficheros sean compartidos entre usuarios y
grupos de usuarios. Si Larry lo desea, podr\'{\i}a restringir el acceso a sus
ficheros de forma que ning\'un otro usuario tenga acceso. De cualquier modo,
en la mayor\'{\i}a de los sistemas por defecto se permite que otros usuarios
puedan leer tus ficheros pero no modificarlos o borrarlos.

\index{ficheros!pertenencia a un grupo}
Como hemos explicado arriba, cada fichero pertenece a un usuario en
particular. Por otra parte, los ficheros tambi\'en pertenecen a un {\bf 
grupo} en particular, que es un conjunto de usuarios definido por el 
sistema. Cada usuario pertenece al menos a un grupo cuando es creado. El 
administrador del sistema puede hacer que un usuario tenga acceso a m\'as 
de un grupo.

\index{usuarios!en grupos}
\index{grupos}
Los grupos usualmente son definidos por el tipo de usuarios que acceden a
la m\'aquina. Por ejemplo, en un sistema UNIX de una universidad, los usuarios
pueden ser divididos en los grupos {\tt estudiantes}, {\tt direcci\'on}, {\tt
profesores} e {\tt invitados}. Hay tambi\'en unos pocos grupos definidos por
el sistema (como {\tt bin} y {\tt admin}) los cuales son usados por el
propio sistema para controlar el acceso a los recursos--- muy raramente los
usuarios normales pertenecen a estos grupos.

Los permisos est\'an divididos en tres tipos: lectura, escritura y ejecuci\'on.
Estos permisos pueden ser fijados para tres clases de usuarios: el
propietario del fichero, el grupo al que pertenece el fichero y para todos
los usuarios independientemente del grupo.

\index{permisos!lectura}
\index{ficheros!permisos!lectura}
\index{directorios!permisos!lectura}
\index{permisos!escritura}
\index{ficheros!permisos!escritura}
\index{directorios!permisos!escritura}
\index{permisos!ejecuci\'on}
\index{ficheros!permisos!ejecuci\'on}
\index{directorios!permisos!ejecuci\'on}
El permiso de lectura permite a un usuario leer el contenido del fichero o
en el caso de un directorio, listar el contenido del mismo 
(usando {\tt ls}). El permiso de escritura permite a un usuario escribir y
modificar el fichero. Para directorios, el permiso de escritura permite
crear nuevos ficheros o borrar ficheros ya existentes en dicho directorio.
Por \'ultimo, el permiso de ejecuci\'on permite a un usuario ejecutar el fichero
si es un programa o gui\'on del int\'erprete de comandos. Para directorios, el
permiso de ejecuci\'on permite al usuario cambiar al directorio en cuesti\'on
con {\tt cd}.

\subsection{Interpretando los permisos de ficheros}
\index{permisos!interpretando}
\index{ficheros!permisos!interpretando}
\index{ficheros!listando permisos con ls@listando permisos con {\tt ls}}
\index{ls@{\tt ls}!listando permisos de ficheros con}
Veamos un ejemplo del uso de permisos de ficheros. Usando el comando 
{\tt ls} con la opci\'on {\tt -l} se mostrar\'a un listado ``largo'' de los
ficheros, el cual incluye los permisos de ficheros.
\begin{tscreen}
/home/larry/foo\# {\em ls -l stuff}
\begin{verbatim}
-rw-r--r--   1 larry    users         505 Mar 13 19:05 stuff
\end{verbatim}
/home/larry/foo\#
\end{tscreen}

El primer campo impreso en el listado representa los permisos de ficheros.
El tercer campo es el propietario del fichero ({\tt larry}), y el cuarto es
el grupo al cual pertenece el fichero ({\tt users}). Obviamente, el \'ultimo
campo es el nombre del fichero ({\tt stuff}), y los dem\'as campos los
trataremos m\'as adelante.

Este fichero pertenece a {\tt larry} y al grupo {\tt users}. Echemos un
vistazo a los permisos. La cadena {\tt -rw-r--r--} nos informa, por orden,
de los permisos para el propietario, el grupo del fichero y cualquier otro
usuario.

El primer car\'acter de la cadena de permisos (``{\tt -}'') representa el 
tipo de fichero. El ``{\tt -}'' significa que es un fichero regular. Las
siguientes tres letras (``{\tt rw-}'') representan los permisos para el
propietario del fichero, {\tt larry}. El ``{\tt r}'' para ``lectura'' y 
``{\tt w}'' para escritura. Luego {\tt Larry} tiene permisos de lectura y 
escritura para el fichero {\tt stuff}.

Como ya mencionamos, aparte de los permisos de lectura y escritura est\'a el
permiso de ``ejecuci\'on'', representado por una ``{\tt x}''. Como hay un 
``{\tt -}'' en lugar del ``{\tt x}'', significa que Larry no tiene 
permiso para ejecutar ese fichero. Esto es correcto, puesto que {\tt 
stuff} no es un programa de ning\'un tipo. Por supuesto, como el fichero 
es de Larry, puede darse a si mismo permiso de ejecuci\'on si lo desea. 
Esto ser\'a cubierto en breve.

Los siguientes tres car\'acteres, {\tt r--} representan los permisos para los
miembros del grupo. El grupo al que pertenece el fichero es {\tt users}.
Como solo aparece un ``{\tt r}'' cualquier usuario que pertenezca al grupo
{\tt users} puede leer este fichero.

Las \'ultimos tres car\'acteres, tambi\'en {\tt r--}, representan los permisos
para cualquier otro usuario del sistema (diferentes del propietario o de los
pertenecientes al grupo {\tt users}). De nuevo, como solo est\'a presente el
``{\tt r}'', los dem\'as usuarios pueden leer el fichero, pero no 
escribir en \'el o ejecutarlo.

Aqu\'{\i} tenemos otros ejemplos de permisos de grupo.
\begin{dispitems}
\ditem{{\tt -rwxr-xr-x}}
El propietario del fichero puede leer, escribir y ejecutar el fichero. Los
usuarios pertenecientes al grupo del fichero, y todos los dem\'as usuarios
pueden leer y ejecutar el fichero.

\ditem{{\tt -rw-------}}
El propietario del fichero puede leer y escribir. Nadie m\'as puede acceder al
fichero.

\ditem{{\tt -rwxrwxrwx}}
Todos los usuarios pueden leer, escribir y ejecutar el fichero.
\end{dispitems}

\subsection{Dependencias}
\index{permisos!dependencias de}
\index{ficheros!permisos!dependencias de}
\index{directorios!permisos!dependencias de}

Es importante darse cuenta de que los permisos de un fichero tambi\'en
dependen de los permisos del directorio en el que residen.
Por ejemplo, aunque un fichero tenga los permisos {\tt -rwxrwxrwx}, otros
usuarios no podr\'an acceder a \'el a menos que tambi\'en tengan permiso de
lectura y ejecuci\'on para el directorio en el cual se encuentra el fichero.
Si Larry quiere restringir el acceso a todos sus ficheros, podr\'{\i}a
simplemente poner los permisos de su directorio ``home'' {\tt /home/larry} a
{\tt -rwx------}. De esta forma ning\'un usuario podr\'a acceder a su directorio
ni a ninguno de sus ficheros o subdirectorios. Larry no necesita preocuparse
de los permisos individuales de cada uno de sus ficheros.

En otras palabras, para acceder a un fichero, debes de tener permiso de
ejecuci\'on de todos los directorios a lo largo del camino de acceso al
fichero, adem\'as de permiso de lectura (o ejecuci\'on) del fichero en particular.

Habitualmente, los usuarios de un sistema UNIX son muy abiertos con sus
ficheros. Los permisos que se dan a los ficheros usualmente son 
{\tt -rw-r--r--}, lo que permite a todos los dem\'as usuarios leer los
ficheros, pero no modificarlos de ninguna forma.
Los directorios, usualmente tienen los permisos {\tt -rwxr-xr-x}, lo que
permite que los dem\'as usuarios puedan moverse y ver los directorios,
pero sin poder crear o borrar nuevos ficheros en ellos.

Muchos usuarios pueden querer limitar el acceso de otros usuarios a sus
ficheros. Poniendo los permisos de un fichero a {\tt -rw-------} no se
permitir\'a a ning\'un otro usuario acceder al fichero. Igualmente, poniendo los
permisos del directorio a {\tt -rwx------} no se permitir\'a a los dem\'as
usuarios acceder al directorio en cuesti\'on.

\subsection{Cambiando permisos}
\index{permisos!cambiando}
\index{ficheros!permisos!cambiando}
\index{directorios!permisos!cambiando}
\index{chmod@{\tt chmod}}

El comando {\tt chmod} se usa para establecer los permisos de un fichero.
Solo el propietario puede cambiar los permisos del fichero.
La sintaxis de {\tt chmod} es:
\begin{tscreen}
chmod \{a,u,g,o\}\{+,-\}\{r,w,x\} \cparam{filenames}
\end{tscreen}

Brevemente, indicamos a que usuarios afecta {\bf a}ll, {\bf u}ser, 
{\bf g}roup o {\bf o}ther. Entonces se especifica si se est\'an a\~nadiendo
permisos ({\tt +}) o quit\'andolos ({\tt -}). Finalmente se especifica que
tipo de permiso {\bf r}ead, {\bf w}rite o e{\bf x}ecute. 
Algunos ejemplos:

\begin{dispitems}
\ditem{{\tt chmod a+r stuff}}
Da a todos los usuarios acceso al fichero.
\ditem{{\tt chmod +r stuff}}
Como arriba--- si no se indica {\tt a}, {\tt u}, {\tt g} o {\tt o} por
defecto se toma {\tt a}.
\ditem{{\tt chmod og-x stuff}}
Quita permisos de ejecuci\'on a todos los usuarios excepto al propietario.
\ditem{{\tt chmod u+rwx stuff}}
Permite al propietario leer, escribir y ejecutar el fichero.
\ditem{{\tt chmod o-rwx stuff}}
Quita permisos de lectura, escritura y ejecuci\'on a todos los usuarios menos
al propietario y a los usuarios del grupo del fichero.
\end{dispitems}

\index{ficheros!permisos de|)}
\index{permisos!de ficheros|)}
