/ Var / www 'nın sahip olduğu www-verileri hakkında kullanıcı izinleri verin


36

Bazı web siteleri için basit bir web sunucusu kurulumum var.

site1: /var/www/site1/public_html/

site2: /var/www/site2/public_html/

Kök kullanıcısını daha önce dosyaları yönetmek için kullandım ve bunları bittiğim zamana geri www-dataverdim (WordPress siteleri, WP Yüklemelerinin çalışması için gerekli). Bu muhtemelen en iyi yol değil.

Site1'deki dosyaları düzenleme iznine sahip olan, ancak site2'de olmayan ve başka bir kullanıcının oluşturmasını sağlayan bir yol bulmaya çalışıyorum (kullanıcı1 olarak da çağrı yapalım1) www-data. Bunu yapmamın bir yolu var mı?

Yanıtlar:


70

Site1'in sahipliğini kontrol edersek, bunun gibi bir şey buluruz,

ls -ld /var/www/site1/
drwxr-xr-x 2 root root 4096 Oct 24 21:06 site1/

Bu, dizinin kullanıcı köküne, grup köküne ait olduğu anlamına gelir. Kullanıcı kök dizine yazma izni (artı okuma ve yürütme izinleri) varken, grup kök yalnızca izinleri okuma ve yürütme işlemlerine sahiptir.

Grup sahipliğini başka bir (yeni) gruba dönüştürmek ve bu gruba kullanıcı1 eklemek istiyoruz. Bu gruba da yazılı izin vereceğiz.

Yeni bir grup oluştur

sudo addgroup site1

Yeni oluşturulan gruba user1 ekleyin,

sudo adduser user1 site1

Kullanıcı1'in gerçekten o grupta olup olmadığını kontrol edin,

groups user1

Çıktı şöyle bir liste olmalı,

user1 : <other-groups> site1

Artık istediğiniz dizinin grup sahipliğini değiştirebiliriz.

sudo chown -vR :site1 /var/www/site1/
changed ownership of `/var/www/site1/' from root:root to :site1

Bu yeni grup sahibine yazma izni verin,

sudo chmod -vR g+w /var/www/site1/
mode of `/var/www/site1/' changed from 0755 (rwxr-xr-x) to 0775 (rwxrwxr-x)

Tüm değişikliklerin gerçekten orada olduğunu kontrol edin,

ls -ld /var/www/site1/
drwxrwxr-x 2 root site1 4096 Oct 24 21:06 /var/www/site1/

Yani, dizin şimdi kullanıcı kökü, grup site1'e aittir. Hem kullanıcı kökü hem de grup sitesi1, dizine yazma iznine (artı okuma ve yürütme izinleri) sahiptir. Grup siteye1 ait olan herhangi bir kullanıcı, bu gruba verilen tüm ayrıcalıklardan yararlanacaktır.

Şimdi user1 olarak giriş yapın, site1 dizinine gidin ve bu dizinde bir dosya oluşturmaya çalışın,

echo "My User1 Site" > index.html 
bash: index.html: Permission denied

Bu başarısız oldu, çünkü büyük olasılıkla birincil kullanıcı kullanıcısı1 site1 değil. Yani, o gruba geçin.

newgrp - site1

