it-swarm.asia

/ Var / www içindeki Apache 2 kullanıcısı www-data izinlerini ele almanın en iyi yolu nedir?

Herkes /var/www Dosya işleme için güzel bir çözüm var mı? Ad Tabanlı Sanal Ana Bilgisayarlar çalıştırıyoruz ve Apache 2 kullanıcısı www-data.

İki düzenli kullanıcı ve kökümüz var. Yani /var/www İçindeki dosyalar ile uğraşmak yerine, ...

chown -R www-data:www-data

... her zaman, bununla başa çıkmanın iyi bir yolu nedir?

Tamamlayıcı soru: İzinleri ne kadar zorluyorsun?

Bu, işbirlikçi geliştirme ortamlarında her zaman bir sorun olmuştur.

218
Gareth

@ Zoredache's answer , bu kendim bir gitmek vermek gibi genişletmek için çalışıyor:

  • Yeni bir grup oluşturun (www-pub) ve kullanıcıları bu gruba ekleyin

    groupadd www-pub

    usermod -a -G www-pub usera ## mevcut gruplara eklemek için -a kullanmalıdır

    usermod -a -G www-pub userb

    groups usera ## kullanıcı için görüntüleme grupları

  • /var/www altındaki her şeyin sahipliğini kökten değiştirin: www-pub

    chown -R root:www-pub /var/www ## -R özyinelemeli

  • Tüm klasörlerin izinlerini 2775 olarak değiştirin

    chmod 2775 /var/www ## 2 = grup kimliği ayarla, 7 = sahip için rwx (kök), 7 = grup için rwx (www-pub), 5 = dünya için rx (Apache www verileri) kullanıcı)

    Grup kimliğini ayarla ( SETGID ) bit (2), grubun (www-pub) o klasörde oluşturulan tüm yeni dosyalara/klasörlere kopyalanmasına neden olur. Diğer seçenekler kullanıcı kimliğini kopyalamak için SETUID (4) ve bence sadece sahibin dosyaları silmesine izin veren STICKY (1).

    Orada bir -R özyinelemeli seçenek, ancak bu dosyalar ve klasörler arasında ayrım yapmaz, bu yüzden find kullanmanız gerekir:

    find /var/www -type d -exec chmod 2775 {} +

  • Tüm dosyaları 0664 olarak değiştirin

    find /var/www -type f -exec chmod 0664 {} +

  • Kullanıcılarınız için umask'i 0002 olarak değiştirin

    Umask, varsayılan dosya oluşturma izinlerini denetler, 0002, dosyaların 664 ve 775 dizinlerine sahip olacağı anlamına gelir. Bunu ayarlama (umask satırını /etc/profile benim durumumda), bir kullanıcı tarafından oluşturulan dosyaların www grubundaki diğer kullanıcılar tarafından chmod bunlara gerek kalmadan yazılabileceği anlamına gelir.

Tüm bunları bir dosya ve dizin oluşturarak ve sahip, grup ve izinleri ls -l.

Not: Gruplarınızdaki değişikliklerin geçerli olması için oturumu kapatmanız/girmeniz gerekir!

209
Tom

İzinleri nasıl yapılandırmak istediğinizden tam olarak emin değilim, ancak bu size bir başlangıç ​​noktası verebilir. Muhtemelen daha iyi yollar vardır. Her iki kullanıcının da/var/www/altında herhangi bir şeyi değiştirmesini istediğinizi varsayıyorum.

  • Yeni bir grup oluşturun (www-pub) ve kullanıcıları bu gruba ekleyin.
  • / Var/www altındaki her şeyin sahipliğini root: www-pub olarak değiştirin.
  • Tüm klasörlerin izinlerini 2775 olarak değiştirin
  • Tüm dosyaları 0664 olarak değiştirin.
  • Kullanıcılarınız için umask'ı 0002 olarak değiştirin

Bu, kullanıcılarınızdan herhangi biri tarafından oluşturulan yeni dosyaların kullanıcı adı: www-pub 0664 olması ve oluşturulan herhangi bir dizinin kullanıcı adı: www-pub 2775 olması gerektiği anlamına gelir. Apache, 'diğer kullanıcılar' bileşeni aracılığıyla her şeye okuma erişimine sahip olur. Dizinlerdeki SETGID biti, oluşturulan tüm dosyaların klasöre sahip olan gruba ait olmasını zorlar. Yazma bitinin gruptaki herkesin dosyaları düzenleyebilmesi için ayarlandığından emin olmak için umask ayarının yapılması gerekir.

Ne kadar sert izinlere gelince. Tamamen siteye/sunucuya bağlıdır. Sadece 1-2 editör varsa ve bunları çok kötü bir şekilde kırmalarını engellemem gerekiyorsa, o zaman kolay gideceğim. Eğer iş daha karmaşık bir şey gerektiriyorsa, o zaman daha karmaşık bir şey kurarım.

