/ var / www çalışırken sudo kullanmaktan nasıl kaçınılırsınız?

161

sudo 'de çalışırken /var/www kullanmamayı bırakmak istiyorum. Bunu nasıl yapabilirim? Tüm sitelerimi bu dizine koymak ve çok fazla acı çekmeden onlarla çalışmak istiyorum.

    
sordu TaylorOtwell 01.06.2011 05:43

8 cevap

229

Buradaki çoğu cevap, güvenlik göz önünde bulundurularak yazılmamıştır. Her seferinde sudo çalıştırmanın çok akıllıca olmadığını hissetmek güzel bir şey. Yazım hatası yaparsanız (ör. ( yürütme ) sudo rm -rf / var/www/dir ), sisteminizi çöpe atabilirsiniz.

Not: Apache 2.4.7 / Ubuntu 14.04 ile başlayarak, /var/www ,% co_de dizinine taşındı% Komutları buna göre ayarlayın.

Bkz:

Kötü fikirler:

  • /var/www/html (sagarchalise) - bu, sisteminize erişimi olan herkesin dizinlere ve dosyalara yazmasına ve böylece saldırganın chmod 777 kullanıcısı altındaki herhangi bir kodu çalıştırmasına izin verir
  • www-data (cob) - bu, chgrp -R www-data $HOME 'in giriş dizinindeki herhangi bir dosyayı okumasına veya yazmasına izin verir. Bu en düşük ayrıcalık kuralını akılda tutmuyor
  • www-data (kv1dr) - dünyanın chown -R $USER:$USER /var/www 'sında okuma izinleri yoksa, /var/www altında çalışan web sunucusu dosyaları okuyamayacaktır (sunmayacaktır). Dosya herkes tarafından erişilebilen bir düz HTML belgesiyse, dünyanın dosyayı okuyabileceği bir sorun olmayabilir. Ancak dosya şifre içeren bir PHP dosyasıysa, bu.

NOT : aşağıdaki çözümlerde, www-data yazma ayrıcalığı verdim. Ancak, www-data şunu belirtmektedir:

  

www veriler

     

Bazı web sunucuları www-data olarak çalışır. Web içeriği buna ait olmamalıdır     Kullanıcı veya güvenliği ihlal edilmiş bir web sunucusu bir web sitesini yeniden yazabilir. Veri     Web sunucuları tarafından yazılanlar www-data'ya ait olacaktır.

Mümkünse, /usr/share/doc/base-passwd/users-and-groups.txt.gz grubuna not yazma izni vermeyin. www-data dosyası, web sunucusunun sunabileceği şekilde okuyabiliyor . % Co_de% 'nin yazma izni gerektirdiği tek durum, yüklemeleri ve yazılması gereken diğer yerleri depolayan dizinler içindir.

Çözüm 1

Kendinizi www-data grubuna ekleyin ve www-data dizinindeki setgid biti, tüm yeni oluşturulan dosyaların bu grubu da miras alacağı şekilde ayarlayın.

sudo gpasswd -a "$USER" www-data

Önceden oluşturulan dosyaları düzeltin ( www-data tek kullanıcısı olduğunuzu varsayarak):

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

(daha da güvenli: web sunucusu tarafından yazılabilir olması gereken /var/www veya /var/www ve elle 640 kullanın)

Çözüm 2

Ana dizininize her proje için bir sembol bağlantısı oluşturun. Projenizin 2750 adresinde olduğunu ve bunun chmod g+w file-or-dir adresinde olmasını istiyorsanız, şunu çalıştırın:

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

Giriş dizininizde ~/projects/foo (güvenlik nedeniyle) için ayarlanmış bir yürütme biti (descend) yoksa, grubunu /var/www/foo olarak değiştirin, ancak yalnızca yürütme bitini ayarlayın (hayır okuma yazma). Www'den başka projeler içerebileceğinden other klasörü için de aynısını yapın. (Daha önce kullanıcınızı www-data grubuna eklemişseniz% co_de yüzdesine ihtiyacınız yoktur.)

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