Dosyayı yeniden oluşturmayı deneyin (grubu değiştirdikten sonra user1'in ana dizinine taşındığınızdan emin olun), bu şimdi işe yaramalı. Oluşturulan dosyalar dünya çapında okuma iznine sahip olacağından, apache (veya web sunucunuz) bunlara erişirken herhangi bir sorunla karşılaşmamalıdır.

DÜZENLE

Ayrıca, dan08 tarafından belirtildiği gibi , yorumda, site1 grubuna www-veri eklemeniz gerekir.

sudo adduser www-data site1

Pek çok (hepsinde değil) dağıtımda, www-verileri Apache web sunucusunun çalıştığı kullanıcıdır. Bu aynı zamanda Apache (özellikle PHP betikleri dahil) tarafından yapılan her şeyin varsayılan olarak kullanıcı www-data (ve ayrıca www-data gruplandırması) izinleriyle gerçekleştirileceği anlamına gelir. WordPress, dosya yazmak için kullanıcı www verilerini kullanır.

Apache web sunucusunun nasıl çalıştığını görmek istiyorsanız, komutu

ps aux | grep apache2 | less

1
Ayrıca site1 grubuna www verileri eklemeniz gerekir. Wordpress web arayüzündeki dosyaları yüklerken ve değiştirirken. Değişiklikler Apache tarafından www-data kullanıcısı kullanılarak yapılır. bu nedenle okuma ayrıcalıkları çoğu zaman yeterli değildir.
Dan

3
Permission deniedMesajı nedeniyle "birincil grubu" için değil, daha ziyade kullanıcı henüz fiilen (OS söz konusu olduğunda kadarıyla) bu grupta olmamak. Oturumu kapatıp tekrar açarsanız, beklendiği gibi çalışır (çalıştırmadan newgrp - site1).
0b10011

Tam olarak nasıl bu vermekten farklı olurdu www-dataeklemek zorunda sonunda eğer grup yazma izinlerini www-dataiçin site1neyse?
Matt

@MattBorja Sorgunuz çok net değil. www-data' write permissions? If that is the question, Www-data adlı gruba neyin yanlış olduğunu soruyorsunuz 'bir grup değil, bir kullanıcı. Lütfen sorunuzu yanlış anladıysam bana bildirin.
Masroor,

Bence, bu güvenli bir yapılandırma değildir çünkü kullanıcılar birbirlerinin sitelerine php betiği, örneğin bir php dosyası yöneticisi ile erişebilirler.
qdinar

7

İki grup oluşturun: site1grpvesite2grp

sudo groupadd site1grp && sudo groupadd site2grp

www-dataHer iki gruba ekleyin .

sudo adduser www-data site1grp && sudo adduser www-data site2grp

Kullanıcı1 ve kullanıcı2 uygun gruplara ekleyin.

sudo adduser user1 site1grp && sudo adduser user2 site2grp

Site klasörlerinizin iznini, kullanıcı sahibi www-veri ve grup sahibi uygun grup olacak şekilde değiştirin

sudo chown -R www-data:site1grp /var/www/site1  && sudo chown -R www-data:site2grp /var/www/site2

Artık www-dataher iki sitede de kullanıcı ve grup izinleri var ve her kullanıcının kendi siteleri için grup izinleri var.


4

WordPress root klasörünü home klasörünün altında tutanlar için:

Ubuntu / apache

  1. Kullanıcıyı www-data grubuna ekle:

    KREDİ www-data grubuna yazma izni verilmesi

    usermodKullanıcıyı aramak istiyorsun . Yani bu olurdu:

    sudo usermod -aG www-data yourUserName
    

    Varsayım www-datagrubu var

  2. Kullanıcınızın www-datagrupta olup olmadığını kontrol edin :

    groups yourUserName
    

    Gibi bir şey almalısınız:

    yourUserName : yourUserGroupName www-data
    

    KullanıcıGrupAdı genellikle kullanıcı adınıza benzer

  3. Kullanıcı sahipliğini koruyarak klasörün grup sahipliğini tekrar tekrar değiştir

    chown yourUserName:www-data -R yourWebSiteFolder/*
    
  4. DizininiziWebSiteFolder olarak değiştirin

    cd yourWebSiteFolder
    
  5. Yazma izinlerini etkinleştirmek için klasörlerin ve alt klasörlerin grup konumlarını tekrar tekrar değiştirin:

    find . -type d -exec chmod -R 775 {} \;
    

    şekli /home/yourUserName/yourWebSiteFolder/'değiştirilen 0755 (rwxr-xr-x)için0775 (rwxrwxr-x)

  6. Yazma izinlerini etkinleştirmek için dosyaların ve alt dosyaların grup konumlarını tekrar tekrar değiştirin:

    find . -type f -exec chmod -R 664 {} \;
    

    Sonuç şöyle görünmeli:

    WAS:
    -rw-r--r--  1 yourUserName www-data  7192 Oct  4 00:03 filename.html
    CHANGED TO:
    -rw-rw-r--  1 yourUserName www-data  7192 Oct  4 00:03 filename.html
    

    Eşittir:

    chmod -R ug+rw foldername
    

    İzinler 664 veya 775 gibi olacak.


3

"Yeni kullanıcı" olarak adlandırılan yeni bir grup oluşturmanız ve daha sonra bu veriye www-veri ve "yeni kullanıcı" eklemeniz gerekir:

sudo gpasswd -a new_user new_group

Ardından sahibi new_userve grubunu şu şekilde değiştirebilirsiniz new_group:

sudo chown -R new_user:new_group /var/www/site1

Ardından, site1'e grup düzeyinde erişim vermeniz gerekir. www-data hala siteye erişebilecek, çünkü bu new_group grubuna aitken, new_user site2'ye erişemeyecek çünkü site2'ye sahip olan www-data grubuna ait olmayacak.


Cevabınız kafa karıştırıcı, "site1'e grup düzeyinde erişim izni vererek", "site1 grubunu new_group olarak değiştirmek" veya modu ( chmod) değiştirmek mi demek istediniz ? Cevabınız, güvenli olmanın farkını yaratabilecek (ya da bir şeyleri kırabilecek) moddan bahsetmiyor.
Lekensteyn

chmodDİĞER için tüm izinleri iptal ederek modu ( ) değiştirmeyi kastediyordum .
errikos

1

Tüm dosyaların zaten www-datakullanıcıya ait olduğunu varsayarak ( ls -slahkomutla kontrol edebilirsiniz ) www-datagruba ait olan (dosya listesinde kullanıcı adından sonra bir sonraki sütun) www-databu dosyaları düzenlemeye izin vermek için sizi aynı gruba ekleyebilir

# usermod -aG www-data username

mevcut kullanıcı için veya

# adduser username www-data

yeni yaratılmış biri için

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.