Jadikan pemilik baru membuat file DAN folder www-data alih-alih superuser / admin

13

Saya telah berjuang dengan izin sejauh ini, dan memposting pertanyaan lain tetapi mengidentifikasi apa masalahnya, belum ada cara untuk memperbaikinya.

Pengaturan saya:

  • Ubuntu Desktop dengan tumpukan LAMP
  • 5 "pengguna" Saya membuat pengguna yang saya buat di server ubuntu menggunakan sudo useradd -r -s /bin/false USERNAME dan yang digunakan untuk mengakses folder bersama jaringan lokal, yaitu untuk komputer di jaringan saya untuk terhubung ke folder / var / www, dibagikan menggunakan Samba.
  • EDIT: Tujuannya adalah untuk membuat semacam "master localhost" di mana semua komputer di jaringan lokal saya dapat bekerja di situs web yang sama, secara lokal (saya TIDAK punya alamat IP statis sehingga server tidak dapat diakses dari tempat lain) .

Masalahku:

Saat ini ketika saya membuat folder baru di /var/www/html(mis: Membuat folder / var / www / html / testsite1) menggunakan komputer jaringan apa pun, folder ini secara otomatis dimiliki oleh boris:www-data("boris" sebagai pengguna admin utama di desktop Ubuntu saya menginstal , dan memang menampilkan boris: www-data saat dijalankan ls -lpada folder yang baru dibuat), yang menyebabkan masalah dengan pengaturan saya saat ini (kebanyakan menggunakan Duplicator Plugin untuk wordpress oleh LifeInTheGrid). Namun, saya /var/wwwdan saya /var/www/htmldimiliki olehwww-data:www-data

Karenanya, saya ingin tahu bagaimana saya dapat:

  • Ubah kepemilikan menjadi www-data: www-data dari semua file DAN direktori di bawah / var / www dan / var / www / html

  • Pastikan file atau folder apa pun yang akan saya buat dengan pengguna jaringan saya secara otomatis akan dimiliki oleh www-data: www-data (Itu termasuk file yang secara otomatis dibuat oleh skrip php seperti yang dilakukan oleh plugin Duplicator jika saya tidak salah).

Apakah ada cara untuk melakukan itu?

Catatan: Saya seorang pemula super dengan hal-hal yang berkaitan dengan Linux dan baris perintah, tapi saya mengejar ketinggalan dengan cepat.

Catatan 2: umask sudah diset sebagai 0002

EDIT:

Mencoba ini:

sudo chown -R www-data:www-data /var/www/

Dan kemudian set bit setuid dan setgid dengan melakukan ini:

sudo chmod u+s /var/www/html
sudo chmod g+s /var/www/html

Kemudian log-off, restart apache, dan mencoba membuat folder baru menggunakan Mac yang terhubung ke server saya melalui IP jaringan (IP lokal, bukan statis).

Saya Ran

ls -l on /var/www/html

Output masih:

drwxr-sr-x 2 boris   www-data  testsite1

catatan:

Saya sudah memeriksa konfigurasi apache saya sebelumnya dan envvars, sudah diatur ke:

export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data

EDIT: Saya mencoba mundur, misalnya mengatur segala sesuatu untuk dimiliki oleh boris: www-data dan mengatur konfigurasi apvv envvars saya ke boris: www-data. BEKERJA!

Inilah yang saya lakukan:

Envvars yang diubah menjadi

export APACHE_RUN_USER=boris
export APACHE_RUN_GROUP=www-data

Ran

sudo chown -R boris:www-data /var/www/

Restart Apachem, buat folder baru, tambahkan file saya, jalankan plugin, sekarang katanya bagus !!!

Boris Chevreau
sumber
Ini adalah ide buruk bagi keamanan untuk mengatur file yang akan dimiliki oleh pengguna atau grup data-www, meskipun dalam kasus yang jarang dapat diperlukan untuk file-file tertentu yang perlu diakses oleh server web. Apa yang ingin Anda capai?
thomasrutter

Jawaban:

11

Jawaban untuk Pertanyaan # 1: Rekursifchown

Rekursif chownakan memungkinkan Anda menetapkan kepemilikan dan grup sesuai keinginan Anda /var/www/.... Ini adalah perintah yang harus Anda gunakan:

sudo chown -R www-data:www-data /var/www/

Dengan itu, setiap file dan folder akan diatur sedemikian rupa di dalam sana dengan izin kepemilikan tersebut.


Setengah Jawab ke Pertanyaan # 2: setgidbit

Jika Anda ingin kepemilikan grup default pada file, atur setgidbit pada /var/www/htmlfolder. File baru kemudian harus dibuat dengan grup itu seperti yang dinyatakan pada folder.

sudo chmod g+s /var/www/html

Anda harus menetapkan izin menulis, jika ada pengguna yang LAINNYA www-data menulis ke direktori, dan hal itu dapat membuka Anda ke satu atau dua lubang keamanan jika Anda tidak hati-hati.

Anda berakhir dengan izin $USER:www-data; untuk mengubah pemilik, Anda kemudian menggunakan chownseperti yang ditunjukkan dalam metode # 1 (yang mengatakan, dalam pengaturan yang tepat Anda harus bergantung pada izin grup, bukan izin pemilik pengguna, untuk akses ke file web).


Masalah Duplikator PHP Wordpress

Masalah dengan izin adalah pengguna / grup PHP berjalan sesuai kebutuhan menulis dan membaca dan kemungkinan +x pada direktori untuk mengedit struktur dir dan semacamnya.

PHP berjalan www-datasecara default di instalasi Ubuntu yang menggunakan konfigurasi default. Idealnya, langkah-langkah Anda di atas akan memperbaiki masalah, karena Anda terjebak dengan Duplikator Plugin menjadi plugin PHP.

Idealnya Anda juga harus memeriksa dokumentasi untuk Plugin Duplicator untuk memverifikasi izin apa yang diperlukan untuk menjalankan dan bekerja.

Thomas Ward
sumber
Saya suka metode setuid :)
Rinzwind
Inilah yang saya cari !!!! Satu-satunya masalah: tidak bekerja :-( Saya membuat folder di mac saya (yaitu BUKAN dengan komputer desktop ubuntu) dengan mengakses server saya melalui IP lokalnya. Ketika saya menjalankan ls -l, masih dimiliki oleh boris: www- data: - /
Boris Chevreau
Apakah karena saya menetapkan kepemilikan pengguna pada file tetapi tidak pada folder? Apakah hanya karena folder yang saya buat TIDAK BISA secara otomatis dimiliki oleh www-data: www-data?
Boris Chevreau
Mac berbeda dari Linux, dan jika Anda benar-benar beruntung maka metode ini tidak akan berfungsi dan Anda akhirnya harus mengacaukan lebih banyak dari sekadar izin sederhana (seperti ACL dan hal-hal lain) untuk mengatur file default . Juga, 'tidak berhasil' adalah ambigu. define tidak berfungsi dan sertakan output sebagai suntingan ke pertanyaan.
Thomas Ward
1
setuid yang diterapkan ke direktori selalu diabaikan di Linux, iirc
muru
6

Untuk memastikan file atau folder yang Anda buat /var/www/htmlmasuk secara otomatis dimiliki oleh www-data yang dapat Anda gunakaninotify , itu seperti cron tetapi memonitor folder / file untuk perubahan di attribuets, pembuatan file, modifikasi dan banyak lagi.

Pertama instal dengan:

$ sudo apt-get install incron

Izinkan root untuk digunakan incrondengan membuka /etc/incron.allowdengan:

$ sudo vim /etc/incron.allow

dan tambahkan root ke file, lalu simpan dan keluar.

Edit incrontab Anda dengan:

$ sudo incrontab -u root -e

dan tambahkan baris berikut ke dalamnya:

/var/www/html IN_CREATE /bin/chown -R www-data:www-data /var/www/html/

Simpan dan keluar.

Sekarang begitu file dibuat dalam /var/www/htmldirecotry itu secara otomatis akan diatur pada keanggotaanwww-data:www-data .

Penjelasan garis di incrontab:

/var/www/html adalah direktori yang akan dimonitor.

IN_CREATEakan menonton file yang dibuat. Ini adalah topeng perubahan file .

/bin/chown -R www-data:www-data /var/www/html/ adalah perintah / tindakan untuk dieksekusi.

krt
sumber
Mereka dapat mencapai sesuatu seperti ini tanpa pemberitahuan dan setgid - kepemilikan pengguna sepertinya tidak harus sering berubah dan mereka dapat mengatur ulang kepemilikan pengguna sendiri ... atau menggunakan ACL yang dapat menyulitkan
Thomas Ward
Seluruh tujuan dari server ini adalah agar kita dapat menggunakannya sebagai "tuan tuan rumah lokal", misalnya membuat situs web host dan dapat mengedit / mengganti / memindahkan dan membuat situs uji dengan cepat dengan sangat mudah. Jika saya harus mengatur ulang semuanya secara manual, itu membunuh seluruh tujuan: - /
Boris Chevreau
Apakah ini cara "incron" satu-satunya cara? Saya tidak mengerti mengapa itu harus sangat rumit. Apa yang saya cari adalah cara sederhana untuk semua komputer saya di jaringan untuk membuat situs web di server ini. Pada akhirnya karena saya tidak memiliki IP statis (maka keamanan tidak menjadi masalah), apakah ada perubahan haluan lain yang akan Anda pikirkan?
Boris Chevreau
terima kasih, bekerja seperti pesona!
trurl
3

Ubah kepemilikan menjadi www-data: www-data dari semua file DAN direktori di bawah / var / www dan / var / www / html

cd /var/www/
chown -R  www-data:www-data /var/www/
  • ./html tersirat di sini (sebagai bagian dari / var / www /)
  • -Rmembuatnya rekursif (sehingga akan melintasi semua direktori di /var/www/).

Pastikan file atau folder apa pun yang akan saya buat dengan pengguna jaringan saya secara otomatis akan dimiliki oleh www-data: www-data

  • Di dalam / var / www / html / saya akan berasumsi?

Setel konfigurasi apache Anda ke www-data. Lihat/etc/apache2/envvars

# envvars - default environment variables for apache2ctl

export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data

Anda harus memulai ulang apache setelah mengedit ini ( sudo service apache restart).

Itu termasuk file yang secara otomatis dibuat oleh skrip php karena itu adalah apa yang dilakukan plugin Duplicator jika saya tidak salah).