62
Zoredache

Bence POSIX ACL (erişim kontrol listeleri) yardımcı olabilir. Kullanıcı: grup: diğer modelle karşılaştırıldığında daha ayrıntılı bir izin modeline izin verirler. Daha açık olabileceğim ve dosya sisteminin bir dalı için "varsayılan" davranışı da ayarlayabildiğim için onları kafamda düz tutmak daha kolay buldum.

Örneğin, her kullanıcının izinlerini açıkça belirtebilirsiniz:

setfacl -Rm d:u:userA:rwX,u:userA:rwX /var/www
setfacl -Rm d:u:userB:rwX,u:userB:rwX /var/www

Veya bunu paylaşılan bir gruba göre yapabilirsiniz:

setfacl -Rm d:g:groupA:rwX,u:groupA:rwX /var/www

Ve belki de Apache kullanıcısını salt okunur olarak tutmak istersiniz

setfacl -Rm d:u:www-data:rX,u:www-data:rX /var/www

Man sayfaları:

Öğretici

39
Joe Holloway

Bu soru tekrar soruld ve metada tartışılan olarak, mevcut en iyi uygulamalar, bu sorunun 2009'da mevcut olandan daha iyi yaklaşımlar sağlar. Bu cevap işbirlikçi web geliştirme ortamlarını güvenli bir şekilde ele almak için bazı güncel çözümler sağlamaya çalışmaktadır .


Güvenli bir web sunucusu ve işbirlikçi geliştirme için yalnızca dosya izinlerinden daha fazlası vardır:

  • Her site için ayrı bir kullanıcı var , yani www-data. Günümüzde Apache nadiren yalnızca statik içerik dosyaları sunmakta, ancak dinamik web sitelerini çalıştırmakta olduğu için bu önemlidir. Bu yanıt PHP en yaygın sunucu sitesi dili olduğu için yoğunlaşır, ancak aynı ilkeler diğerleri için de geçerlidir.

    Tek bir sitede güvenlik sorununuz varsa, aynı kullanıcı olarak çalışan her siteye yayılabilir. Saldırgan, veritabanı giriş bilgileri de dahil olmak üzere kullanıcının gördüğü her şeyi görebilir ve kullanıcının yazma izinlerine sahip olduğu her siteyi değiştirebilir.

  • SSH Dosya Aktarım Protokolü Kullanın (SFTP). FTP kullanırken güvenlik açısından (her ikisini de şifreler ve içeriği düz metin olarak), güvenli yerine geçebilir SFTP aynı zamanda işbirlikçi web geliştirme için mükemmel bir çözüm olan bir özelliğe sahiptir.

    Siteleri ve site başına bir kullanıcıyı izole ettikten sonra, bu sorunun ne hakkında olduğunu web geliştiricilerinize erişmeniz gerekir. Bu site kullanıcıları için şifreleri vermek yerine - veya başlangıçta önerildiği gibi kişisel kullanıcı hesaplarını kullanarak site dosyalarına erişmek yerine - oturum açmak için SSH anahtarları kullanabilirsiniz.

    Her geliştirici anahtar çifti oluşturabilir ve özel anahtarı gizli tutabilir. Ardından, ortak anahtar ~/.ssh/authorized_keys geliştiricinin üzerinde çalıştığı her web sitesi kullanıcı hesabı için dosya. Bu, şifreleri ve girişleri yönetmek için birçok avantaja sahiptir:

    • Her geliştirici, site başına kullanıcı düzenlemesiyle ilgili tüm şifreleri hatırlama veya saklama yükü olmadan herhangi bir sayıda web sitesine erişebilir.

    • Birisi şirketten her çıktığında şifreleri değiştirmeye ve paylaşmaya gerek yoktur.

    • Çok güçlü parolalar kullanabilir veya parola tabanlı oturum açmayı tamamen devre dışı bırakabilirsiniz.

  • PHP-FPM kullanın. Her kullanıcı için PHP. Yeni bir havuz çalıştırmak için geçerli yaklaşımdır, yani her site için bir havuz. Bu, hem güvenlik hem de performans için en iyisidir, çünkü tek bir sitenin ne kadar kaynak tüketebileceğini de belirleyebilirsiniz.

    Bkz. NeverEndingSecurity's Linux'ta ayrı kullanıcı/uid ve grupla php-fpm çalıştırın . HowtoForge's buntu 16.04'te Apache ile PHP-FPM kullanma , kullanıcı ayırma yoluyla güvenliği arttırmak için PHP-FPM kullanmayan, sunucu genelinde tek bir FPM soketi kullanmaya rehberlik eden öğreticiler vardır.

11
Esa Jokinen