pengembangan-web-mp.com

Apa cara terbaik untuk menangani izin untuk www-data pengguna Apache 2 di / var / www?

Adakah yang punya solusi yang bagus untuk menangani file di /var/www? Kami menjalankan Host Berbasis Virtual Berbasis Nama dan pengguna Apache 2 adalah www-data.

Kami memiliki dua pengguna biasa & root. Jadi saat mengacaukan file dalam /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.

218
Gareth

Mencoba memperluas pada @ Zoredache's answer , saat saya mencobanya sendiri:

  • 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 ada

    usermod -a -G www-pub userb

    groups usera ## grup tampilan untuk pengguna

  • Ubah kepemilikan semua yang ada di bawah/var/www menjadi root: www-pub

    chown -R root:www-pub /var/www ## -R untuk rekursif

  • Ubah 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-data www pengguna)

    Setel 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 baris umask di bagian bawah /etc/profile dalam kasus saya) berarti file yang dibuat oleh satu pengguna akan dapat ditulis oleh pengguna lain dalam grup-www tanpa perlu chmod mereka.

Uji semua ini dengan membuat file dan direktori dan memverifikasi pemilik, grup, dan izin dengan ls -l.

Catatan: Anda harus keluar/masuk agar perubahan pada grup Anda berlaku!

209
Tom

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 /

  • Buat grup baru (www-pub) dan tambahkan pengguna ke grup itu.
  • Ubah kepemilikan segala sesuatu di bawah/var/www menjadi root: www-pub.
  • Ubah izin semua folder menjadi 2775
  • Ubah semua file menjadi 0664.
  • Ubah umask untuk pengguna Anda menjadi 0002

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 agar tidak merusak hal-hal buruk maka saya akan mudah. Jika bisnis membutuhkan sesuatu yang lebih kompleks maka saya akan membuat sesuatu yang lebih kompleks.

62
Zoredache

Saya pikir Anda mungkin menemukan POSIX ACL (daftar kontrol akses) untuk membantu. Mereka memungkinkan model izin yang lebih 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 sistem file.

Misalnya, Anda dapat menentukan izin setiap pengguna secara eksplisit:

setfacl -Rm d:u:userA:rwX,u:userA:rwX /var/www
setfacl -Rm d:u:userB:rwX,u:userB:rwX /var/www

Atau Anda dapat melakukannya berdasarkan pada beberapa grup bersama:

setfacl -Rm d:g:groupA:rwX,u:groupA:rwX /var/www

Dan mungkin Anda ingin menjadikan pengguna Apache Anda hanya baca

setfacl -Rm d:u:www-data:rX,u:www-data:rX /var/www

Halaman manual:

Tutorial

39
Joe Holloway

Pertanyaan ini adalah ditanyakan lagi , dan sebagai dibahas pada meta, praktik terbaik saat ini memberikan pendekatan yang lebih baik daripada yang tersedia pada 2009, ketika ini ditanyakan . Jawaban ini mencoba memberikan beberapa solusi saat ini untuk menangani lingkungan pengembangan web kolaboratif secara aman .


Untuk server web yang aman & pengembangan kolaboratif ada lebih dari sekedar izin file:

  • Pisahkan pengguna untuk setiap situs mis. Jangan melayani semua situs menggunakan www-data. Ini penting, karena saat ini Apache jarang melayani semata-mata file konten statis , tetapi menjalankan situs web dinamis . Jawaban ini berkonsentrasi pada PHP seperti itu paling umum bahasa server-situs, tetapi prinsip yang sama berlaku untuk yang lain juga.

    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). Saat menggunakan FTP harus ditinggalkan untuk keamanan (karena mengirimkan kata sandi dan konten dalam teks biasa), itu pengganti aman SFTP 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 memberikan 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 kumpulan baru untuk setiap pengguna yaitu satu kumpulan untuk 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 mis. NeverEndingSecurity's Jalankan 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.

11
Esa Jokinen