Bagaimana cara memberi file dan direktori yang dibuat oleh FTP izin yang benar untuk Apache untuk membaca dan menulisnya?

8

Saya lebih sebagai orang Windows, jadi mohon maafkan ketidaktahuan saya dengan pertanyaan dasar Linux ini.

Saya mencari server Linux (Debian) yang hanya memiliki Apache2 dan vsftp diinstal di atasnya.

Yang terjadi adalah saya terus-menerus bertengkar dengan siapa yang memiliki file dan folder dan sepertinya tidak bisa memperbaikinya.

Inilah pengertian saya sejauh ini:

  • Pengguna www-data memerlukan kepemilikan folder dan file karena semua file di bawah / var / www / html menjalankan skrip yang mengharuskan mereka untuk menulis ke folder mereka. Dan tentu saja harus dapat melayani halaman melalui http.
  • Pengguna ftp saya (sebut saja ftpuser ) juga memerlukan izin untuk menulis ke folder / var / www / html (rekursif) karena saya harus dapat mengunggah file baru.

Dengan mengingat hal ini saya telah membuat grup bernama ftpandwww dan telah membagikan semua folder dan file ke grup ini. Ini telah bekerja pada tingkat ...

Saya hampir berada di tempat yang tepat, kecuali kenyataan bahwa folder baru yang dibuat menggunakan klien FTP saya memiliki izin yang salah (yang dapat saya perbaiki dengan mengubahnya di bawah klien FTP), tetapi kemudian www-data tidak dapat menulis kepada mereka karena mereka dimiliki oleh ftpuser dan saya akhirnya harus SSH dan menjalankan chown ke grup ftpandwww sehingga mereka berdua bahagia.

Bagaimana cara membuat semua folder baru yang saya buat di FTP memiliki izin yang benar (774) dan secara otomatis dimiliki oleh grup ftpandwww di mana saya dapat mengunggah dan melayani melalui web (dengan izin menulis) tanpa harus masuk dan memberi tahu semua folder dan file baru setiap kali?

omega1
sumber

Jawaban:

10

Gunakan izin SetGID pada direktori root web, dan sebarkan ke anak-anak.

Saat Anda menerapkan SetGID pada direktori, semua item baru di direktori itu akan dibuat dengan grup yang sama dengan yang dimiliki orang tua mereka, terlepas dari keanggotaan grup default pengguna.

Untuk menerapkan SetGID ke objek sistem file, gunakan chmoddengan 2 di depan kode izin.
(mis: 740 => 2740).

Saya menggunakan SetGID pada banyak bagian Samba saya, sehingga file selalu memiliki grup sendiri Usersdan setiap anggota grup dapat membaca file (saya biasanya menggunakan 2750sehingga hanya pengguna pemilik yang dapat menulis ke file).

Dalam kasus Anda, jalankan sesuatu seperti ini (ganti XXX dengan izin yang Anda inginkan):

sudo chown -R  root:ftpandwww /var/www
sudo chmod -R 2XXX /var/www 

Kemudian file dan folder baru akan keluar dengan kepemilikan seperti ftpuser:ftpandwww.

Edit:

Bergantung pada usecase Anda, SetGID kemungkinan cukup untuk menyelesaikan masalah Anda, tetapi jika Anda memiliki masalah yang berkelanjutan di mana satu atau pengguna lain ditolak menulis, karena izin grup yang salah (tetapi kepemilikannya benar), maka taruhan terbaik Anda adalah mengatur sebuah umask kustom untuk pengguna yang menciptakan file .

Jika Anda mengalami kesulitan mengatur UMASK untuk pengguna (karena ini adalah daemon), periksa utas ini pada opsi untuk mengatur UMASK pengguna daemon .

Saya akan merekomendasikan topeng 007jika Anda ingin anggota grup dapat menulis dan menghapus file, dan tidak ada hak istimewa untuk non-pemilik.

Frank Thomas
sumber
Terima kasih, saya akan mencoba ini, ketika Anda menyebutkan bahwa semua file dan folder akan memiliki ftpuser kepemilikan ini: ftpandwww akankah www-data tetap melayani mereka dan memiliki izin (melalui skrip) untuk menulis kembali ke folder juga? Terima kasih lagi.
omega1
Pemilik-pengguna yang sebenarnya mungkin adalah pengguna yang menjalankan proses, kecuali jika menggunakan otentikasi lokal (tapi itu sepenuhnya tergantung pada aplikasi). Apa pun itu, jawaban atas pertanyaan Anda bergantung pada XXX yang Anda pilih untuk digunakan. karena kedua wwwdata dan ftpdata berada di grup yang sama, jika Anda memberi 770, maka ya, kedua akun akan dapat menulis ke objek. Namun jika Anda memberikannya 740, hanya pengguna pemilik yang dapat menulis, tetapi setiap anggota ftpandwww akan dapat membaca. Intinya adalah bahwa Anda menggunakan perm grup daripada perm user untuk operasi ini.
Frank Thomas