Masalahnya di sini mungkin bukan plugin tetapi php. Pengguna harus memiliki proses yang sama dengan PHP. Jadi Anda mungkin perlu mengaturnya ke data-www juga jika itu adalah pengguna dan grup Anda ( /etc/php5/apache2/php.ini).

Rinzwind
sumber
Default Ubuntu menjalankan proses / pekerja PHP seperti www-data, seperti halnya Debian, saya percaya.
Thomas Ward
Juga, masalah dengan /var/www/htmljuga kepemilikan grup dan baca / tulis privs. Masalah lainnya adalah mereka ingin memiliki file yang dibuat oleh pengguna www-data:www-data, dan tebakan saya adalah mereka adalah pengguna jaringan , bukan pengguna Wordpress, jadi Anda harus mencari izin file Linux.
Thomas Ward
Itu memang pengguna jaringan, itu pengguna yang saya buat di server ubuntu menggunakan sudo useradd -r -s / bin / false USERNAME dan yang digunakan untuk mengakses folder bersama jaringan lokal
Boris Chevreau
Bagaimana jika saya mengubah kepemilikan dan menulis izin dari semua folder dan file kembali ke boris: www-data, kemudian mengubah envvars untuk apache menjadi boris: www-data? Apakah itu mungkin memperbaiki masalah karena setiap kali saya membuat file baru ditetapkan sebagai pemilik menjadi boris: www-data?
Boris Chevreau
2

Saya menyelesaikannya! Saya masih berpikir itu adalah masalah utusan Apache, tetapi tidak yakin apakah itu hal khusus yang memecahkan masalah ... Pokoknya inilah yang saya lakukan:

Envvars yang diubah menjadi

export APACHE_RUN_USER=boris
export APACHE_RUN_GROUP=www-data

Ran

sudo chown -R boris:www-data /var/www/

Sekarang sudah berfungsi sejauh ini. Akan menguji lebih lanjut ...

Boris Chevreau
sumber