Jak se vyhnout použití sudo při práci v / var / www?

162

Chci přestat muset používatsudo pokaždé, když pracuji v/var/www. Jak to mohu udělat? Prostě chci dát do svých adresářů všechny své stránky a pracovat s nimi bez přílišné bolesti.

    
dané TaylorOtwell 01.06.2011 05:43

8 odpovědí

229

Nejvíce odpovědí zde není napsáno s ohledem na bezpečnost. Je dobré mít pocit, že běhsudo pokaždé není příliš moudrý. Pokud uděláte překlep (např. ( nevykonávejte )sudo rm -rf / var/www/dir), můžete systém smazat.

Poznámka: Počínaje aplikací Apache 2.4.7 / Ubuntu 14.04 bylo/var/www přesunuto na/var/www/html Upravte příkazy v této odpovědi.

Viz:

Špatné nápady:

  • chmod 777 (sagarchalise) - umožňuje každému, kdo má přístup k vašemu systému, zapisovat do adresářů a souborů a tím dovolit vetřelci provést libovolný kód pod uživatelemwww-data
  • chgrp -R www-data $HOME (cob) - umožňujewww-data číst nebo zapisovat všechny soubory v domovském adresáři. To neznamená zachování pravidla Nejnižší oprávnění
  • chown -R $USER:$USER /var/www (kv1dr) - pokud svět nemá oprávnění ke čtení na/var/www, webový server spuštěný podwww-data nebude schopen číst (zobrazovat) soubory. Je-li soubor veřejně přístupný prostý dokument HTML, nemusí být problém, pokud může svět číst soubor. Pokud je však soubor PHP obsahující hesla, je to.

POZNÁMKA : v níže uvedených řešeních jsem udělilwww-data oprávnění k zápisu. Nicméně/usr/share/doc/base-passwd/users-and-groups.txt.gz uvádí:

  

www data      

Některé webové servery běží jako www-data. Webový obsah by neměl být vlastněn tímto     uživatel nebo kompromitovaný webový server by byl schopen přepsat webovou stránku. Data     napsané webovými servery budou vlastněny www-daty.

Pokud je to možné, udělejte ne oprávnění k zápisu do skupinywww-data. www-data musí být schopen číst soubory, aby jim mohl webový server sloužit. Jediný případ, kdywww-data potřebuje zapisovat oprávnění, je pro adresáře, které ukládají nahrávky a další místa, která je třeba zapsat.

Řešení 1

Přidejte se do skupinywww-data a nastavte bit setgid na adresář/var/www tak, aby všechny nově vytvořené soubory zdědily tuto skupinu.

sudo gpasswd -a "$USER" www-data

Opravte dříve vytvořené soubory (za předpokladu, že jste jediným uživatelem/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 {} \;

(ještě bezpečnější: použijte640 nebo2750 a ručněchmod g+w file-or-dir, které musí být zapisovatelné webovým serverem)

Řešení 2

Vytvořte symbolický odkaz pro každý projekt v domovském adresáři. Řekněme, že váš projekt je umístěn na~/projects/foo a chcete jej umístit na/var/www/foo, spusťte:

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

Pokud váš domovský adresář nemá nastavený bit (sestup) nastavený proother (z bezpečnostních důvodů), změňte jeho skupinu nawww-data, ale nastavte pouze bit vykonávání číst psát). Totéž platí pro složku~/projects, protože může obsahovat i jiné projekty než www. (Nepotřebujetesudo, pokud jste dříve přidali svého uživatele do skupinywww-data.)

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

Nastavte skupinu nawww-data na~/projects/foo a nechte webový server číst a zapisovat do souborů a souborů + adresářů a sestupovat do adresářů:

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

Ještě bezpečnější: ve výchozím nastavení používejte 640 a 2750 a manuálně chmodové soubory a adresáře, které musí uživatel zapisovat do webového serveru. Bit setgid by měl být přidán pouze pokud chcete, aby každý nově vytvořený soubor v~/projects/foo byl přístupný skupině.

Od této chvíle můžete přistupovat k vašemu webu na adresehttp://localhost/foo a upravovat soubory projektu v~/projects/foo.

Viz také

odpověděl Lekensteyn 01.06.2011 11:48
7

Místo umístění webových stránek v adresáři / var / www odkazuji na stránky, které jsou umístěny v mé domovské složce. Mohu svobodně upravit nebo přidat stránky na mé stránky. Když budu spokojen se změnami, pak FTP na hostingovou společnost, kde se odkazuje na doménové jméno.

    
odpověděl fragos 01.06.2011 09:06
6

Pokud vytvoříte / var / www zapisovatelnou svou skupinou a přidáte se do skupiny, nebudete muset používat sudo, zatímco je stále poměrně bezpečný. Zkuste toto:

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

Potom byste měli mít možnost upravit/var/www/ souborů bez potíží.

První řádek vás přidá do skupinywww-data, druhý řádek vymaže všechny soubory se zaviněným vlastnictvím a třetí provede tak, aby všichni uživatelé, kteří jsou členy skupinywww-data, mohli číst a zapisovat všechny soubory v/var/www.

    
odpověděl Azendale 01.07.2011 02:41
5

