Saya ingin berhenti harus menggunakan sudo
setiap kali saya bekerja di /var/www
. Bagaimana saya bisa melakukan itu? Saya hanya ingin memasukkan semua situs saya ke direktori ini dan bekerja dengannya tanpa terlalu banyak kesulitan.
173
sudo -u www-data
tetapi membatasi diri Anda dalamsudoers
file hanya untuk dapatsudo www-data
(dan bukan sudo root). Lihat serverfault.com/questions/295429/...Jawaban:
Sebagian besar jawaban di sini tidak ditulis dengan mempertimbangkan keamanan. Adalah baik untuk mendapatkan perasaan bahwa berlari
sudo
setiap waktu bukanlah hal yang bijaksana. Jika Anda membuat kesalahan ketik (misalnya spasi tunggal putih di tempat yang salah:sudo rm -rf / var/www/dir
jangan jalankan! ), Anda mungkin membuang sistem Anda.Catatan: Dimulai dengan Apache 2.4.7 / Ubuntu 14.04,
/var/www
telah dipindahkan untuk/var/www/html
Menyesuaikan perintah dalam jawaban ini sesuai.Lihat:
Di mana saya harus meletakkan situs web lokal saya mulai dengan versi 2.4.7 dari apache2?
Mengapa direktori www apache2 dipindahkan ke / var / www / html?
Mengubah root dokumen default untuk server HTTP
Ide buruk:
chmod 777
(sagarchalise) - ini memungkinkan siapa pun yang memiliki akses ke sistem Anda menulis ke direktori dan file dan dengan demikian memungkinkan penyusup untuk mengeksekusi kode apa pun di bawahwww-data
penggunachgrp -R www-data $HOME
(tongkol) - ini memungkinkanwww-data
untuk membaca atau menulis file apa pun di direktori home. Ini bukan mengingat aturan Least Privilegechown -R $USER:$USER /var/www
(kv1dr) - kecuali jika dunia telah membaca izin/var/www
, server web yang berjalan di bawahnyawww-data
tidak akan dapat membaca (melayani) file-file tersebut. Jika file tersebut adalah dokumen HTML biasa yang dapat diakses publik, mungkin tidak akan menjadi masalah jika dunia dapat membaca file tersebut. Tetapi jika file tersebut adalah file PHP yang berisi kata sandi, itu.CATATAN : dalam solusi di bawah ini, saya telah memberikan
www-data
hak istimewa menulis. Namun,/usr/share/doc/base-passwd/users-and-groups.txt.gz
nyatakan:Bila memungkinkan, jangan tidak memberikan hak akses menulis ke
www-data
grup.www-data
hanya perlu dapat membaca file sehingga server web dapat menyajikannya. Satu-satunya kasus di manawww-data
perlu menulis izin adalah untuk direktori menyimpan unggahan dan lokasi lain yang perlu ditulis.Solusi 1
Tambahkan diri Anda ke
www-data
grup dan atur bit setgid pada/var/www
direktori sehingga semua file yang baru dibuat mewarisi grup ini juga.Perbaiki file yang dibuat sebelumnya (dengan asumsi Anda menjadi satu-satunya pengguna
/var/www
):(lebih aman: gunakan
640
atau2750
dan secara manualchmod g+w file-or-dir
yang perlu ditulis oleh server web)Solusi 2
Buat symlink untuk setiap proyek ke direktori home Anda. Katakanlah proyek Anda berlokasi di
~/projects/foo
dan Anda ingin menempatkannya di/var/www/foo
, jalankan:Jika direktori home Anda tidak memiliki bit eksekusi (turun) ditetapkan untuk
other
(karena alasan keamanan), ubah grup ituwww-data
, tetapi atur bit eksekusi saja (tanpa baca / tulis). Lakukan hal yang sama untuk~/projects
folder karena mungkin berisi proyek lain selain www. (Anda tidak perlusudo
jika sebelumnya Anda menambahkan pengguna kewww-data
grup.)Setel grup menjadi
www-data
aktif~/projects/foo
dan biarkan server web membaca dan menulis ke file dan file + direktori dan turun ke direktori:Bahkan lebih aman: gunakan 640 dan 2750 secara default dan secara manual file chmod dan direktori yang perlu ditulis oleh pengguna server web. Bit setgid harus ditambahkan hanya jika Anda ingin setiap file yang baru dibuat
~/projects/foo
dapat diakses oleh grup.Mulai sekarang, Anda dapat mengakses situs Anda di
http://localhost/foo
dan mengedit file proyek Anda~/projects/foo
.Lihat juga
sumber
sudo su www-data
? Dikombinasikan dengan prompt berwarna berbeda, untuk membuatnya lebih jelas bahwa itu adalah shell dari pengguna yang berbeda, dan kebijakan selalu untuk meletakkan xterm yang sesuai pada - misalnya - desktop virtual 4, sehingga Anda terbiasa, untuk menghindari kebingungan?gedit
. Saya tidak pernah meneliti apakah menjalankan program GUI di bawah pengguna lain di sesi saat ini aman atau tidak, itu akan menjadi pertanyaan yang menarik.setfacl -d u::rwX,g::rX /var/www
memiliki efek lucu bahwa mode default menjadi 0750 (atau 0640) bahkan jika umask adalah nol. Ini mungkin ide yang baik jika Anda ingin menghindari file yang dapat ditulis oleh dunia, tetapi jika/var/www
sudah tidak dapat diakses oleh dunia, itu tidak diperlukan./var/www/app01
sudah memiliki kepemilikanapp01:app01
, dan kemudianwww-data
pengguna ditambahkan keapp01
grup ? Atau akankah itu menghancurkan sesuatu?Daripada menyimpan situs web saya di / var / www saya menempatkan tautan di sana ke situs-situs yang terletak di folder rumah saya. Saya dapat dengan bebas mengedit, atau menambahkan halaman ke situs saya. Ketika saya senang dengan perubahan, saya kemudian FTP ke perusahaan hosting tempat tautan nama domain saya.
sumber
Jika Anda membuat / var / www dapat ditulis oleh grupnya dan menambahkan diri Anda ke grup, Anda tidak harus menggunakan sudo saat masih cukup aman. Coba ini:
Anda kemudian dapat mengedit
/var/www/
file tanpa kerumitan.Baris pertama menambahkan Anda ke
www-data
grup, baris kedua membersihkan semua file dengan kepemilikan yang kacau, dan yang ketiga membuatnya agar semua pengguna yang merupakan anggotawww-data
grup dapat membaca dan menulis semua file/var/www
.sumber
Larangan
Jangan atur izin file ke 777 (dapat ditulis oleh dunia)
Ini adalah kelemahan keamanan yang signifikan, terutama jika Anda mengaktifkan skrip sisi server seperti PHP. Proses yang tidak terbatas seharusnya tidak dapat menulis ke file yang akan mempengaruhi situs web atau, dalam kasus skrip sisi server yang digunakan, jalankan kode arbitrer.
Jangan tambahkan diri Anda sebagai anggota grup data-www dan berikan izin menulis
Tujuan dari grup itu adalah bahwa itu adalah grup yang tidak terjangkau yang proses servernya jalankan. Mereka seharusnya hanya memiliki akses baca ke file situs web jika memungkinkan, dengan alasan yang sama seperti di atas.
Jangan mengubah izin proses Apache
Proses anak Apache dijalankan sebagai
www-data
pengguna dan grup secara default, dan ini tidak boleh diubah. Ini hanya cara untuk tidak memberi mereka izin menulis ke sistem file.Dalam keadaan tertentu Anda ingin skrip sisi server Anda dapat menulis ke file, dalam hal ini hanya file-file yang harus dibuat dapat ditulis oleh
www-data
dan perawatan harus diambil untuk memastikan keamanan.Dos
Atur file untuk dimiliki oleh Anda sendiri
Jika Anda adalah satu-satunya, atau yang biasa, untuk memodifikasi file tertentu di situs web, maka sangat masuk akal untuk mengambil kepemilikan file-file itu. Tetapkan pemiliknya ke
<your username>
.Anda tidak perlu mengubah izin server untuk ini, karena server akan terus mendapatkan akses read-only bahkan ketika file tersebut dimiliki oleh Anda.
Pilih tempat yang masuk akal untuk menyimpan file (menggunakan DocumentRoot )
Jika
/var/www
tidak masuk akal, Anda dapat menempatkannya di tempat lain. Jika mereka khusus untuk pengembangan atau pengujian Anda sendiri, Anda bisa menempatkannya di direktori home Anda. Atau Anda dapat mengatur beberapa direktori di/srv
.Jika Anda ingin memberikan akses tulis grup , buat grup baru untuk tujuan itu
Jangan menggunakan kembali grup sistem, karena ini biasanya dirancang untuk memiliki akses yang mereka miliki saat ini, dan tidak lebih, untuk alasan keamanan.
sumber
Sesederhana ini. Anda tidak perlu mengaktifkan apache 'UserDir' (tidak disarankan) atau mengacaukan grup 'www-data' (grup apache untuk Fedora)
Cukup buat direktori proyek Anda di dalam
/var/www/html
Kemudian cukup beri tahu direktori proyek kepada pengguna Anda.
Sekarang Anda dapat mulai bekerja pada folder proyek Anda sebagai pengguna biasa dengan editor apa pun, IDE pilihan Anda. Tidak ada lagi sudos :)
sumber
/var/www
dirinya sendiri, tetapi dari subdirektori.chmod in / var di www untuk memungkinkan pemilik mengakses, dan chown untuk memastikan Anda memilikinya. Mungkin ide yang bodoh, tetapi pasti akan berhasil.
sumber
/var
, adil/var/www
dan / atau isinya.Anda dapat memulai sesi www di terminal dengan
Dikombinasikan dengan prompt berwarna berbeda *, untuk membuatnya lebih jelas bahwa itu adalah shell dari pengguna yang berbeda, dan kebijakan selalu menempatkan xterm yang sesuai (dan editor dan semacamnya) pada - misalnya - desktop virtual 4, sehingga Anda terbiasa, untuk menghindari kebingungan.
*) Untuk prompt berwarna berbeda dengan karakter berbeda, buat file / etc / prompt seperti ini:
dan sumber dari
/etc/bash.bashrc
misalnya.Sebagai alat tambahan untuk membantu perbedaan, Anda selalu dapat mengedit file Anda dengan alias 'edit' atau symlink, yang menunjuk, tergantung pada identitas Anda (data taylor / www) ke gedit atau mousepad, vim atau pico. Atau Anda dapat menggunakan profil editor yang berbeda, setidaknya di gedit Anda dapat mengatur preferensi Anda ke teks hitam di tanah putih atau teks putih di tanah hitam misalnya.
Saya hanya memiliki kebijakan seperti itu untuk bekerja sebagai root, jadi saya tidak yakin seberapa bagusnya bekerja dengan data-www. Dikombinasikan dengan ssh-sesi untuk host yang berbeda, yang memiliki prompt sendiri, itu tidak menghentikan saya dari kadang-kadang salah, tetapi jika itu terjadi, saya menyadari dengan cepat, apa yang salah, dan itu jarang terjadi.
catatan: skrip cepat sebagian merupakan salinan halaman manual bash.
sumber