En éste caso, lo que se hace es permitir al apache "entrar" al directorio
personal /home/juanita para que tenga acceso al public_html, pero sin
permitirle ver los archivos, y usar un grupo dedicado para los directorios
visibles al servidor web; como sigue (ls simulado):

/etc/groups:
users... juanita,pedrito...
web...apache

rwx--x--x 711   juanita users   /home/juanita
rwx--x--x 711   pedrito users   /home/pedrito

rwxr-s--- 2750   juanita web   /home/juanita/public_html
rwxr-s--- 2750   pedrito web    /home/pedrito/public_html

x para directorios significa: tiene acceso al nivel bajo el directorio;
por lo tanto el 711 permite a todos acceso a /home/zzz, pero a no leer
su contenido. Una vez que el apache puede llegar a /home/zzz/public_html,
le damos permiso a su grupo (web) para que no sólo entre, sino que lea
(el 5 en grupos es r-x), pero a nadie más (0 al final). Nótese que juanita
no puede ver ni los archivos de pedrito ni tampoco los archivos bajo su
cuate /home/pedrito/public_html; sólo puede verlos a través de su sitio
http://server.mx/~pedrito...

Truco especial: el 2 en el permiso, que el ls muestra con una letra 's',
permite que todos los archivos y directorios nuevos creados bajo public_html
reciban automáticamente el grupo web.

Para aplicar éstos permisos para usuarios existentes se puede usar (un script
"cambia" con $1 en lugar de juanita, etc... y luego "./cambia
juanita", "./cambia pedrito",
etc.):

#-- permisos base
chown +R juanita:users /home/juanita
find /home/juanita -type d chmod 700 "{}" \;
find /home/juanita -type f chmod 600 "{}" \;
chmod 711 /home/juanita

#-- permisos para web
chown -R juanita:web /home/juanita/public_html
find /home/juanita/public_html -type d chmod 2750 "{}" \;
find /home/juanita/public_html -type f chmod 640 "{}" \;

Para evitar tenerlo que hacer con los nuevos usuarios, se configura
el directorio ejemplo /etc/skel tal y como lo queremos, y los
nuevos usuarios reciben su copia inicial a partir de él:

mkdir -p /etc/skel/public_html
echo "Sitio pendiente" > /etc/skel/index.html
chmod 711 /etc/skel
chmod 2750 /etc/skel/public_html
chown -R root:web /etc/skel/public_html

Luego crear los usuarios con:

useradd -b /home -g users -m -k /etc/skel -s /sbin/nologin -c "Luisito
Perez" luisito

(man useradd)

Quiero suponer que las interfaces gráficas de creación de usuarios
respetan /etc/skel, etc...

Todo sea para darles a nuestros queridos usuarios su página, pos ya que...

Saludos,
Fjor


2011/10/6 Miguel Cardenas <warlock...@yahoo.com>:
> Holas
>
> Pues ya pude resolver lo del DNS, ahora tengo otra situacion, en realidad no 
> es un problema operativo sino de seguridad...
>
> Me avente la creacion de VirtualHosts a mano y ya quedo, el "problema" es que 
> los accesos web a los diferentes sitios hospedados me regresan "You don't 
> have permission to view / Directory" o algo asi... Revisando el <VirtualHost> 
> todo era correcto y de repente me fije en esta directiva
>
>
>    DocumentRoot /home/usuario/public_html
> y cai en que la cuestion era el permiso de acceso al directorio public_html, 
> asi que le di permiso 755 pero no fue suficiente, resulta que a "usuario" 
> tambien le tuve que poner 755 lo cual NO ME GUSTA NADA pero bueno ahorita la 
> urgencia era que funcionara nuevamente...
>
> Necesito volver a dejar los accesos en 700 (rwx------) pero que puedo hacer 
> para garantizar que el servidor apache tenga acceso a 
> /home/usuario/public_html sin tener que poner permisos rwxr--r-- ?
>
> Los usuarios los he generado manualmente y no seran mas de 4 o 5 asi que 
> puedo arreglar a mano los public_html y directorios para subdominios, pero no 
> se cual sea la mejor solucion.
>
> Por ahora como segunda aproximacion a la solucion se me ocurrio utilizar los 
> grupos de usuario para permitir el acceso. En este momento solo he creado 2 
> usuarios con su propio GID y UID, lo que se me ocurre primero es cambiarle el 
> grupo a los usuarios por uno *GENERAL* para todos, hay un grupo ya existente 
> "users", acabo de cambiar el grupo a todos mis usuarios a "users" y agregue 
> el usuario apache al grupo "users", el detalle es que aun tengo que usar 
> permiso en directorio home y public 750 (rwxr-x---)
>
> Digamos que mis usuarios quedaron asi en /etc/passwd
>
> apache:x:48:48:Apache:/var/www:/sbin/nologin
> fulano:x:1000:100::/home/fulano:/sbin/nologin
> mengano:x:1001:100::/home/mengano:/sbin/nologin
> perengano:x:1002:100::/home/perengano:/sbin/nologin
>
> y mis grupos quedaron asi
>
> users:x:100:apache
>
> Los permisos de directorio los puse asi
>
> /home/usuario* 700
> /home/usuario*/public_html 700
>
> Y ya se encuentra funcionando el primer sitio que he subido... Aunque me 
> gustaria saber si hay alguna otra alternativa para permitir el acceso a 
> Apache a estos directorios sin tener que poner manualmente permiso para cada 
> usuario o subdominio que agrego... igual no seran muchos pero me interesa mas 
> por saber como se hace...
>
> Saludos y gracias!



-- 
Caminar y caminar por la vereda del saber...
... de vez en cuando, mirar una estrella.

Francisco de Jesús Orozco Ruiz
Administración de Redes e Internet
Centro de Enseñanza Técnica Industrial - GDL

Responder a