Berikan izin pengguna pada www-data yang dimiliki / var / www

36

Saya memiliki pengaturan server web sederhana untuk beberapa situs web, dengan tata letak seperti:

site1: /var/www/site1/public_html/

site2: /var/www/site2/public_html/

Saya sebelumnya telah menggunakan pengguna root untuk mengelola file, dan kemudian mengembalikannya www-dataketika saya sudah selesai (situs WordPress, diperlukan agar WP Uploads dapat berfungsi). Ini mungkin bukan cara terbaik.

Saya mencoba menemukan cara untuk membuat pengguna lain (sebut saja user1) yang memiliki izin untuk mengedit file di situs1, tetapi bukan situs2, dan tidak menghentikan file yang 'dimiliki' oleh www-data. Apakah ada cara bagi saya untuk melakukan ini?

George Pearce
sumber

Jawaban:

70

Jika kami memeriksa kepemilikan situs1, kami akan menemukan sesuatu seperti ini,

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

Ini berarti bahwa direktori tersebut dimiliki oleh root pengguna, root grup. Meskipun root pengguna memiliki izin menulis (ditambah izin baca dan eksekusi) ke direktori, root grup hanya membaca dan mengeksekusi izin.

Kami ingin mengubah kepemilikan grup ke grup (baru) lain dan menambahkan user1 ke grup tersebut. Kami akan memberikan izin tertulis kepada grup tersebut juga.

Buat grup baru,

sudo addgroup site1

Tambahkan user1 ke grup yang baru dibuat,

sudo adduser user1 site1

Periksa apakah user1 benar-benar dalam grup itu,

groups user1

Outputnya harus berupa daftar,

user1 : <other-groups> site1

Sekarang kita dapat mengubah kepemilikan grup dari direktori yang diinginkan.

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

Berikan izin tertulis kepada pemilik grup baru ini,

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

Periksa apakah semua perubahan memang ada,

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

Jadi, direktori sekarang dimiliki oleh root pengguna, grup site1. Root pengguna dan grup situs1 memiliki izin menulis (ditambah izin baca dan eksekusi) ke direktori. Setiap pengguna yang tergabung dalam situs grup1 akan menikmati semua hak istimewa yang diberikan kepada grup itu.

Sekarang login sebagai user1, pindah ke direktori site1 dan cobalah untuk membuat file di direktori itu,

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

Ini gagal karena kemungkinan besar grup utama user1 bukan site1. Jadi, ubah ke grup itu.

newgrp - site1

Cobalah untuk membuat ulang file (berhati-hatilah karena Anda telah dipindahkan ke direktori home user1 setelah mengubah grup), ini seharusnya berfungsi sekarang. Karena file yang dibuat akan memiliki izin baca dunia, apache (atau server web Anda) tidak akan menghadapi masalah mengaksesnya.

EDIT

Juga, seperti yang ditunjukkan oleh dan08 dalam komentar, Anda perlu menambahkan www-data ke grup site1.

sudo adduser www-data site1

Pada banyak (tidak semua) distribusi, www-data adalah pengguna di mana server web Apache berjalan. Ini juga berarti bahwa semua yang dilakukan oleh Apache (terutama termasuk skrip PHP) akan dilakukan dengan izin data pengguna www (dan juga kelompok data www) secara default. WordPress menggunakan data-pengguna www untuk menulis file.

Jika Anda ingin melihat bagaimana server web apache berjalan, jalankan perintah,

ps aux | grep apache2 | less
Masroor
sumber
1
Anda juga perlu menambahkan www-data ke grup site1. Saat mengunggah dan mengubah file di antarmuka web Wordpress. Perubahan dilakukan oleh Apache menggunakan pengguna data-www. jadi hak istimewa membaca tidak cukup untuk sebagian besar waktu.
Dan
3
The Permission deniedpesan bukan karena "kelompok utama", melainkan pengguna belum benar-benar berada dalam kelompok yang (sejauh OS yang bersangkutan). Jika Anda logout dan kembali, itu akan berfungsi seperti yang diharapkan (tanpa berjalan newgrp - site1).
0b10011
Bagaimana sebenarnya ini akan berbeda dari memberikan www-dataakses group tulis jika Anda akhirnya harus menambahkan www-datake site1lagian?
Matt
@MattBorja Permintaan Anda tidak terlalu jelas. Apakah Anda bertanya apa yang salah dengan memberikan grup bernama www-data' write permissions? If that is the question, www-data 'bukan grup, itu adalah pengguna. Tolong beri tahu saya jika saya salah mengerti pertanyaan Anda.
Masroor
saya pikir, ini bukan konfigurasi aman karena pengguna dapat mengakses situs satu sama lain melalui skrip php, misalnya, file manager php.
qdinar
7

