Menjalankan layanan web yang berikatan dengan port 80 biasanya tidak memerlukan hak akses sudoer. Karena port 80/443 adalah port sistem, artinya port hanya dapat digunakan oleh pengguna yang memiliki hak istimewa, mengapa layanan tersebut masih dapat mengikat port ini?
service
permissions
port-443
adaml
sumber
sumber
Jawaban:
Pada dasarnya ada dua pendekatan yang berbeda:
Awalnya mulai berjalan sebagai root, ikat ke port yang diistimewakan, dan kemudian drop down ke pengguna yang tidak memiliki hak.
inetd, atau xinetd menjalankan privilege, dan meneruskan permintaan ke server web yang berjalan tanpa hak.
sumber
Saya pikir Anda salah. Siapa pun dapat menggunakan porta ini. Mengikat mereka adalah operasi istimewa.
Alasannya di sini adalah bahwa beberapa pengguna Joe seharusnya tidak dapat menulis server web jahat dan kemudian membuat beberapa host di mana ia tidak memiliki hak administratif. Tentu saja ini adalah model yang cukup lemah. Biasanya tidak ada yang mencegah Joe meletakkan komputernya sendiri di jaringan, dan ia dapat memiliki hak administratif untuk mesin apa pun yang ia miliki akses fisiknya.
Saya akan melakukan demonstrasi dengan netcat.
Sebagai pengguna biasa, saya tidak dapat mengikat ke port 80:
Saya dapat mengikat ke port 8080:
Sementara itu di terminal lain, saya dapat terhubung ke port 80 dan mengirim beberapa data, dan melihatnya muncul di server saya baru saja mulai:
Jika saya ingin mengikat ke port 80, saya harus menjadi root:
Atau saya dapat menetapkan
CAP_NET_BIND_SERVICE
kemampuan kenc
biner:Pilihan lain adalah menulis program server sehingga setelah itu disebut
listen()
hak akses root. Ini adalah solusi yang cukup umum, dan Anda akan melihatnya dengan sebagian besar daemon. Apache, misalnya, memulai dari init sebagai root, dan kemudian menjatuhkan hak akses root dan menjadi penggunawww-data
atau sesuatu yang serupa setelah itu terikat ke port 80. Coba jalankan/etc/init.d/apache start
sebagai bukan root dan Apache mungkin akan gagal untuk memulai.sumber