Permisos en un servidor web Linux compartido típico

Permisos en un servidor web Linux compartido típico

Estoy tratando de comprender los permisos de archivos en una cuenta típica de alojamiento web compartido de Linux. Sé cómo configurar permisos rwx para el GRUPO PROPIETARIO y las entidades PÚBLICAS de un archivo o directorio. Lo que no me queda muy claro es, normalmente, ¿dónde se asignarían los permisos de acceso? Supongo que:

USUARIOlos permisos afectarían lo que... uhm... no estoy seguro aquí
GRUPOlos permisos afectarían lo que podría hacer un PHP u otro script que se ejecute en el servidor
OTRO(¿A veces llamados PÚBLICOS o MUNDIALES?) Los permisos afectarían lo que puede hacer la UA de un visitante del sitio web.

¿Alguien puede corregir, confirmar o ampliar mi comprensión sobre esto?

ACLARACIÓN:

Si quiero permitir que mi script PHP que se ejecuta en el servidor tenga permiso para escribir en un archivo, ¿ese permiso se especificaría en USUARIO, GRUPO u OTRO? Si quiero negarle al navegador de un visitante del sitio web la posibilidad de ver el contenido de un directorio, ¿se especificaría ese permiso en USUARIO, GRUPO u OTRO del directorio?

Respuesta1

Especifiquemos algunas palabras clave puños.

FTPUSER   = you with your ftp client
WWWDAEMON = program (servers) that's responsible for processing your web pages and scripts 
WWWUSER   = user as which the WWWDAEMON processes your pages
BROWSER   = Someone looking at your website with a browser
FILES     = files that reside in your www/ftp site
yourgroup = group that your FTPUSER belongs to and WWWUSER does not

Accede a tus ARCHIVOS como FTPUSER con un programa ftp

-rwxr-xr-x  2 FTPUSER yourgroup   72 2012-01-18 13:56 somescript.php

Ahora... debido a que el usuario WWWDAEMON WWWUSER no es usted (FTPUSER), respeta OTROS permisos cuando intenta acceder a readsu script. (Hay sitios de alojamiento que ejecutan sus scripts como su FTPUSER). Eliminar el otro permiso de lectura y ejecución bloqueará el uso de somescript.php

# this scipt is unusable trough a browser
-rwxr-x---  2 FTPUSER yourgroup   72 2012-01-18 13:56 somescript.php

Crear un directorio con permisos de escritura mundial permitirá que su secuencia de comandos escriba allí, pero a menos que proteja ese directorio de alguna manera (como con .htaccess o lo coloque fuera de su directorio www), también podría significar que el NAVEGADOR puede acceder a esos archivos directamente, porque:

BROWSER contacts WWWDAEMON which runs as WWWUSER so 
BROWSER can see everything processed by WWWDAEMON that the WWWUSER can. 

Procesado también significa que WWWDAEMON también respeta .htaccess o similar para bloquear el acceso.

El consejo es crear say phpwritediry darle derechos a+rwx. Agregue .htaccessel archivo allí (si su servicio de hosting lo permite)

deny from all

Con esto, su secuencia de comandos se ejecuta como WWWUSER aún puede usar ese directorio, pero WWWDAEMON bloqueará cualquier acceso del NAVEGADOR a él.

Respuesta2

Lo confundiste bastante.

ugougo useres groupy otherno owner. El propietario es el usuario, que suele tener la mayor cantidad de derechos.

Los permisos de GRUPO afectarían lo que podría hacer un PHP u otro script que se ejecute en el servidor

Los permisos de grupo no afectan lo que se puede hacer (leer, escribir, ejecutar), sino quién puede hacerlo. Lo mismo para el usuario:

Los permisos de USUARIO (¿a veces llamados PÚBLICOS?) afectarían lo que puede hacer una UA de un visitante de un sitio web

El usuario es el propietario, pero ose utiliza para other, que es lo que se llama público. Y repito: lo importante es quién puede hacer, no qué se puede hacer.

