Adakah yang punya solusi yang bagus untuk menangani file /var/www
? Kami menjalankan Host Berbasis Virtual Berbasis Nama dan pengguna Apache 2 adalah www-data .
Kami memiliki dua pengguna biasa & root. Jadi ketika mengacaukan file /var/www
, daripada harus ...
chown -R www-data:www-data
... sepanjang waktu, apa cara yang baik untuk menangani ini?
Pertanyaan tambahan: Seberapa keras Anda kemudian pergi pada izin?
Yang ini selalu menjadi masalah di lingkungan pengembangan kolaboratif.
Jawaban:
Mencoba untuk memperluas jawaban @ Zoredache , karena saya sendiri yang mencobanya:
Buat grup baru (www-pub) dan tambahkan pengguna ke grup itu
groupadd www-pub
usermod -a -G www-pub usera
## harus menggunakan -a untuk menambahkan ke grup yang adausermod -a -G www-pub userb
groups usera
## grup tampilan untuk penggunaUbah kepemilikan segala sesuatu di bawah / var / www menjadi root: www-pub
chown -R root:www-pub /var/www
## -R untuk rekursifUbah izin semua folder menjadi 2775
chmod 2775 /var/www
## 2 = set id grup, 7 = rwx untuk pemilik (root), 7 = rwx untuk grup (www-pub), 5 = rx untuk dunia (termasuk apache www-data pengguna)Set ID grup ( SETGID ) bit (2) menyebabkan grup (www-pub) disalin ke semua file / folder baru yang dibuat dalam folder itu. Pilihan lainnya adalah SETUID (4) untuk menyalin id pengguna, dan STICKY (1) yang saya pikir hanya memungkinkan pemiliknya menghapus file.
Ada
-R
opsi rekursif, tetapi itu tidak akan membedakan antara file dan folder, jadi Anda harus menggunakan find , seperti:find /var/www -type d -exec chmod 2775 {} +
Ubah semua file menjadi 0664
find /var/www -type f -exec chmod 0664 {} +
Ubah umask untuk pengguna Anda menjadi 0002
Umask mengontrol izin pembuatan file default, 0002 berarti file akan memiliki 664 dan direktori 775. Pengaturan ini (dengan mengedit
umask
baris di bagian bawah/etc/profile
dalam kasus saya) berarti file yang dibuat oleh satu pengguna akan dapat ditulis oleh pengguna lain di www- kelompok tanpa perluchmod
mereka.Uji semua ini dengan membuat file dan direktori serta memverifikasi pemilik, grup, dan izin
ls -l
.Catatan: Anda harus keluar / masuk agar perubahan pada grup Anda berlaku!
sumber
find
perintah untuk ini. Satu tip kinerja kecil yang akan saya berikan jika Anda memiliki banyak file / direktori dan Anda menggunakan GNU find adalah menggunakan+
alih-alih\;
sehingga perintah akan beroperasi pada banyak file karena "lebih cepat untuk menjalankan perintah pada sebanyak mungkin file pada suatu waktu, daripada sekali per file. Melakukan ini menghemat waktu yang diperlukan untuk memulai perintah setiap kali. " Juga, lebih mudah untuk mengetik karena tidak perlu backslash.Saya tidak sepenuhnya yakin bagaimana Anda ingin mengkonfigurasi izin, tetapi ini mungkin memberi Anda titik awal. Mungkin ada cara yang lebih baik. Saya berasumsi Anda ingin kedua pengguna dapat mengubah apa pun di bawah / var / www /
Ini berarti setiap file baru yang dibuat oleh salah satu pengguna Anda harus nama pengguna: www-pub 0664 dan direktori apa pun yang dibuat akan menjadi nama pengguna: www-pub 2775. Apache akan mendapatkan akses baca ke segala sesuatu melalui komponen 'pengguna lain'. Bit SETGID pada direktori akan memaksa semua file yang dibuat dimiliki oleh grup yang memiliki folder. Menyesuaikan umask diperlukan untuk memastikan bahwa bit tulis diatur sehingga siapa pun dalam grup akan dapat mengedit file.
Adapun seberapa keras saya pergi pada izin. Ini sepenuhnya tergantung pada situs / server. Jika hanya ada 1-2 editor dan saya hanya perlu menjaga mereka dari melanggar hal-hal yang terlalu buruk maka saya akan mudah. Jika bisnis membutuhkan sesuatu yang lebih kompleks maka saya akan membuat sesuatu yang lebih kompleks.
sumber
Saya pikir Anda mungkin menemukan POSIX ACL (daftar kontrol akses) untuk membantu. Mereka memungkinkan model izin berbutir halus dibandingkan dengan pengguna: grup: model lain. Saya telah menemukan mereka lebih mudah untuk tetap lurus di kepala saya karena saya bisa lebih eksplisit dan juga dapat mengatur perilaku "default" untuk cabang dari sistem file.
Misalnya, Anda dapat menentukan izin setiap pengguna secara eksplisit:
Atau Anda dapat melakukannya berdasarkan pada beberapa grup bersama:
Dan mungkin Anda ingin menjadikan pengguna Apache Anda hanya-baca
Halaman manual:
Tutorial
sumber
www-data
misalnya) menjadi hanya-baca untuk seluruh situs (melalui setfacl atau chmod - atau keduanya) -> Ini jelas akan memblokir semua penulisan (pengunggahan / pembaruan plugin / modul dari sisi browser di kebanyakan CMS misalnya). Saya percaya banyak yang populer juga hanya menguji akses tulis pada tingkat perm pengguna bukan pada tingkat grup. Anda masih dapat memperbarui, tetapi pembaruan harus diterapkan secara manual dan izin kustom apa pun untuk folder tulis (log / temp / unggah / dll). Read-only adalah keamanan yang hebat jika situs Anda bekerja dengannya .. secara umum sebagian besar tidak.Pertanyaan ini ditanyakan lagi , dan seperti yang dibahas pada meta, praktik terbaik saat ini memberikan pendekatan yang lebih baik daripada yang tersedia pada 2009, ketika ditanya. Jawaban ini mencoba memberikan beberapa solusi saat ini untuk menangani lingkungan pengembangan web kolaboratif dengan aman .
Untuk server web yang aman & pengembangan kolaboratif ada lebih dari sekedar izin file:
Memiliki pengguna yang terpisah untuk setiap situs yaitu tidak melayani semua situs menggunakan
www-data
. Ini penting, karena saat ini Apache jarang melayani hanya file konten statis , tetapi menjalankan situs web yang dinamis . Jawaban ini terkonsentrasi pada PHP karena ini adalah bahasa server-situs yang paling umum , tetapi prinsip yang sama juga berlaku untuk yang lain.Jika Anda memiliki masalah keamanan di satu situs, itu dapat menyebar ke setiap situs yang berjalan sebagai pengguna yang sama. Seorang penyerang dapat melihat semua yang dilihat pengguna, termasuk informasi login basis data, dan memodifikasi setiap situs yang memiliki izin tertulis untuk pengguna.
Gunakan SSH File Transfer Protocol (SFTP). Meskipun menggunakan FTP harus ditinggalkan untuk keamanan (karena mengirim kata sandi dan konten dalam teks biasa), itu adalah pengganti SFTP yang aman juga memiliki fitur yang merupakan solusi sempurna untuk pengembangan web kolaboratif.
Setelah Anda mengisolasi situs dan satu pengguna per situs, Anda perlu memberikan akses ke pengembang web Anda, tentang apa semua pertanyaan ini. Daripada memberi mereka kata sandi untuk pengguna situs ini - atau akses ke file situs menggunakan akun pengguna pribadi mereka seperti yang disarankan - Anda dapat menggunakan kunci SSH untuk login.
Setiap pengembang dapat menghasilkan keypair dan menjaga rahasia kunci pribadi. Kemudian, kunci publik ditambahkan ke
~/.ssh/authorized_keys
file untuk setiap akun pengguna situs web yang sedang dikerjakan pengembang. Ini memiliki banyak keuntungan untuk mengelola kata sandi dan login:Setiap pengembang dapat memiliki akses ke sejumlah situs web tanpa beban untuk mengingat atau menyimpan semua kata sandi yang terlibat dengan pengaturan pengguna per situs.
Tidak perlu mengubah & membagikan kata sandi setiap kali seseorang meninggalkan perusahaan.
Anda dapat menggunakan kata sandi yang sangat kuat atau menonaktifkan login berbasis kata sandi sama sekali.
Gunakan PHP-FPM . Ini adalah pendekatan saat ini untuk menjalankan PHP sebagai pengguna. Buat baru kolam renang untuk setiap pengguna yaitu satu kolam renang per setiap situs. Ini adalah yang terbaik untuk keamanan dan kinerja, karena Anda juga dapat menentukan berapa banyak sumber daya yang dapat dikonsumsi oleh satu situs.
Lihat misalnya, Jalankan NeverEndingSecurity's php-fpm dengan pengguna / uid dan grup yang terpisah di linux . Ada tutorial seperti HowtoForge's Menggunakan PHP-FPM dengan Apache pada Ubuntu 16.04 yang tidak menggunakan PHP-FPM untuk meningkatkan keamanan melalui pemisahan pengguna, memandu untuk menggunakan soket FPM tunggal di seluruh server.
sumber