Nepřidávejte

  • Nenastavujte oprávnění k souborům 777

    Jedná se o závažnou chybu zabezpečení, zejména pokud povolíte skriptování na straně serveru, jako je PHP. Nepřípustné procesy by neměly být schopné psát do souborů, které by ovlivnily webovou stránku, nebo v případě použití skriptování na straně serveru spustit libovolný kód.

  • Nepřidávejte jako člen skupiny www-data a udělejte jí oprávnění k zápisu

    Účelem této skupiny je, že je nepřátelská skupina, kterou server zpracovává spouštět jako. Měli by mít pouze přístup k souborům webových stránek, pokud je to možné, z výše uvedených důvodů.

  • Neměňte oprávnění procesů Apache

    Aplikační procesy Apache běží ve výchozím nastavení jako uživatel a skupinawww-data a toto by nemělo být změněno. Jedná se pouze o to, aby jim nebylo uděleno oprávnění k zápisu do souborového systému.

    Za určitých okolností chcete, aby vaše skripty na straně serveru mohly zapisovat do souborů, v takovém případě pouze tyto soubory by měly být zapisovatelné pomocíwww-data a je třeba věnovat pozornost zajištění zabezpečení.

Dos

  • Nastavte si vlastní soubory

    Pokud jste jediný nebo obvyklý, chcete-li upravit určité soubory na webových stránkách, pak je naprosto smysl, aby jste převzali vlastnictví těchto souborů. Nastavte vlastníka na<your username>.

    Nemusíte upravovat oprávnění serveru, protože server bude i nadále získávat přístup pouze ke čtení, i když jsou ve vašem vlastnictví.

  • Zvolte rozumné místo pro uložení souborů (pomocí DocumentRoot )

    Pokud/var/www nemá smysl, můžete je umístit jinde. Pokud jsou specifické pro váš vývoj nebo testování, můžete je umístit do svého domovského adresáře. Nebo můžete nastavit některé adresáře v/srv.

  • Pokud chcete dát přístup k zápisu group , vytvořte pro tento účel novou skupinu

    Nepoužívejte opakovaně systémovou skupinu, protože jsou z bezpečnostních důvodů typicky navrženy tak, aby měly přístup, který mají v současné době.

odpověděl thomasrutter 24.11.2016 00:43
5

Je to jednoduché. Nepotřebujete povolit apache 'UserDir' (nedoporučuje se) ani nesměšovat skupiny 'www-data' (apache group v případě Fedory)

Stačí vytvořit svůj adresář projektu uvnitř/var/www/html

cd /var/www/html
sudo mkdir my_project

Poté spusťte adresář projektu uživateli.

sudo chown your_username my_project

Nyní můžete začít pracovat ve své složce projektu jako běžný uživatel s libovolným editorem IDE podle vašeho výběru. Žádné další sudos :)

    
odpověděl Gayan Weerakutti 06.08.2016 09:49
1

chmod v adresáři / var na www, aby měl majitel přístup a chown, aby se ujistil, že ho vlastníte. Pravděpodobně hloupý nápad, ale rozhodně to funguje.

    
odpověděl Daniel 01.06.2011 05:59
1

Můžete spustit www-session v terminálu pomocí

sudo su www-data

V kombinaci s jiným barevným příkazem *, aby bylo zřejmé, že je to shell jiného uživatele, a politika vždy dává odpovídající xterm (a editor a podobně) například - virtuální desktop 4 , abyste si na to zvykli, abyste se vyhnuli nejasnostem.

*) Pro jinou barevnou výzvu s odlišným charakterem vytvořte soubor / etc / prompt takto:

# 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 %pr_dfe% (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

a zdroj z/etc/bash.bashrc například.

Jako další nástroj, který vám pomůže rozlišovat, můžete vždy upravovat soubory pomocí aliasu "editovat" nebo symbolického odkazu, což ukazuje na vaši totožnost (taylor / www-data) na gedit nebo mousepad, vim nebo pico. Nebo můžete použít různé profily editoru, alespoň v gedit můžete nastavit vaše preference na černý text na bílém podkladu nebo bílý text na černém podkladu například.

Mám pouze takovou politiku pro práci jako kořen, takže si nejsem jistý, jak dobře to bude pracovat s www daty. V kombinaci s ssh-sessions k různým hostitelům, které mají své vlastní výzvy, to mě nezastavilo z toho, že jsem někdy špatně, ale pokud se to stane, uvědomím si rychle, co je špatné a to se děje zřídka.

poznámka: Příkazový skript je částečně kopií stránky bash.

    
odpověděl user unknown 01.06.2011 17:49
-1

Na této stránce mých stránek pokrývám příkazy pro změnu oprávnění v/var/www mezi apache a pi ale jeho základní

sudo chown -R pi /var/www

a potom restartujte apache

sudo service apache2 restart
    
odpověděl Nathan Dickson 24.11.2016 00:27