Menjalankan Apache sebagai pengguna yang berbeda

10

Ketika saya menjalankan ps -efHperintah untuk mencantumkan semua proses, saya dapat melihat Apache berjalan rootdan tampaknya memiliki sub-proses yang berjalan www-data. Berikut petikannya:

root     30117     1  0 09:10 ?        00:00:00   /usr/sbin/apache2 -k start
www-data 30119 30117  0 09:10 ?        00:00:00     /usr/sbin/apache2 -k start
www-data 30120 30117  0 09:10 ?        00:00:00     /usr/sbin/apache2 -k start
www-data 30121 30117  0 09:10 ?        00:00:00     /usr/sbin/apache2 -k start

Bisakah saya membuat Apache dan semua sub-proses dijalankan sebagai pengguna yang berbeda apache2d:apache2d? Kalau begitu bagaimana? Saya membaca di suatu tempat bahwa pengaturan untuk ini dapat ditemukan di /etc/apache2/httpd.conftetapi file itu tampaknya kosong? Bisakah ini dilakukan dengan mengubah pemilik dan grup /etc/init.d/apache2skrip lalu mengatur flag setuid di atasnya?

Mridang Agarwalla
sumber

Jawaban:

21

Apache harus dijalankan sebagai root pada awalnya untuk mengikat ke port 80. Jika Anda tidak menjalankannya sebagai root pada awalnya maka Anda tidak dapat mengikat ke port 80. Jika Anda ingin mengikat ke beberapa port di atas 1024 maka ya, Anda bisa. Kalau tidak, jangan khawatir tentang root. Itu adalah proses Apache induk dan tidak melayani permintaan apa pun. Ini akan menelurkan proses anak dan menjatuhkan hak istimewa untuk menangani permintaan.

Untuk mengubah pengguna Apache, atur parameter Userdan Groupdi konfigurasi Apache Anda.

bahamat
sumber
Yah, maaf ngelantur, tapi saya perhatikan bahwa haproxy dapat berjalan sebagai haproxy (bukan sebagai root), dan mengikat port tcp 80. Bagaimana hal ini tercapai? Adakah pencerahan?
kiiwii
1
Tidak. Proses hanya dapat mengikat port di bawah 1024 jika memiliki hak pengguna super. Jadi haproxy bisa berupa hak root dan dropping (mungkin) atau setuid root (tidak mungkin).
bahamat
Anda tidak perlu menjalankannya sebagai root, Anda hanya perlu mengizinkan akses pengguna 'apache' Anda ke port yang dibatasi (yaitu, yang di bawah 1024). Jawaban ini menjelaskan bagaimana Anda dapat menggunakan 'authbind' untuk melakukan itu: superuser.com/questions/710253/…
Animal451
4

@ Bahaham menjelaskannya dengan cukup baik, tapi saya akan menambahkan sedikit lebih detail.

Dalam operasi normal, proses apache yang dimiliki root tidak akan melakukan operasi aktual selain mendengarkan pada port 80 dan meneruskan koneksi yang masuk ke anak- www-dataanaknya (yang tidak memiliki hak istimewa, sebagai pengguna).

Lokasi file konfigurasi master tergantung pada opsi waktu kompilasi dan bervariasi per distribusi, tetapi /etc/apache2/apache2.confmerupakan perkiraan awal yang baik.

Juga, jika Anda membuat sistem webhosting multi-pengguna, Anda mungkin ingin melihat ke SuExec dan fcgid sehingga setiap proses apache pengguna webhosting individu berjalan seperti kata pengguna - sehingga jika satu pengguna lalai dengan keamanan mereka, yang lain pengguna tidak akan terpengaruh.

Shadur
sumber
3

Setidaknya di Ubuntu, pengaturan untuk ini ada di /etc/apache2/envvars. Tweak itu, lalu restart apache dan Anda pergi dan berjalan.

mlissner
sumber
Terima kasih, ini membantu saya! Saya sedang menyiapkan kotak gelandangan ubuntu, dan untuk beberapa alasan /etc/apache2/httpd.conf tidak digunakan untuk memuat pengguna dan grup. utusan tampaknya melakukan trik!
Greg
2

Juga, periksa Apache2 ITK MPM .

Itu bercabang dengan utas Apache dengan uid/ gid, ini mari Anda tetap gunakan mod_php. Tidak ada lagi chmod/ chowndll.

Olli
sumber
Upvoting mpm_itkyang merupakan peningkatan signifikan dibandingkan suexec / fcgid
Shadur
0

Mac OSX:

Apa yang berhasil bagi saya adalah masuk ke file konfigurasi apache:

/etc/apache2/httpd.conf

Dalam file ini saya telah mencari Pengguna atau Grup

dan menabrak:

User _www
Group _www

Saya telah mengubahnya menjadi apa yang pernah dibutuhkan pengguna / grup (dalam kasus saya menjadi pengguna / grup yang merupakan pemilik file aplikasi web saya yang dapat Anda lihat. Dan ini dapat Anda periksa dengan menggunakan 'ls-l' yang sederhana perintah)

Air raksa
sumber