Hogyan kerüljük el a sudo használatát a / var / www alatt?

162

Nem akarom használni asudo -ot minden alkalommal, amikor a (z)/var/www -ban dolgozom. Hogyan tehetem ezt? Egyszerűen csak az összes webhelyemet szeretném elhelyezni ebbe a könyvtárba, és túl sok fájdalom nélkül dolgozni velük.

    
készlet TaylorOtwell 01.06.2011 05:43
forrás

8 válasz

229

A legtöbb válasz itt nem biztonsági szempontból készült. Jó érzés, hogy azsudo futása minden alkalommal nem túl bölcs. Ha hibát (például ( nem hajt végre )sudo rm -rf / var/www/dir), akkor eldobhatja a rendszert.

Megjegyzés: Az Apache 2.4.7 / Ubuntu 14.04-es verziótól kezdődően a/var/www át lett helyezve a/var/www/html -ra. Változtassa meg ennek megfelelően a parancsokat.

Lásd:

Rossz ötletek:

  • chmod 777 (sagarchalise) - ez lehetővé teszi, hogy bárki hozzáférhessen a rendszeréhez, írjon a könyvtárakba és fájlokba, és ezzel lehetővé tegye az intrudernek, hogy végrehajtson minden kódot awww-data user
  • chgrp -R www-data $HOME (cob) - ez lehetővé teszi awww-data számára, hogy elolvassa vagy írja a fájlokat a home könyvtárban. Ez nem tartja szem előtt a legkisebb jogosultság szabályt
  • chown -R $USER:$USER /var/www (kv1dr) - hacsak a világ olvasási engedélyeit/var/www -ban nem tudja olvasni, awww-data alatt futó webszerver nem tudja olvasni (kiszolgálni) a fájlokat. Ha a fájl közönségesen elérhető, egyszerű HTML dokumentum, előfordulhat, hogy nem probléma, ha a világ elolvashatja a fájlt. De ha a fájl egy PHP-fájl, amely jelszavakat tartalmaz, ez van.

MEGJEGYZÉS : az alábbi megoldásoknál megadtamwww-data írási jogosultságokat. A/usr/share/doc/base-passwd/users-and-groups.txt.gz azonban kijelenti:

  

www-adatok

     

Néhány webszerver www-adatként működik. A webes tartalom nem tulajdonítható ennek     felhasználó vagy kompromittált webszerver képes lenne újraírni egy weboldalt. Adat     a webkiszolgálók által írt weboldal tulajdonosa a www-adatok tulajdonosa.

Ha lehetséges, írja le a nem írási engedélyt awww-data csoportba. A (z)www-data csak képes olvasni a fájlokat, hogy a webszerver képes legyen kiszolgálni. Az egyetlen eset, ahol awww-data írási jogosultságokra van szüksége, a feltöltések tárolására szolgáló könyvtárakhoz és más helyekhez kell írni.

1. megoldás

Add hozzá awww-data csoporthoz, és állítsd be a setgid bitet a/var/www könyvtárba úgy, hogy az újonnan létrehozott fájlok örököljék ezt a csoportot is.

sudo gpasswd -a "$USER" www-data

Korrigálja a korábban létrehozott fájlokat (feltéve, hogy az egyetlen/var/www felhasználó):

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 {} \;

(még biztonságosabb: használja a640 vagy a2750 -ot, és manuálisan achmod g+w file-or-dir -ot, amelyet a webszervernek írnia kell)

2. megoldás

Hozzon létre egy szimbolikus linket minden egyes projekthez a saját könyvtárához. Mondja el, hogy a projekt a (z)~/projects/foo -ban található, és azt szeretné, hogy a/var/www/foo -ban futjon:

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

Ha a saját könyvtárban nem létezik végrehajtási bit (leereszkedett) aother -ra (biztonsági okok miatt), módosítsa annak csoportjátwww-data -ra, de állítsa be a végrehajtás bitjét (nincs ír olvas). Csináld ugyanazt a~/projects mappába, mert más projekteket is tartalmazhat, mint a www. (sudo nem szükséges, ha korábban hozzáadta a felhasználót awww-data csoporthoz.)

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

Állítsa be a csoportot awww-data -ban a~/projects/foo -ra, és hagyja, hogy a webszerver olvassa és írjon fájlokat és fájlokat + könyvtárakat, és engedje le a könyvtárakat:

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

Még biztonságosabb: alapértelmezésben a 640 és a 2750, valamint manuálisan a chmod fájlok és könyvtárak, amelyeket a webszerver felhasználója írhat. A setgid bitet csak akkor kell hozzáadni, ha minden újonnan létrehozott fájlt a~/projects/foo -ban elérhetővé kíván a csoport.

Mostantól elérheti webhelyét a (z)http://localhost/foo -ban, és szerkesztheti projektfájljait a (z)~/projects/foo -ban.

Lásd még

válasz adott Lekensteyn 01.06.2011 11:48
forrás
7

Ahelyett, hogy tárolnám a weblapjaimat a / var / www könyvtárba, ott elhelyezném a linkeket a saját mappámon található webhelyekhez. Szabadon szerkeszthetek, vagy oldalakat adhatok az oldalamhoz. Amikor elégedett vagyok a változásokkal, akkor az FTP egy hosting céghez, ahol domainnevem kapcsolódik.

    
válasz adott fragos 01.06.2011 09:06
forrás
6

Ha a csoportját írja / var / www, és hozzáadja magát a csoporthoz, nem kell a sudo-t használni, miközben még mindig meglehetősen biztonságos. Próbálja ki ezt:

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

Ezután képes lesz/var/www/ fájlok szerkesztésére gond nélkül.

