Foro Hospedaje y Dominios Foro Hospedaje y Dominios
Nueva Discusión

¡Hola Forastero!

Pareces nuevo por aquí. Si quieres participar, ¡pulsa uno de estos botones!

Acceder con Facebook Acceder con Google Acceder con OpenID Acceder con Twitter
Explicación de los permisos en Linux (General)
  • Nuestros hospedajes usan exclusivamente el sistema operativo Linux, y por ello, es conveniente que se conozca el funcionamiento de los permisos en su sistema de archivos, ya que puede ser necesario cambiar alguno para que funcione correctamente una web (por ejemplo, para que en un directorio se puedan crear archivos temporales).
    No debéis preocuparos tampoco en exceso por el tema de los permisos mientras todo funcione correctamente. Sólo es necesario cambiarlos cuando os surjan problemas. El sistema asigna por omisión permisos seguros a vuestros archivos.


    El sistema de permisos de Linux/UNIX es bastante complejo, por lo que procuraré hacer un breve resumen para tener una idea de cómo funciona.

    Un archivo o directorio puede tener -esencialmente- hasta 3 tipos de permisos (pueden combinarse), que son:

    - Lectura (indicado por la letra r): En un archivo indica que se puede leer de él. En un directorio indica que se pueden listar sus entradas.

    - Escritura (indicado por la letra w): En un archivo indica que se puede escribir en él. En un directorio indica que se pueden añadir o borrar entradas en el directorio, es decir, que se pueden crear o borrar archivos o directorios dentro de ese directorio.
    Obsérvese que el permiso del directorio no afecta al de los archivos que contenga. Podríamos tener todos los archivos sin permiso de escritura, pero el directorio con dicho permiso activado, con lo que se podrían borrar los archivos en el directorio sin mayor problema, aunque no se puedan modificar los mismos.

    - Ejecución (indicado por la letra x): En un archivo indica que éste se puede ejecutar (normalmente es un programa o script). En un directorio tiene un significado diferente, indica que se puede acceder a él para efectuar operaciones en los archivos/directorios que contenga.


    Nuestros paneles de administración (DirectAdmin y Plesk) usan el sistema de permisos numérico, expresado en base octal, aunque en Linux se puede trabajar también con sus letras representativas (notación simbólica, con las letras ya citadas r, w y x) en lugar de los números. Por ello, me centraré en la representación octal, que es la que usaréis.

    En la representación octal, a cada permiso se le asigna un "peso" específico:

    4 al de lectura
    2 al de escritura
    1 al de ejecución

    Como ya comenté antes, estos permisos se pueden combinar. La combinación no es más que la suma de ellos, que no deberá ser inferior a 0 ni superior a 7 (ya que el sistema de numeración octal comienza en 0 y termina en 7, en lugar de tener el rango 0-10 como el sistema decimal tradicional).

    Ejemplos:

    0 <- No hay ningún permiso presente.</font>

    4 <- Está presente <b>sólo el permiso de lectura.

    6 <- Están presentes los permisos de lectura y escritura (4 + 2).</font>

    7 <- Los tres permisos están presentes (4 + 2 + 1).</font>


    Por otro lado, los usuarios pertenecen siempre a un grupo determinado,
    y los archivos/directorios siempre tienen un propietario y un grupo principal asignados.
    Esto último es lo que veis en el panel del hospedaje, en el administrador de archivos, concretamente en las columnas siguientes:

    UID: Es el propietario del archivo
    GID: Es el grupo principal asignado al archivo.

    Los UID/GID pueden ser simbólicos (nombres de usuario/grupo) o bien numéricos. Ambas formas son equivalentes.


    Cada archivo o directorio tiene asignados 3 conjuntos de permisos. Cada conjunto puede ser una combinación de uno o más de ellos (lo que veíamos antes).

    El primer conjunto lo forma las combinaciones de permisos asignadas al propietario, el segundo, las combinaciones de permisos asignadas al usuario que pertenezca al mismo grupo que el archivo (y que no sea su propietario, lógicamente), y el tercero, aquellas combinaciones que se asignan a los usuarios que no sean ni una cosa ni la otra (el "resto de usuarios").

    Por lo tanto, para cada archivo/directorio tendremos 3 dígitos que representan sus permisos. A este grupo de permisos se le suele denominar máscara. Los dígitos se colocan en el mismo orden en el que he citado los conjuntos anteriores:

    Primer dígito: Permisos para el propietario.
    Segundo dígito: Permisos para el grupo.
    Tercer dígito: Permisos para el "resto".


    Ejemplos:

    1) Si un archivo tiene la máscara 644, significa que:

    - El propietario tiene permiso de lectura y escritura (4 + 2).

    - Todo usuario (que no sea el propietario) que pertenezca al mismo grupo que el archivo, tendrá sólo permiso de lectura (4).

    - Los usuarios restantes sólo tendrán permiso de lectura (4).


    2) Si un directorio tiene la máscara 755, significa que:

    - El propietario tiene los 3 permisos asignados. Esto es, puede listar el directorio (4), modificarlo -crear/borrar archivos en él- (2) y acceder a él (1). Si sumáis los 3 permisos, obtendréis justamente 7, que es el primer dígito de la máscara.

    - Todo usuario (que no sea el propietario) que pertenezca al mismo grupo que el directorio podrá listar su contenido (4) y acceder a él (1).
    Nótese que en este caso las operaciones que podrá realizar sobre el directorio se limitan a la lectura del mismo, pues no tiene permiso de escritura. Es importante destacar que sin el permiso de ejecución (también llamado de paso o búsqueda en el caso de los directorios), el directorio queda inaccesible. Por eso, siempre suele estar presente este permiso.

    - Análogo al párrafo anterior, pero aplicado al resto de los usuarios.




    A grandes rasgos así funcionan los permisos en Linux y, por ende, en vuestros hospedajes. Existen también permisos especiales, pero no se usan en los paneles de administración, y la explicación de éstos ya excedería el propósito de este foro y del sistema de soporte.

    Chema.
  • Excelente esta explicación, aunque yo ya sabia algo, porque tengo una partición con Ubuntu y se algo de Linux pero poco.

    Cuando has puesto Linux/UNIX mejor pon Linux y UNIX ya que UNIX es un S.O diferente a Linux aunque Linux tenga parte de UNIX, lo digo porque la gente no se confunda.
  • ferran666 said:
    Excelente esta explicación, aunque yo ya sabia algo, porque tengo una partición con Ubuntu y se algo de Linux pero poco.

    Cuando has puesto Linux/UNIX mejor pon Linux y UNIX ya que UNIX es un S.O diferente a Linux aunque Linux tenga parte de UNIX, lo digo porque la gente no se confunda.


    Bueno, no existe un UNIX en concreto, a menos que nos refiramos al SCO UNIX, ya que Santa Cruz Operation es la actual propietaria de la marca "UNIX". Cuando digo "Linux/UNIX" me refiero a que lo explicado se aplica también a cualquier sistema "tipo UNIX", pues tengo entendido que este sistema de permisos es universal entre todos los sistemas operativos de la "familia UNIX".

    En realidad, se suele denominar a este tipo de sistemas *NIX (para abreviar sus derivados 'clásicos': IRIX, XENIX, AIX, etc.)

    Aunque GNU significa literalmente 'GNU's Not Unix' (GNU No es Unix), es correcto decir que Linux (o GNU/Linux para los puristas) es un sistema operativo tipo UNIX, pues sigue su misma filosofía. Y no es infrecuente ver esto en muchos sitios. Solaris, Mach, Minix, AIX, XENIX, IRIX, HP-UX, BSD (con sus variantes, NetBSD, FreeBSD y OpenBSD), SCO y por supuesto Linux todos ellos son sistemas 'tipo UNIX', porque todos ellos son "hijos" del UNIX original (inicialmente llamado UNICS), diseñado por Ken Thompson en los laboratorios Bell, allá por los años 70.

    Gracias por los comentarios. Me alegro de que te haya gustado mi aportación :o

    Un saludo.
  • Hola a todos.
    Yo tengo un problema muy básico. He estudiado la excelente introducción a los permisos de UNIX porque ando subiendo archivos desde el PC del usuario a una carpeta del servidor. Pero hay una cosa que no acabo de ver clara. Siguiendo las explicaciones de este mensaje, he subido archivos a una carpeta del servidor. Pero para poder hacerlo le tengo que dar desde el administrador de archivos del panel de control un permiso 777, es decir, todos para propietario, grupo y todiós. El archivo se crea con UID Apache y GID Apache. Mi problema:
    No entiendo cómo entrando con ftp_login() y todo lo demás tengo que dar permisos para la carpeta de destino a todo perro pichichi. Cuando un usuario entra en la página y arranca los script que he diseñado para subir los ficheros, ¿quién es? ¿Propietario, grupo o un cualquiera?
    Yo creía que un cualquiera es alguien que intenta acceder a la carpeta con un ftp, sin usar los script que hay diseñados para ello.
    Otra forma de hacer la misma pregunta:
    ¿Quién es el propietario, quién es el grupo?
    No sé si fui capaz por lo menos de dejar claro lo que no entiendo, pero gracias por adelantado.
  • Hola sepex, a ver si puedo contestar, al menos, a una parte de tu duda:

    El propietario de un archivo cuando éste se crea es el mismo que lo origina (pero si se va a modificar un archivo YA existente, el propietario no se modifica, ojo con esto). Por tanto, si estás obteniendo archivos con identidades 'apache:apache' (usuario y grupo) es porque estás usando funciones no toleradas por el modo seguro, y entonces se toma la identidad del servidor web, Apache.

    Creo que te puede estar pasando lo siguiente:

    Te ves en la necesidad de poner permisos 777 en la carpeta porque ésta no pertenece a 'apache', sino a tu usuario. Entonces, a la hora de subir el archivo, como estás tomando la identidad del servidor web, entran en juego los permisos de los otros, ya que 'apache:apache' no es ni tu propietario ni tu grupo. En realidad también habría funcionado con 557, por ejemplo, pero en tal caso, tu propio usuario no podría escribir en ella, sólo leer en la misma. El caso es que en el campo de los otros tengas acceso total. Evidentemente, si la carpeta tuviera credenciales 'apache:apache', pues entonces todo "casaría", y bastaría con ponerle permisos 755, los normales del hospedaje.

    Recuerda que para poder crear archivos en una carpeta se necesitan en la misma: permiso de escritura (2) y permiso de ejecución (1) normalmente*, como mínimo, claro, porque también puedes añadir el de lectura (4), que será lo más normal, y ya tienes el 7 que esperabas.

    Supongo que ya te habrás dado cuenta de que si el par carpeta-identidad usuario no coincide en cuanto a UID y GID, ya te ves en la necesidad de dar máximo acceso a los otros en la carpeta para crear el nuevo archivo. La clave está en hacer coincidir siempre ese par.

    Espero haberte ayudado un poco.

    Un saludo.

    *: El permiso de ejecución o de búsqueda en una carpeta permite que ésta forme parte de un camino en una operación sobre la carpeta. Si una carpeta no tiene permiso de búsqueda, entonces sólo se puede operar desde ella (debe ser el directorio activo), no se puede referenciar un camino que la contenga.
  • La verdad es que me aclaras bastantes cosas. Entre otras que me tengo que meter con lo del modo seguro para ver qué hago exactamente.
    Gracias por tu detallada explicación (y paciencia)