Mengapa Linux tidak mengizinkan izin port jaringan tingkat pengguna? [Tutup]

8

Sesekali, saya akan mencari cara melakukan izin tingkat pengguna untuk akses port jaringan di Linux dan muncul agak kering. Misalnya, jika Anda memiliki mesin yang menjalankan proses kritis yang mendengarkan pada port 5080, saya merasa harus ada cara untuk memberikan hanya satu set pengguna yang dipercaya akses ke port itu - sama seperti bagaimana proses izin waras lainnya selesai, seperti izin filesystem.

Tapi sepertinya port tinggi tersedia untuk semua pengguna, dan port rendah hanya tersedia untuk di-root, dengan hanya peretasan kasar seperti authbind dan penerusan dengan iptables untuk memungkinkan pengguna lain menggunakan port rendah. Sepertinya ini adalah situasi yang sangat aneh, jadi saya bertanya-tanya, mengapa itu dirancang seperti itu dan mengapa orang tidak merasa perlu mengubah situasi itu?

BT
sumber

Jawaban:

4

Linux mendukung ruang nama jaringan. Anda dapat membuat berbagai proses melihat berbagai set antarmuka jaringan. Ini adalah topik yang luas.

Jika Anda ingin port komunikasi yang dapat diakses di dalam mesin hanya untuk pengguna tertentu, Anda dapat menggunakan soket Unix tradisional, yang memiliki nama di ruang sistem file dengan izin. Linux menghormati izin baca / tulis pada soket AF_UNIX.

Jika sebuah mesin mendengarkan permintaan TCP atau UDP eksternal pada port 5080 yang datang dari komputer lain, maka kita tidak dapat lagi berbicara tentang izin pengguna . Anda harus membangun keamanan ke dalam protokol yang melewati 5080: otentikasi, enkripsi, integritas / spoof-proofing / dos-resistance.

Kaz
sumber
Apakah ruang nama jaringan memungkinkan pengguna yang berbeda memiliki akses ke ruang nama yang berbeda yang pada dasarnya dapat membuat semua pengguna dari beberapa port dan memblokir yang lain?
BT
2

Awalnya, saya kira, karena itu akan membutuhkan desain yang rumit yang tidak sesuai dengan ruang lingkup sistem Unix awal.

Kemudian, saya kira, karena ada cara yang ditetapkan untuk mengimplementasikan izin port jaringan tingkat pengguna untuk kasus-kasus umum: inetd , yang muncul sekitar beberapa tahun setelahnya ( 4.3BSD ) TCP / IP ( 4.2BSD ). The inetddaemon berjalan sebagai root dan mendengarkan pada port yang ditentukan dalam file konfigurasi. Setelah koneksi masuk, inetdmemunculkan program lain yang ditentukan dalam file konfigurasinya, dan yang berjalan sebagai pengguna juga ditentukan dalam file konfigurasi inetd. Jadi, setidaknya untuk layanan di mana dapat diterima untuk memulai proses baru pada setiap koneksi, masalahnya terpecahkan.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
Menarik. Saya harus mengatakan, itulah hal linux yang harus dilakukan untuk membuat solusi di mana setiap tindakan memerlukan proses baru.
BT
0

Saya pikir salah satu alasannya adalah sebagian besar pengguna harus dapat menggunakan porta fana untuk menghubungkan ke server lain, tanpa harus menjadi root.

Koneksi TCP / IPv4 terdiri dari dua titik akhir, dan setiap titik akhir terdiri dari alamat IP dan nomor port. Oleh karena itu, ketika pengguna klien terhubung ke komputer server, koneksi yang dibuat dapat dianggap sebagai 4-tupel (server IP, port server, IP klien, port klien). Biasanya tiga dari empat sudah dikenal - mesin klien menggunakan alamat IP-nya sendiri dan ketika menghubungkan ke layanan jarak jauh, alamat IP mesin server dan nomor port layanan diperlukan.

Apa yang tidak segera jelas adalah bahwa ketika koneksi dibuat bahwa sisi klien koneksi menggunakan nomor port. Kecuali jika program klien secara eksplisit meminta nomor port tertentu, nomor port yang digunakan adalah nomor port fana. Port Ephemeral adalah port sementara yang ditetapkan oleh tumpukan IP mesin, dan ditugaskan dari berbagai port yang ditunjuk untuk tujuan ini. Ketika koneksi berakhir, porta sesaat tersedia untuk digunakan kembali, meskipun sebagian besar tumpukan IP tidak akan menggunakan kembali nomor port sampai seluruh kumpulan porta sesaat telah digunakan. Jadi, jika program klien terhubung kembali, ia akan diberi nomor port ephemeral yang berbeda untuk sisi koneksi baru.

Paul Calabro
sumber
1
Bagaimana izin jaringan tingkat pengguna mencegah hal itu?
BT