Grubu ~/projects üzerindeki sudo olarak ayarlayın ve web sunucusunun dosya ve dosyalar + dizinleri okuma ve yazmalarına izin verin ve dizinlere inin:

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

Daha da güvenli: 640 ve 2750'yi varsayılan olarak ve web sunucusu kullanıcı tarafından yazılabilir olması gereken el ile chmod dosyaları ve dizinleri kullanın. Setgid biti, her yeni oluşturulan dosyanın www-data cinsinden grubun erişebilmesini istiyorsanız eklenmelidir.

Şu andan itibaren sitenize www-data adresinden erişebilir ve proje dosyalarınızı ~/projects/foo olarak düzenleyebilirsiniz.

Ayrıca bakın

verilen cevap Lekensteyn 01.06.2011 11:48
6

Web sitelerimi / var / www adresinde depolamak yerine, ev dizinimde bulunan sitelere bağlantılar yerleştiriyorum. Sitelerime özgürce düzenleme yapabilir veya sayfa ekleyebilirim. Değişikliklerimden memnun olduğumda, daha sonra, alan adımın bağlantı yaptığı bir hosting şirketine FTP gönderdim.

    
verilen cevap fragos 01.06.2011 09:06
6

Kendi grubu tarafından / var / www yazılabilir yaparsanız ve kendinizi gruba eklerseniz, sudoyu kullanmaya devam etmek zorunda kalmazsınız. Bunu dene:

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

Daha sonra, /var/www/ dosyalarını uğraşmadan düzenleyebilmelisiniz.

İlk satır sizi www-data grubuna ekler, ikinci satırda karmaşa sahip tüm dosyaları temizler, üçüncü ise bunu www-data grubunun üyesi olan tüm kullanıcıların okuyabilmesini ve yazmasını sağlar. % co_de dosyasındaki dosyalar.

    
verilen cevap Azendale 01.07.2011 02:41
5

Yapılmaması Gerekenler

  • Dosya izinlerini 777 olarak ayarlamayın (dünyaca yazılabilir)

    Bu, özellikle PHP gibi sunucu tarafı komut dosyalarını etkinleştirirseniz, önemli bir güvenlik hatasıdır. Ayrıcalıklı olmayan işlemler, web sitesini etkileyecek dosyalara yazamaz veya sunucu taraflı komut dosyası kullanıldığında, keyfi kod çalıştırmamalıdır.

  • Kendinizi www-data grubunun üyesi olarak eklemeyin ve yazma izni verin

    Bu grubun amacı, sunucu işlemlerinin olarak çalıştığı ayrıcalıklı grubudur. Mümkün olan yerlerde, yukarıdaki gibi aynı nedenlerden dolayı yalnızca web sitesi dosyalarına okuma izni olmalıdır.

  • Apache işlemlerinin izinlerini değiştirmeyin

    Apache alt süreçleri, www-data kullanıcısı ve varsayılan olarak grup olarak çalışır ve bu değiştirilmemelidir. Bu sadece dosya sistemine yazma izni vermenin bir yoludur.

    Bazı durumlarda, sunucu tarafı komut dosyalarınızı dosyalara yazabilmenizi istersiniz, bu durumda yalnızca bu dosyalar www-data yazılabilir olmalı ve emin olmak için dikkat gerekir. güvenlik.