Buat dua grup: site1grpdansite2grp

sudo groupadd site1grp && sudo groupadd site2grp

Tambahkan www-datake kedua grup.

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

Tambahkan user1 dan user2 ke grup yang sesuai

sudo adduser user1 site1grp && sudo adduser user2 site2grp

Ubah izin folder situs Anda sehingga pemilik pengguna adalah www-data dan pemilik grup adalah grup yang sesuai

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

Sekarang www-datamemiliki izin pengguna dan grup di kedua situs dan setiap pengguna memiliki izin grup untuk situs masing-masing.

Dan
sumber
4

Bagi mereka yang memiliki folder root wordpress di bawah folder home mereka:

Ubuntu / apache

  1. Tambahkan pengguna Anda ke grup www-data:

    KREDIT Pemberian izin menulis ke grup data-www

    Anda ingin memanggil usermodpengguna Anda. Jadi itu akan menjadi:

    sudo usermod -aG www-data yourUserName
    

    Dengan asumsi www-dataada grup

  2. Periksa pengguna Anda dalam www-datagrup:

    groups yourUserName
    

    Anda harus mendapatkan sesuatu seperti:

    yourUserName : yourUserGroupName www-data
    

    namaUserGroupName Anda biasanya mirip dengan nama pengguna Anda

  3. Ubah kepemilikan grup folder secara rekursif untuk menjaga kepemilikan pengguna Anda

    chown yourUserName:www-data -R yourWebSiteFolder/*
    
  4. Ubah direktori ke Folder Web Anda

    cd yourWebSiteFolder
    
  5. Secara berkala mengubah premis grup dari folder dan sub-folder untuk memungkinkan izin menulis:

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

    mode /home/yourUserName/yourWebSiteFolder/'diubah dari 0755 (rwxr-xr-x)menjadi0775 (rwxrwxr-x)

  6. Secara berkala mengubah premis grup dari file dan sub-file untuk memungkinkan izin menulis:

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

    Hasilnya akan terlihat seperti:

    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
    

    Setara dengan:

    chmod -R ug+rw foldername
    

    Izinnya akan seperti 664 atau 775.

Jadeye
sumber
3

Anda harus membuat grup baru, untuk, yang disebut, "pengguna baru", dan kemudian menambahkan data-www dan "pengguna baru" ke grup itu:

sudo gpasswd -a new_user new_group

Kemudian Anda dapat mengubah pemilik ke new_userdan grup ke new_group:

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

Maka Anda perlu memberikan akses tingkat grup ke situs1. www-data akan tetap dapat mengakses situs, karena itu milik new_group, sementara new_user tidak akan dapat mengakses situs2, karena ia tidak akan menjadi milik grup data-www, yang memiliki situs2.

errikos
sumber
Jawaban Anda membingungkan, dengan "memberikan akses tingkat grup ke situs1", maksud Anda "mengubah grup situs1 menjadi new_group" atau mengubah mode ( chmod)? Jawaban Anda tidak menyebutkan mode di mana pun yang dapat membuat perbedaan menjadi aman (atau merusak barang).
Lekensteyn
Saya bermaksud mengubah mode ( chmod) dengan mencabut semua izin untuk ORANG LAIN.
errikos
1

Dengan asumsi semua file sudah menjadi milik www-datapengguna (Anda dapat memeriksanya dengan ls -slahperintah) yang milik www-datagrup (kolom berikutnya setelah nama pengguna dalam daftar file), Anda bisa menambahkan pengguna Anda ke www-datagrup yang sama untuk memungkinkan pengeditan file-file ini

# usermod -aG www-data username

untuk pengguna yang ada, atau

# adduser username www-data

untuk yang baru dibuat

vladkras
sumber