Puedes utilizar las abreviaturas ugoal utilizar chmod, lo cual es más fácil que los códigos numéricos:

  chmod ug+w sample1
  chmod go-r sample2 
  chmod g=w  sample3 
  • Ejemplo 1: agregar permisos de escritura al usuario y al grupo
  • Ejemplo 2: eliminar permisos de lectura del grupo y otros
  • Ejemplo 3: establecer permisos de grupo para escribir

Cada archivo es propiedad de un usuario y un grupo. Véalos con ls -l. Ejemplo:

ls -l /var
insgesamt 12
drwxr-xr-x  2 root root   592 2012-01-12 08:02 backups
drwxr-xr-x 28 root root   776 2011-08-18 05:12 cache
drwxrwxrwt  2 root root    48 2010-06-22 01:46 crash
drwxr-xr-x  2 root root  3704 2010-06-05 22:01 games
drwxr-xr-x 84 root root  2296 2011-10-16 13:25 lib
drwxrwsr-x  2 root staff   48 2007-10-08 12:47 local
drwxrwxrwt  3 root root    80 2012-01-19 08:03 lock
drwxr-xr-x 22 root root  5992 2012-01-19 08:01 log
drwxrwsrwt  2 root mail    72 2012-01-18 07:56 mail

Una parte del listado de /var. La mayoría de los directorios (d...) pertenecen a root.root, que es tanto un usuario como un grupo. Sin embargo, el correo y demás son grupos que no son idénticos al usuario.

actualización (después de la actualización de la pregunta):

Si quiero permitir que mi script PHP que se ejecuta en el servidor tenga permiso para escribir en un archivo, ¿ese permiso se especificaría en USUARIO, GRUPO u OTRO? Si quiero negarle al navegador de un visitante del sitio web la posibilidad de ver el contenido de un directorio, ¿se especificaría ese permiso en USUARIO, GRUPO u OTRO del directorio?

Bueno, no es el permiso de un script para hacer esto o aquello. Siempre es el permiso del usuario que ejecuta el script.

Para ejecutar un script, el usuario debe poder leerlo, es decir, se lee del disco para guardarlo en la memoria y ejecutarlo. No puedes ejecutarlo sin leerlo.

Para escribir en un archivo, el usuario debe tener permiso para escribir en un directorio, no en el script o programa.

Si el programa que escribe en un directorio es un servidor, normalmente no se inicia desde un usuario anónimo en la web, sino desde un usuario especial como 'www'.

Respuesta3

Como hablas de alojamiento compartido, permíteme agregar algunos detalles divertidos sobre un proveedor de alojamiento compartido con el que trabajo a menudo. Según mi experiencia, una configuración como esta no es infrecuente en entornos de alojamiento compartido.

En entornos de hosting compartido, no es raro que haya varios usuarios compartiendo el mismo host contigo. Naturalmente, todos tienen cuentas de usuario.

Mi cuenta de usuario puede ser 123456-user1. Ahora lo que se hace es que mi grupo principal está configurado en nobodyo nogroup, de modo que todos los archivos y carpetas nuevos que genero pertenecen a 123456-user1:nobody.

Supongo que no simplemente colocan a todos los usuarios del host en el mismo grupo principal por motivos de seguridad.

Entonces ahora puedo leer mis archivos, ningún grupo puede leerlos (porque, bueno, el grupo es nobody), ¿cómo los lee Apache?
Apache lo lee ejecutando una instancia bajo su propia cuenta de usuario. Por ejemplo, con PHP, se ejecutaría enModo CGIpara ejecutar archivos bajo su cuenta.

Entonces, el primer octeto de los permisos es lo relevante para todo el sistema. Define lo que tanto usted como los visitantes del sitio web (por así decirlo) pueden hacer con el archivo. El grupo puede ser ignorado. Y el último octeto para otros es algo equivalente a la parte del propietario.

información relacionada