Frage Wie vermeidet man die Verwendung von Sudo bei der Arbeit in / var / www?


Ich möchte aufhören zu benutzen sudo immer wenn ich arbeite /var/www. Wie kann ich das machen? Ich möchte einfach alle meine Seiten in dieses Verzeichnis einfügen und ohne großen Aufwand mit ihnen arbeiten.


162
2018-06-01 03:43


Ursprung


Benutzt du Apache? - Rinzwind
Nach dem Lesen kann dies auch im Berechtigungsteil helfen: askubuntu.com/questions/20105/ ... - Luis Alvarado♦
Eine weitere Möglichkeit, Sicherheit zu bekommen, besteht darin, weiter zu verwenden sudo -u www-data aber beschränke dich in der sudoers Datei nur zu können sudo www-data (und nicht sudo root). Sehen serverfault.com/questions/295429/ ... - Simon Woodside


Antworten:


Die meisten Antworten hier sind nicht mit Sicherheit geschrieben. Es ist gut, ein Gefühl dafür zu bekommen, dass es läuft sudo jedes Mal ist nicht sehr weise. Wenn Sie einen Tippfehler machen (z. B.nicht ausführen) sudo rm -rf / var/www/dir), könnten Sie Ihr System zerstören.

Hinweis: Beginnend mit Apache 2.4.7 / Ubuntu 14.04, /var/www wurde verschoben nach /var/www/html Passen Sie die Befehle in dieser Antwort entsprechend an.

Sehen:

Schlechte Ideen:

  • chmod 777 (sagarmalise) - das erlaubt jedem, der Zugang zu Ihrem System hat, in die Verzeichnisse und Dateien zu schreiben und dadurch dem Eindringling zu erlauben, irgendeinen Code unter dem Code auszuführen www-data Benutzer
  • chgrp -R www-data $HOME (Cob) - das ermöglicht www-data um Dateien im Home-Verzeichnis zu lesen oder zu schreiben. Dies berücksichtigt nicht die Regel des kleinsten Privilegs
  • chown -R $USER:$USER /var/www (kv1dr) - Es sei denn, die Welt hat Berechtigungen gelesen /var/www, der Webserver läuft unter www-data kann die Dateien nicht lesen (bereitstellen). Wenn es sich bei der Datei um ein öffentlich zugängliches einfaches HTML-Dokument handelt, ist dies möglicherweise kein Problem, wenn die Welt die Datei lesen kann. Aber wenn die Datei eine PHP-Datei ist, die Passwörter enthält, ist es das.

HINWEIS: In den folgenden Lösungen habe ich gewährt www-data Schreibrechte. Jedoch, /usr/share/doc/base-passwd/users-and-groups.txt.gz Zustände:

www-Daten

Einige Webserver laufen als www-Daten. Webinhalte sollten nicht im Besitz dieser sein     Benutzer oder ein kompromittierter Webserver wäre in der Lage, eine Website neu zu schreiben. Daten     Ausgeschrieben von Webservern wird www-data gehören.

Wo immer möglich, tun nicht Erteilen Sie Schreibberechtigungen für die www-data Gruppe. www-data muss nur können lesen die Dateien, damit der Webserver sie bedienen kann. Der einzige Fall, in dem www-data Schreibrechte benötigt für Verzeichnisse, die Uploads und andere Orte speichern, die geschrieben werden müssen.

Lösung 1

Fügen Sie sich dem hinzu www-data gruppieren und setzen Sie das Setgid - Bit auf die /var/www Verzeichnis, so dass alle neu erstellten Dateien diese Gruppe erben.

sudo gpasswd -a "$USER" www-data

