¿Cómo evitar el uso de sudo cuando se trabaja en / var / www?

163

Quiero dejar de tener que usar sudo cada vez que trabajo en /var/www . ¿Cómo puedo hacer eso? Simplemente quiero poner todos mis sitios en este directorio y trabajar con ellos sin mucho dolor.

    
pregunta TaylorOtwell 01.06.2011 - 05:43

8 respuestas

230

La mayoría de las respuestas aquí no están escritas teniendo en cuenta la seguridad. Es bueno tener la sensación de que ejecutar sudo cada vez no es muy sabio. Si realiza un error tipográfico (por ejemplo, ( no ejecute ) sudo rm -rf / var/www/dir ), podría destruir su sistema.

Nota: A partir de Apache 2.4.7 / Ubuntu 14.04, /var/www se ha movido a /var/www/html . Ajuste los comandos en esta respuesta en consecuencia.

Ver:

Malas ideas:

  • chmod 777 (sagarchalise): esto permite que cualquier persona con acceso a su sistema escriba en los directorios y archivos y, por lo tanto, permita que el intruso ejecute cualquier código bajo el usuario www-data
  • chgrp -R www-data $HOME (cob): esto permite que www-data lea o escriba cualquier archivo en el directorio de inicio. Esto no es tener en cuenta la regla de privilegio mínimo
  • chown -R $USER:$USER /var/www (kv1dr): a menos que el mundo tenga permisos de lectura en /var/www , el servidor web que se ejecuta bajo www-data no podrá leer (servir) los archivos. Si el archivo es un documento HTML plano de acceso público, puede que no sea un problema si el mundo puede leer el archivo. Pero si el archivo es un archivo PHP que contiene contraseñas, lo es.

NOTA : en las soluciones a continuación, he otorgado www-data de privilegios de escritura. Sin embargo, /usr/share/doc/base-passwd/users-and-groups.txt.gz afirma:

  

www-data

     

Algunos servidores web se ejecutan como www-data. El contenido web no debe ser propiedad de este     usuario, o un servidor web comprometido podría reescribir un sitio web. Datos     escrito por los servidores web será propiedad de www-data.

Cuando sea posible, no otorga permisos de escritura al grupo www-data . www-data solo necesita poder leer los archivos para que el servidor web pueda servirlos. El único caso en el que www-data necesita permisos de escritura es para los directorios que almacenan cargas y otras ubicaciones que deben escribirse.

Solución 1

Agregue su nombre al grupo www-data y establezca el bit setgid en el directorio /var/www para que todos los archivos recién creados también hereden este grupo.

sudo gpasswd -a "$USER" www-data

Corrija los archivos creados anteriormente (suponiendo que usted sea el único usuario de /var/www ):

sudo chown -R "$USER":www-data /var/www
find /var/www -type f -exec chmod 0660 {} \;
sudo find /var/www -type d -exec chmod 2770 {} \;

(incluso más seguro: use 640 o 2750 y manualmente chmod g+w file-or-dir que debe poder ser escrito por el servidor web)

Solución 2

Cree un enlace simbólico para cada proyecto a su directorio de inicio. Digamos que su proyecto está ubicado en ~/projects/foo y desea que esté ubicado en /var/www/foo , ejecute:

sudo ln -sT ~/projects/foo /var/www/foo

Si su directorio de inicio no tiene ningún bit de ejecución (descendente) establecido para other (por razones de seguridad), cambie el grupo de él a www-data , pero establezca solo el bit de ejecución (no leer escribir). Haga lo mismo para la carpeta ~/projects ya que puede contener otros proyectos además de www. (No necesita sudo si previamente ha agregado su usuario al grupo www-data ).

sudo chgrp www-data ~ ~/projects
chmod 710 ~ ~/projects

Establezca el grupo en www-data en ~/projects/foo y permita que el servidor web lea y escriba en archivos y archivos + directorios y descienda a directorios:

sudo chgrp www-data ~/projects/foo
find ~/projects/foo -type f -exec chmod 660 {} \;
find ~/projects/foo -type d -exec chmod 2770 {} \;

Aún más seguro: use 640 y 2750 de forma predeterminada, y modifique manualmente los archivos y directorios que el usuario del servidor web debe poder escribir. El bit setgid se debe agregar solo si desea que el grupo pueda acceder a todos los archivos creados recientemente en ~/projects/foo .

De ahora en adelante, puede acceder a su sitio en http://localhost/foo y editar los archivos de su proyecto en ~/projects/foo .

Ver también

respondido por el Lekensteyn 01.06.2011 - 11:48
9

