Mengapa 1024 port pertama dibatasi hanya untuk pengguna root?

53

Ini lebih merupakan keingintahuan kosong daripada hal lainnya. Seorang teman saya bertanya kepada saya 'kisaran port mana yang hanya bisa digunakan oleh root di Linux?' Saya katakan kepadanya 0-1024 dibatasi. Lalu dia bertanya mengapa itu begitu dan ... Aku bingung. Tidak tahu sama sekali.

Apakah ada alasan mengapa port ini dibatasi dan 1025-65535 tidak?

Sebagian besar layanan jaringan utama (HTTP, FTP, SSH, Telnet, HTTPS, POP, SMTP, dll) berada dalam kisaran ini sehingga kemungkinan jawaban yang saya pikirkan:

  • Pengguna yang tidak tepercaya dapat menjalankan program yang mendengarkan port ini untuk detail masuk.
  • Pengguna yang tidak dipercaya dapat menjalankan aplikasi server yang tidak sah.

Adakah yang bisa menjelaskan di sini?

Andrew Lambert
sumber

Jawaban:

52

Misalkan Anda bertukar data dengan komputer pada port <1024, dan Anda tahu bahwa komputer menjalankan beberapa varian unix. Kemudian Anda tahu bahwa layanan yang berjalan di port itu disetujui oleh administrator sistem: itu berjalan sebagai root, atau setidaknya harus dimulai sebagai root.

Di dunia Internet yang luas dan liar, ini tidak masalah. Sebagian besar server dikelola oleh orang yang sama dengan layanan yang berjalan di atasnya; Anda tidak akan mempercayai root lebih dari pengguna lain.

Dengan mesin multiuser, terutama pada jaringan lokal, ini bisa jadi masalah. Misalnya, pada hari-hari sebelum kriptografi sipil, metode populer menjalankan perintah shell pada komputer lain adalah rsh( r emote sh ell); Anda dapat menggunakan otentikasi kata sandi, atau Anda dapat mengautentikasi hanya dengan membuktikan bahwa Anda adalah pengguna X pada mesin A (dengan mesin B mengetahui bahwa X @ A dapat masuk sebagai X @ B tanpa kata sandi). Bagaimana cara membuktikannya? The rshklien setuid root, dan menggunakan nomor port <1024, sehingga server tahu bahwa klien itu berbicara dengan dapat dipercaya dan tidak akan berbohong untuk yang pengguna pada A memohon itu. Demikian pula NFS dirancang agar transparan sehubungan dengan pengguna dan izin, jadi konfigurasi umum adalah bahwa pada jaringan lokal setiap mesin menggunakan database pengguna yang sama, dan pengguna N at A memasang sistem file dari server B akan mendapatkan izin pengguna N di B. Sekali lagi, fakta bahwa klien NFS berasal dari nomor port <1024 membuktikan bahwa root di A telah memeriksa klien NFS, yang seharusnya memastikan bahwa jika ia mengirimkan permintaan yang mengaku berasal dari pengguna N, maka permintaan itu benar-benar dari pengguna N.

Pengguna yang tidak sah tidak dapat menjalankan server pada port rendah adalah keuntungan lain, tetapi bukan yang utama. Kembali pada hari-hari, spoofing adalah hal yang baru dan pengguna yang menjalankan server spoof akan dengan cepat dibatalkan oleh administrator yang waspada.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
2
Jadi, semacam otentikasi orang miskin? Apakah konvensi ini memiliki manfaat nyata dalam sistem operasi modern seperti * nix?
Andrew Lambert
2
@Amazed: Dunia unix adalah konservatif, jadi pertanyaan yang harus ditanyakan adalah "Apakah itu menyebabkan masalah nyata?" (dan harus dijawab dengan pengetahuan penuh bahwa setiap server yang layak dijalankan memiliki argumen baris perintah untuk mengubah port).
dmckee
5
@ dmckee juga bisa diperdebatkan bahwa desain seperti itu mengarah ke lebih banyak server yang berjalan sebagai root, bahkan jika mereka memiliki opsi untuk berjalan pada port alternatif.
Andrew Lambert
5
@Amazed Kadang-kadang masih berguna di jaringan lokal. Saya tidak berpikir itu mengarah ke lebih banyak server yang berjalan sebagai root, layanan dapat mengikat port kemudian menjatuhkan hak istimewa, atau menggunakan kemampuan jika tersedia, atau admin dapat mengarahkan ulang port pada konfigurasi firewall. Saya tidak berpikir itu akan dimasukkan ke dalam jika unix dirancang hari ini, tetapi tidak sakit.
Gilles 'SO- stop being evil'
1
Omong kosong ini harus lama hilang dari kernel. Tidak ada nomor port yang memiliki arti khusus. "Alasan" di balik desain itu sudah ketinggalan zaman (saya pikir itu kontroversial bahkan pada waktu desain). Tetapi yang lebih buruk dari itu adalah gagasan kisaran angka khusus yang "dapat dipercaya" adalah implikasinya. Webservers perlu dieksekusi sebagai root hanya untuk melayani halaman web. Satu exploit dan hole server hilang. Dan untuk apa? Untuk desain warisan yang bahkan tidak pernah sedikit bekerja.
masi