Korrigieren Sie zuvor erstellte Dateien (vorausgesetzt, Sie sind der einzige Benutzer von /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 {} \;

(Noch sicherer: benutzen 640 oder 2750 und manuell chmod g+w file-or-dir das muss vom Webserver beschreibbar sein)

Lösung 2

Erstellen Sie einen Symlink für jedes Projekt in Ihrem Home-Verzeichnis. Angenommen, Ihr Projekt befindet sich in ~/projects/foo und Sie möchten, dass es sich an diesem Ort befindet /var/www/foo, Lauf:

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

Wenn in Ihrem Home-Verzeichnis kein Execute-Bit (Abstieg) für gesetzt ist other (aus Sicherheitsgründen), ändern Sie die Gruppe auf www-data, aber setze nur das Ausführungsbit (nicht lesen / schreiben). Mach das gleiche für die ~/projectsOrdner, da es andere Projekte als www enthalten kann. (Sie brauchen nicht sudo wenn Sie Ihren Benutzer zuvor dem Benutzer hinzugefügt haben www-data Gruppe.)

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

Setzen Sie die Gruppe auf www-data auf ~/projects/foo und erlauben Sie dem Webserver, in Dateien und Dateien + Verzeichnisse zu lesen und zu schreiben und in Verzeichnisse abzusteigen:

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

Noch sicherer: Verwenden Sie standardmäßig 640 und 2750 und manuell chmod Dateien und Verzeichnisse, die vom Webserver-Benutzer beschreibbar sein müssen. Das Setgid-Bit sollte nur hinzugefügt werden, wenn Sie jede neu erstellte Datei möchten ~/projects/foo für die Gruppe zugänglich sein.

Von nun an können Sie auf Ihre Website zugreifen http://localhost/foo und bearbeiten Sie Ihre Projektdateien in ~/projects/foo.

Siehe auch


229
2018-06-01 09:48



Was denkst du über eine WWW-Sitzung in einem Terminal von? sudo su www-data? Kombiniert mit einer andersfarbigen Eingabeaufforderung, um es offensichtlicher zu machen, dass es sich um die Shell eines anderen Benutzers handelt und eine Richtlinie immer den entsprechenden xterm an - zum Beispiel - den virtuellen Desktop 4, damit man sich daran gewöhnt, zu Verwirrung vermeiden? - user unknown
@user unknown: wenn Sie alles im Terminal tun, da Sie eine klare Trennung zwischen Benutzerkonten haben. Aber es wird nicht funktionieren, wenn Sie ein GUI-Programm wie verwenden gedit. Ich habe nie untersucht, ob das Ausführen eines GUI-Programms unter einem anderen Benutzer in der aktuellen Sitzung sicher ist oder nicht, es wäre eine interessante Frage. - Lekensteyn
@imaginaryRobots: Wenn ich für jede Frage verschiedene Lösungen posten würde, wäre Askubuntu voller Antworten von drei Zeilen. Ich behalte es wie es ist, außer du kannst mich davon überzeugen, es zu teilen. - Lekensteyn
@berbt setfacl -d u::rwX,g::rX /var/www hat den lustigen Effekt, dass der Standardmodus zu 0750 (oder 0640) wird, selbst wenn die Umask Null ist. Es ist vielleicht eine gute Idee, wenn Sie weltweit schreibbare Dateien vermeiden möchten, aber wenn /var/www ist bereits von der Welt nicht zugänglich, es wird nicht benötigt. - Lekensteyn
Gibt es ein Problem beim Invertieren des Prozesses in Lösung 1? Damit meine ich, /var/www/app01 hat Eigentum app01:app01und dann die www-data  Benutzer wird dem hinzugefügt app01  Gruppe? Oder wird das etwas brechen? - Jack_Hu


Anstatt meine Webseiten unter / var / www zu speichern, platziere ich dort Links zu den Seiten, die sich in meinem persönlichen Ordner befinden. Ich kann frei bearbeiten oder Seiten zu meinen Seiten hinzufügen. Wenn ich mit Änderungen zufrieden bin, dann füge ich FTP zu einem Hosting-Unternehmen, wo mein Domain-Name verlinkt.


7
2018-06-01 07:06



Dies ist eine vernünftige Idee. - thomasrutter


Wenn Sie / var / www für seine Gruppe schreibbar machen und sich der Gruppe hinzufügen, müssen Sie sudo nicht verwenden, solange es noch ziemlich sicher ist. Versuche dies:

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

Sie sollten dann in der Lage sein zu bearbeiten /var/www/ Dateien ohne Probleme.

Die erste Zeile bringt Sie zum www-data Gruppe, die zweite Zeile löscht alle Dateien mit vermischten Besitz, und die dritte macht es so, dass alle Benutzer, die Mitglieder der www-data Gruppe kann alle Dateien lesen und schreiben /var/www.


6
2017-07-01 00:41



Dies ist eine sehr schlechte Idee für die Sicherheit und dieser Rat sollte nicht befolgt werden, aus Gründen, die in anderen Antworten erläutert werden. www-data soll ein sein unterpriviligiert Gruppe, ohne Schreibzugriff. - thomasrutter


Don'ts

  • Legen Sie keine Dateiberechtigungen für fest 777 (weltweit beschreibbar)

    Dies ist eine erhebliche Sicherheitslücke, insbesondere wenn Sie serverseitiges Scripting wie PHP aktivieren. Unprivilegierte Prozesse sollten nicht in der Lage sein, in Dateien zu schreiben, die sich auf die Website auswirken würden, oder im Falle von serverseitigem Scripting beliebigen Code auszuführen.

  • Füge dich nicht als Mitglied der www-Daten Gruppe und geben Sie ihm Schreibrechte

    Der Zweck dieser Gruppe ist, dass es ein unterpriviligiert Gruppe, dass die Serverprozesse Rennen wie. Sie sollten den Zugriff auf die Website-Dateien nach Möglichkeit nur aus den gleichen Gründen wie oben lesen können.

  • Ändern Sie nicht die Berechtigungen der Apache-Prozesse

    Die Apache-Kindprozesse laufen als www-data Benutzer und Gruppe standardmäßig, und dies sollte nicht geändert werden. Dies ist nur eine Möglichkeit, ihnen keine Schreibberechtigung für das Dateisystem zu geben.

    Unter bestimmten Umständen möchten Sie, dass Ihre serverseitigen Skripts in der Lage sind, in diesem Fall in Dateien zu schreiben nur Diese Dateien sollten schreibbar gemacht werden www-data und es muss darauf geachtet werden, dass die Sicherheit gewährleistet ist.

DOS

  • Legen Sie fest, dass die Dateien für Sie bestimmt sind

    Wenn Sie als Einziger oder als normaler Benutzer bestimmte Dateien auf der Website ändern, ist es absolut sinnvoll, nur diese Dateien zu übernehmen. Setze ihren Besitzer auf <your username>.

    Sie müssen die Serverberechtigungen dafür nicht ändern, da der Server auch weiterhin schreibgeschützten Zugriff erhält, selbst wenn die Dateien in Ihrem Besitz sind.

  • Wählen Sie einen sinnvollen Platz für die Dateien (mit Dokument Root)

    Ob /var/www macht keinen Sinn, du kannst sie gerne woanders hinbringen. Wenn sie spezifisch für Ihre eigene Entwicklung oder Tests sind, können Sie sie in Ihrem Home-Verzeichnis ablegen. Oder Sie können einige Verzeichnisse in einrichten /srv.

  • Wenn du geben willst Gruppe Schreibzugriff, erstelle ein Neu Gruppe für den Zweck

    Verwenden Sie eine Systemgruppe nicht erneut, da diese normalerweise aus Sicherheitsgründen den aktuellen Zugriff haben.


5
2017-11-23 23:43





Es ist so einfach. Du brauchst weder den Apache 'UserDir' (nicht empfohlen) zu aktivieren noch die 'www-data' Gruppen (Apache Gruppe im Falle von Fedora)

Erstellen Sie einfach Ihr Projektverzeichnis darin /var/www/html

cd /var/www/html
sudo mkdir my_project

Dann einfach das Projektverzeichnis zu Ihrem Benutzer chown.

sudo chown your_username my_project

Jetzt können Sie anfangen, an Ihrem Projektordner als normaler Benutzer mit einem Editor Ihrer Wahl zu arbeiten. Nicht mehr sudos :)