Az első sor hozzáadja awww-data csoporthoz, a második sor törli a fájlokat, és a harmadik teszi azt úgy, hogy minden felhasználó, aki tagja awww-data csoportnak, képes olvasni és írni mindent fájlok/var/www -ban.

    
válasz adott Azendale 01.07.2011 02:41
forrás
5

ne tegye

  • Ne állítson be fájlengedélyeket 777 (world-írható)

    Ez jelentős biztonsági hiba, különösen akkor, ha engedélyezi a kiszolgálóoldali szkripteket, például a PHP-t. A hátrányos helyzetű folyamatoknak nem szabad tudniuk írni olyan fájlokat, amelyek befolyásolhatják a webhelyet, vagy ha a kiszolgálóoldali szkriptek használata során tetszőleges kódot futtat.

  • Ne add fel magad a www-adat csoport tagjaként, és írj engedélyeket

    Ennek a csoportnak az a célja, hogy egy hátrányos helyzetű csoport, amelyre a szerver folyamatok futnak. A honlapfájlokat csak akkor lehet olvasni, ha lehetséges, ugyanazok a okok miatt, mint a fentiek.

  • Ne módosítsa az Apache folyamatok engedélyeit

    Az Apache gyermeket alapértelmezés szerintwww-data felhasználóként és csoportként futtatja, és ezt nem szabad megváltoztatni. Ez csak egy módja annak, hogy ne adjanak meg engedélyt a fájlrendszerre.

    Bizonyos körülmények között a kiszolgálóoldali parancsfájloknak képesnek kell lenniük a fájlok írására, amely esetben csak ezeket a fájlokat awww-data -al írhatóvá kell tenni, és gondoskodni kell arról, hogy biztonság.

Dos

  • Állítsa be a saját tulajdonú fájlokat

    Ha Ön vagy az egyetlen, vagy a szokásos, hogy módosítsa bizonyos fájlokat a weboldalon, akkor teljesen értelme csak a tulajdonjogát a fájlokat. Állítsa be tulajdonosát<your username> -ra.

    Nem szükséges módosítani a kiszolgálói jogosultságokat, mivel a kiszolgáló továbbra is csak olvasható hozzáférést kap, még akkor is, ha a fájlok tulajdonosa.

  • Válasszon egy ésszerű helyet a fájlok elhelyezéséhez ( DocumentRoot )

    Ha a/var/www -nak nincs értelme, akkor üdvözölhetjük őket máshol. Ha saját fejlesztésű vagy tesztelésűek, akkor elhelyezheti őket a saját könyvtárába. Vagy beállíthat néhány könyvtárat a/srv -ban.

  • Ha csoport írási hozzáférést szeretne adni, hozzon létre egy új csoportot

    Ne használja újra a rendszercsoportot, mert ezeket rendszerint biztonsági okokból úgy tervezték meg, hogy rendelkezzenek hozzáféréssel, és nem többé.

válasz adott thomasrutter 24.11.2016 00:43
forrás
5

Ez egyszerű. Nem kell engedélyezni az apache "UserDir" (nem ajánlott) és nem zavarja a "www-data" csoportokat (apache csoport a Fedora esetében)

Csak hozza létre a projektkönyvtárat a/var/www/html

belül
cd /var/www/html
sudo mkdir my_project

A projektkönyvtárat csak a felhasználónak kell megadnod.

sudo chown your_username my_project

Most már elkezdheti a projekt mappáján dolgozni, mint egy normál felhasználó bármilyen szerkesztővel, az Ön által választott IDE-vel. Nincs több sudos :

    
válasz adott Gayan Weerakutti 06.08.2016 09:49
forrás
1

chmod a / var könyvtárban a www-ben, hogy engedélyezze a tulajdonos hozzáférését, és chown, hogy megbizonyosodjon róla, hogy tulajdonosa. Valószínűleg egy hülye ötlet, de határozottan működne.

    
válasz adott Daniel 01.06.2011 05:59
forrás
1

Kezdhet egy www-munkamenetet egy terminálon

sudo su www-data

Egy eltérő színű prompt * -gal kombinálva, hogy nyilvánvalóbb legyen, hogy ez egy másik felhasználó shellje, és mindig a megfelelő xterm (és a szerkesztő, illetve hasonló) , hogy megszokja, hogy elkerülje a zavarodottságot.

*) Egy eltérő színű, differnt karakterrel rendelkező parancs esetén hozzon létre egy / etc / prompt parancsot, mint ez:

# 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

és forrása a/etc/bash.bashrc -ból például.

A különbségtételhez további eszközként mindig módosíthatja a fájlokat egy "szerkesztés" alias vagy egy szimbolikus hivatkozással, amely a személyazonosságától (taylor / www-adatok) függően megadja a gedit vagy egér, vim vagy pico értéket. Vagy különböző szerkesztőprofilokat is használhatsz, de legalább a geditben beállíthatja a preferenciáit fehér alapon fehér vagy fekete textúrájú fekete szöveggel.

Nekem van egy olyan politikája, mint a gyökér, ezért nem vagyok biztos benne, milyen jó lesz a www-adatokkal való munkához. Az ssh-munkamenetekkel kombinálva a különbözõ házigazdákhoz, amelyeknek saját kéréseik vannak, nem akadályozta meg, hogy néha tévedjenek, de ha ez megtörténik, gyorsan felismerem, mi a baj, és ritkán fordul elõ.

Megjegyzés: A prompt-script részben a bash bash man oldalának egy példánya.

    
válasz adott user unknown 01.06.2011 17:49
forrás
-1

A oldalam ezen oldalán lefedi az engedély módosításának parancsát a% ca_kde% -ban az apache és a pi felhasználó, de alapvető fontosságú

sudo chown -R pi /var/www

majd apache újraindítás

sudo service apache2 restart
    
válasz adott Nathan Dickson 24.11.2016 00:27
forrás