Dos

  • Kendinize ait olacak dosyaları ayarlayın

    Eğer web sitesindeki bazı dosyaları değiştirmek için tek veya sıradan iseniz, o zaman bu dosyaların sahipliğini almak tamamen mantıklıdır. Sahiplerini <your username> olarak ayarlayın.

    Bunun için sunucu izinlerini değiştirmenize gerek yoktur, çünkü dosyalar tarafınıza ait olduğunda bile sunucu salt okunur erişimi almaya devam edecektir.

  • Dosyaları barındırmak için makul bir yer seçin ( DocumentRoot kullanarak)

    /var/www değeri mantıklı değilse, onları başka bir yere yerleştirebilirsiniz. Kendi gelişiminize veya testinize özgüyse, bunları ev dizininize yerleştirebilirsiniz. Ya da /srv dizininde bazı dizinler ayarlayabilirsiniz.

  • Grup erişimi vermek istiyorsanız grubu oluşturun.

    Bir sistem grubunu tekrar kullanmayın, çünkü bunlar genellikle şu anda sahip oldukları erişime sahip olacak şekilde tasarlanmıştır ve artık güvenlik nedenleriyle kullanılamaz.

verilen cevap thomasrutter 24.11.2016 00:43
5

Bu basit. Ne apache 'UserDir'i (tavsiye edilmez) etkinleştirmeniz, ne de' www-data 'gruplarıyla (Fedora durumunda apache grubu) uğraşmanız gerekmiyor.

Sadece proje dizininizi /var/www/html

içinde oluşturun
cd /var/www/html
sudo mkdir my_project

Ardından, proje dizinini yalnızca kullanıcınıza yazın.

sudo chown your_username my_project

Artık proje klasörünüzde, istediğiniz herhangi bir editör, IDE ile normal bir kullanıcı olarak çalışmaya başlayabilirsiniz. Artık yok sudos :)

    
verilen cevap Gayan Weerakutti 06.08.2016 09:49
1
Sahibin erişimine izin vermek için

/ var / adresinde www var. Muhtemelen aptalca bir fikir, ama kesinlikle işe yarayacaktı.

    
verilen cevap Daniel 01.06.2011 05:59
1

Bir terminalde www oturumunu başlatabilirsiniz

sudo su www-data

Farklı bir kullanıcının kabuğunun daha açık olmasını ve her zaman ilgili xterm'i (ve düzenleyici ve benzerleri) - örneğin sanal masaüstünü (4) koymak için farklı bir renkli komut istemi * ile birleştirildi. , böylece karışıklığa meydan vermemek için alışırsın.

*) Farklı bir karakterle farklı bir renk istemek için şöyle bir dosya / etc / komut istemi oluşturun:

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

ve örneğin /etc/bash.bashrc 'den kaynak.

Ayırmaya yardımcı olacak ek bir araç olarak, dosyalarınızı her zaman bir takma ad ile düzenleyebilirsiniz. Bu, kimliğinize (taylor / www-data) bağlı olarak, gedit veya mousepad, vim veya pico'lara bağlı olarak, bir 'link' veya bir symlink ile. Ya da farklı editör profilleri kullanabilirsiniz, en azından gedit olarak tercihlerinizi siyah zemin üzerine siyah metin veya siyah zemin üzerine beyaz metin olarak ayarlayabilirsiniz.

Kök olarak çalışmak için yalnızca böyle bir politikam var, bu yüzden www-data ile çalışmaya ne kadar uygun olacağından emin değilim. Ssh-oturumları, kendi istemleri olan farklı ana bilgisayarlarla bir araya geldiğinde, bazen yanlış olmama engel olmadı, fakat eğer gerçekleşirse, hızlı, neyin yanlış olduğunu fark ediyorum ve nadiren oluyor.

not: Komut dosyası, bash'ın manpage'inin bir kopyasıdır.

    
verilen cevap user unknown 01.06.2011 17:49
-1

sitemin bu sayfasındaki Apache ve pi arasındaki izinleri /var/www olarak değiştirmek için kullanılan komutları ele alıyorum kullanıcı ama onun vazgeçilmezi

sudo chown -R pi /var/www

sonra bir apache yeniden başlat

sudo service apache2 restart
    
verilen cevap Nathan Dickson 24.11.2016 00:27

Etiketlerdeki diğer soruları oku