En lugar de almacenar mis sitios web en / var / www, coloco enlaces a los sitios que se encuentran en mi carpeta de inicio. Puedo editar libremente o agregar páginas a mis sitios. Cuando estoy satisfecho con los cambios, a continuación, envío un FTP a una empresa de alojamiento donde se vincula mi nombre de dominio.

    
respondido por el fragos 01.06.2011 - 09:06
6

Si crea / var / www escribible por su grupo y se agrega al grupo, no tendrá que usar sudo mientras se encuentre bastante seguro. Prueba esto:

sudo adduser <username> www-data
sudo chown -R www-data:www-data /var/www
sudo chmod -R g+rw /var/www

Entonces deberías poder editar los archivos /var/www/ sin problemas.

La primera línea lo agrega al grupo www-data , la segunda línea borra cualquier archivo con propiedad desordenada y la tercera lo hace para que todos los usuarios que sean miembros del grupo www-data puedan leer y escribir todo archivos en /var/www .

    
respondido por el Azendale 01.07.2011 - 02:41
5

No hacer

  • No establezca los permisos de archivo en 777 (se puede escribir en todo el mundo)

    Este es un defecto de seguridad importante, especialmente si habilitas las secuencias de comandos del lado del servidor como PHP. Los procesos no privilegiados no deberían poder escribir en archivos que afecten al sitio web o, en el caso de que se utilicen scripts del lado del servidor, ejecutar código arbitrario.

  • No se añada como miembro del grupo www-data y déle permisos de escritura

    El propósito de ese grupo es que es un grupo no privilegiado que los procesos de servidor ejecutan como. Solo deben tener acceso de lectura a los archivos del sitio web cuando sea posible, por las mismas razones que anteriormente.

  • No modifique los permisos de los procesos de Apache

    Los procesos secundarios de Apache se ejecutan como www-data usuario y grupo de forma predeterminada, y esto no debe modificarse. Esta es solo una forma de no otorgarles permiso de escritura al sistema de archivos.

    En ciertas circunstancias, usted quiere que sus scripts del lado del servidor puedan escribir en archivos, en cuyo caso solo esos archivos deberían poder escribirse por www-data y se debe tener cuidado para garantizar seguridad.

Dos

  • Configura los archivos para que sean de tu propiedad

    Si usted es el único, o el habitual, para modificar ciertos archivos en el sitio web, entonces tiene mucho sentido simplemente tomar posesión de esos archivos. Establezca su propietario en <your username> .

    No tiene que modificar los permisos del servidor para esto, ya que el servidor continuará obteniendo acceso de solo lectura incluso cuando los archivos son de su propiedad.

  • Elija un lugar adecuado para guardar los archivos (usando DocumentRoot)

    Si /var/www no tiene sentido, puede colocarlos en otro lugar. Si son específicos para su propio desarrollo o prueba, puede colocarlos en su directorio de inicio. O puede configurar algunos directorios en /srv .

  • Si desea dar acceso de escritura a grupo , cree un grupo nuevo con el fin

    No reutilice un grupo de sistemas, ya que generalmente están diseñados para tener el acceso que tienen actualmente, y no más, por razones de seguridad.

respondido por el thomasrutter 24.11.2016 - 00:43
5

Es así de simple. No necesita habilitar Apache 'UserDir' (no recomendado) ni desordenar los grupos 'www-data' (apache group en el caso de Fedora)

Simplemente crea el directorio de tu proyecto dentro de /var/www/html

cd /var/www/html
sudo mkdir my_project

Luego simplemente chown el directorio del proyecto a su usuario.

sudo chown your_username my_project

Ahora puede comenzar a trabajar en la carpeta de su proyecto como usuario habitual con cualquier editor, IDE de su elección. No más sudos :)

    
respondido por el Gayan Weerakutti 06.08.2016 - 09:49
1

chmod en / var en www para permitir el acceso del propietario, y chown para asegurarse de que usted es el propietario. Probablemente sea una idea estúpida, pero definitivamente funcionaría.

    
respondido por el Daniel 01.06.2011 - 05:59
1

Podrías iniciar una sesión www en una terminal mediante

sudo su www-data

Combinado con un indicador de color diferente *, para que sea más obvio que es el shell de un usuario diferente, y una política para poner el xterm correspondiente (y el editor y demás) en, por ejemplo, el escritorio virtual 4 , para que te acostumbres, para evitar confusiones.

*) Para una solicitud de color diferente con un carácter diferente, cree un archivo / etc / prompt como este:

