
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 read
su 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 phpwritedir
y darle derechos a+rwx. Agregue .htaccess
el 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.
ugo
ugo user
es group
y other
no 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 o
se 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 ugo
al 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 nobody
o 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.