5
2017-08-06 07:49



+1 Das ist was ich tue: Besitz ändern nicht von /var/www selbst, aber von Unterverzeichnissen. - fkraiem


chmod in / var auf www, um dem Besitzer Zugriff zu gewähren, und chown, um sicherzustellen, dass Sie es besitzen. Wahrscheinlich eine dumme Idee, aber es würde definitiv funktionieren.


1
2018-06-01 03:59



Keine dumme Idee, es ist eine vernünftige Idee in Bezug auf die Sicherheit. Hinweis: Sie müssen (und sollten nicht) die Berechtigungen von ändern /var, gerade /var/www und / oder seinen Inhalt. - thomasrutter


Sie könnten in einem Terminal eine WWW-Sitzung starten

sudo su www-data

Kombiniert mit einer andersfarbigen Eingabeaufforderung *, um es offensichtlicher zu machen, dass es die Shell eines anderen Benutzers ist, und eine Richtlinie, immer den entsprechenden xterm (und Editor und so weiter) auf - zum Beispiel - den virtuellen Desktop 4, so dass Sie gewöhnen sich daran, um Verwirrung zu vermeiden.

*) Für eine andersfarbige Eingabeaufforderung mit einem anderen Zeichen erstellen Sie eine Datei / etc / Eingabeaufforderung wie folgt:

# 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

und es ausquellen /etc/bash.bashrc zum Beispiel.

Als zusätzliches Hilfsmittel zur Unterscheidung können Sie Ihre Dateien immer mit einem Alias ​​'Bearbeiten' oder einem Symlink bearbeiten, der je nach Ihrer Identität (taylor / www-data) entweder auf gedit oder mousepad, vim oder pico zeigt. Oder Sie können verschiedene Editorprofile verwenden, zumindest in gedit können Sie Ihre Voreinstellungen auf schwarzen Text auf weißem Grund oder weißen Text auf schwarzem Grund einstellen.

Ich habe nur eine solche Richtlinie für die Arbeit als root, also bin ich mir nicht sicher, wie gut es mit www-Daten arbeiten wird. Kombiniert mit SSH-Sitzungen zu verschiedenen Hosts, die ihre eigenen Aufforderungen haben, hielt es mich nicht davon ab, manchmal falsch zu sein, aber wenn es passiert, merke ich schnell, was falsch ist, und es passiert selten.

Hinweis: Das Prompt-Skript ist teilweise eine Kopie der Manpage von bash.


1
2018-06-01 15:49



Dies funktioniert und wird nicht (wenn es vorsichtig verwendet wird) die Sicherheit beeinträchtigen, ist aber möglicherweise nicht die einfachste Lösung. Es ist eine gültige Lösung für einige Leute obwohl. - thomasrutter


Auf diese Seite meiner Seite Ich behandle die Befehle zum Ändern der Berechtigung in /var/www zwischen Apache und dem Pi-Benutzer, aber es ist wichtig

sudo chown -R pi /var/www

dann ein Apache Neustart

sudo service apache2 restart

-1
2017-11-23 23:27



Der Link funktioniert jetzt - Gadgetroid