# PROMPTING
#       When  executing  interactively, bash displays the primary prompt PS1 when it is ready to read a command, and the sec-
#       ondary prompt PS2 when it needs more input to complete a command.  Bash allows these prompt strings to be  customized
#       by inserting a number of backslash-escaped special characters that are decoded as follows:
#              \a     an ASCII bell character (07)
#              \d     the date in "Weekday Month Date" format (e.g., "Tue May 26")
#              \D{format}
#                     the  format is passed to strftime(3) and the result is inserted into the prompt string; an empty format
#                     results in a locale-specific time representation.  The braces are required
#              \e     an ASCII escape character (033)
#              \h     the hostname up to the first '.'
#              \H     the hostname
#              \j     the number of jobs currently managed by the shell
#              \l     the basename of the shell's terminal device name
#              \n     newline
#              \r     carriage return
#              \s     the name of the shell, the basename of $0 (the portion following the final slash)
#              \t     the current time in 24-hour HH:MM:SS format
#              \T     the current time in 12-hour HH:MM:SS format
#              \@     the current time in 12-hour am/pm format
#              \A     the current time in 24-hour HH:MM format
#              \u     the username of the current user
#              \v     the version of bash (e.g., 2.00)
#              \V     the release of bash, version + patchelvel (e.g., 2.00.0)
#              \w     the current working directory
#              \W     the basename of the current working directory
#              \!     the history number of this command
#              \#     the command number of this command
#              \$     if the effective UID is 0, a #, otherwise a $
#              \nnn   the character corresponding to the octal number nnn
#              \     a backslash
#              \[     begin a sequence of non-printing characters, which could be used to embed a terminal  control  sequence
#                     into the prompt
#              \]     end a sequence of non-printing characters
#
#       The  command  number and the history number are usually different: the history number of a command is its position in
#       the history list, which may include commands restored from the history file (see HISTORY below),  while  the  command
#       number  is  the  position in the sequence of commands executed during the current shell session.  After the string is
#
# colors:
# \[...\]   wird benötigt, damit die shell weiß, daß hier kein printable output ist, und die Umbrüche richtig plaziert.
#
# ANSI COLORS
CRE="\[
[K\]"
NORMAL="\[[0;39m\]"
# RED: Failure or error message
RED="\[[1;31m\]"
# GREEN: Success message
GREEN="\[[1;32m\]"
# YELLOW: Descriptions
YELLOW="\[[1;33m\]"
# BLUE: System messages
BLUE="\[[1;34m\]"
# MAGENTA: Found devices or drivers
MAGENTA="\[[1;35m\]"
# CYAN: Questions
CYAN="\[[1;36m\]"
# BOLD WHITE: Hint
WHITE="\[[1;37m\]"
#
# default:
# postgres, oracle, www-data
#
# PS1=$BLUE"machine]->"$NORMAL\w"$BLUE ø $NORMAL"
PS1=$BLUE"machine]:"$NORMAL\w"$BLUE > $NORMAL"
#
# root, stefan:
#
case "$UID" in
    '0')
        PS1=$RED"machine:"$NORMAL\w"$RED # $NORMAL"
    ;;
    '1000')
    PS1=$GREEN"machine:"$BLUE\w$YELLOW" > "$NORMAL
    ;;
#    default)
#    ;;
esac

y la fuente de /etc/bash.bashrc por ejemplo.

Como herramienta adicional para ayudar a la distinción, siempre puede editar sus archivos con un 'alias' o un enlace simbólico, que apunta, según su identidad (taylor / www-data) a gedit o mousepad, vim o pico. O puede usar diferentes perfiles de editor, al menos en gedit puede configurar sus preferencias a texto negro sobre fondo blanco o texto blanco sobre fondo negro, por ejemplo.

Solo tengo una política de este tipo para trabajar como root, por lo que no estoy seguro de lo bueno que es trabajar con www-data. Combinado con sesiones ssh con diferentes hosts, que tienen sus propias indicaciones, no me impidió equivocarme a veces, pero si sucede, me doy cuenta rápidamente de lo que está mal y sucede rara vez.

nota: el script de solicitud es en parte una copia de la página de manual de bash.

    
respondido por el user unknown 01.06.2011 - 17:49
-1

En esta página de mi sitio cubro los comandos para cambiar el permiso en /var/www entre apache y el pi usuario pero es esencial

sudo chown -R pi /var/www

luego un reinicio de apache

sudo service apache2 restart
    
respondido por el Nathan Dickson 24.11.2016 - 00:27

Lea otras preguntas en las etiquetas