Saya ingin menjalankan server web di Mac saya sebagai proses non-root. Biasanya hanya proses root yang dapat mengikat port 80 (atau port apa pun di bawah 1024).
Dapatkah saya membuka port 80 secara khusus sehingga proses non-root dapat mendengarkannya?
Jawaban:
Ini sulit dilakukan dengan desain, dan kecuali Anda memiliki akses root ke mesin Anda, hal-hal berikut tidak akan bekerja karena mereka memerlukan root untuk mengatur perubahan. Namun, setelah diubah, program userspace akan memiliki akses tanpa harus root.
Ada dua cara umum untuk mencapai ini, dan yang Anda pilih akan bergantung pada mengapa Anda mencoba mengatasi batasan:
Arahkan port 80 ke port lain, seperti 8080
Dengan mengkonfigurasi ulang mesin Anda untuk melewatkan semua lalu lintas port 80 ke port 8080, atau port apa pun yang Anda pilih, maka Anda dapat mengizinkan server ruang pengguna untuk menerima port privilege root di area yang diberi akses.
Prosesnya sangat mudah:
( sumber )
Ini adalah perubahan sementara, dan akan kembali setelah Anda memulai ulang, atau menyiram seperti yang ditunjukkan pada baris terakhir.
Anda dapat membuat perubahan itu permanen , atau Anda dapat menambahkan perintah sebagai garis startup sebelum memulai server Anda, yang mungkin lebih aman dari sudut pandang keamanan.
Gunakan Authbind
Authbind dirancang khusus untuk memungkinkan satu akses program ke port level yang lebih rendah tanpa memberikan akses root penuh.
Ada port MacOSX:
https://github.com/Castaglia/MacOSX-authbind
Ini mungkin masih terbatas pada lalu lintas IPv4, jadi Anda mungkin harus melakukan penyelidikan tambahan untuk menemukan apakah itu memenuhi kebutuhan Anda
sumber
launchd
.plist
... `"ProgramArguments": [ "path/to/authbind", "/usr/bin/php", "-c", "/www/.router.ini", "-S", "0.0.0.0:80", "-t", "/www", "/www/.router.php"]
Woohoo!ipfw
. Intisari ini menjelaskan solusi alternatif menggunakanpf
.Anda dapat menggunakan
ncat
untuk meneruskan lalu lintas dari server web yang berjalan di beberapa port lain:Ini akan meneruskan lalu lintas di port 80 ke localhost: 1234. Namun ini sedikit omong kosong, saya tidak akan menggunakannya di mana pun selain pengujian cepat dan jelas tidak dalam produksi.
Perhatikan bahwa ini tidak akan memungkinkan proses non-root untuk mengikatnya, tetapi dengan memilih port proses dapat mengikat, 1234 dalam contoh ini, itu akan terlihat seperti terikat ke port 80. Ini melakukan setara dengan meneruskan port 80 ke port 1234 dengan firewall, tetapi pada basis yang jauh lebih sementara.
sumber
ncat
datang dengannmap
yang dapat diinstal melalui Mac Ports dengansudo port install nmap
. MacPorts sendiri dapat diinstal dari macports.org/install.php .Anda juga dapat menggunakan ssh untuk melakukan penerusan port. Jadi jika Anda memiliki server yang berjalan pada 8080, Anda dapat meneruskan lalu lintas dari port 80. Berikut ini skrip yang saya gunakan, yang menghentikan apache asli jika berjalan dan meneruskan lalu lintas:
forward8080to80.command:
sumber
Yang harus Anda lakukan adalah membuka port 80 pada router Anda dan arahkan ke alamat IP lokal dari server web Anda. Kemudian di Mac Anda, aktifkan Berbagi Web dari System Preferences> Berbagi panel preferensi dan arahkan ke direktori yang Anda pilih. Ini telah bekerja untuk saya di masa lalu sampai beralih ke Server 10.6.
sumber