GNU/Linux >> Belajar Linux >  >> Linux

Ikat ke port kurang dari 1024 tanpa akses root

Solusi 1:

Tentu saja ini mungkin. Anda hanya perlu memberikan CAP_NET_BIND_SERVICE biner.

sudo setcap cap_net_bind_service=ep some-binary

Di Linux, hal-hal yang dapat dilakukan oleh root telah dipecah menjadi sekumpulan kemampuan. CAP_NET_BIND_SERVICE adalah kemampuan untuk mengikat ke port <=1024.

Bahkan mungkin untuk menggunakan AppArmor, SELinux, atau modul keamanan Linux (LSM) lainnya untuk memberikan akses program untuk mengikat satu port itu secara khusus, tetapi menurut saya ini akan membuang-buang waktu. Keamanan tidak benar-benar didasarkan pada nomor port seperti di masa lalu.

Berikut skrip untuk OSX untuk meneruskan port 80 dan 443 ke port yang tidak memiliki hak istimewa:

echo " 
rdr pass inet proto tcp from any to any port 80 -> 127.0.0.1 port 8080
rdr pass inet proto tcp from any to any port 443 -> 127.0.0.1 port 8443
" | sudo pfctl -ef -

Solusi 2:

Cara lain untuk membuat daemon Anda merespons permintaan dari nomor port yang lebih rendah adalah dengan menggunakan iptables atau serupa untuk mengalihkan port bernomor lebih rendah ke port bernomor lebih tinggi tempat daemon Anda mendengarkan:

sudo iptables -A PREROUTING -t nat -p tcp --dport 80 -j REDIRECT --to-port 8080

Gantikan 80 dengan port yang akan diekspos, dan 8080 dengan port pendengar aplikasi Anda.

Solusi 3:

Saya pikir ada cara untuk melakukannya tetapi saya tidak 100% yakin apakah ini akan berhasil.

itu pengikatan port yang membutuhkan root, bukan aplikasi yang menggunakannya, jadi metode di bawah ini mungkin berfungsi tetapi Anda harus memiliki akses sudo terlebih dahulu.

Pertama, Anda memulai proses sebagai pengguna root menggunakan sudo myApp , setelah port diikat, Anda dapat mengalihkan pemilik proses ke pengguna yang tidak memiliki hak istimewa.

Solusi 4:

Saya samar-samar ingat perpustakaan yang disebut "authbind" yang melakukan apa yang Anda butuhkan, dengan membungkus panggilan sistem bind () (melalui perpustakaan LD_PRELOAD), dan, jika port istimewa diminta, menelurkan program root setuid yang menerima salinan dari deskriptor file, lalu memverifikasi bahwa aplikasi memang diizinkan untuk mengikat ke port, melakukan bind() dan keluar.

Tidak yakin tentang status proyek, tetapi metode ini seharusnya cukup mudah untuk diterapkan (kembali) jika diperlukan.


Linux
  1. Bagaimana Cara Menjalankan Program Tertentu Sebagai Root Tanpa Prompt Kata Sandi?

  2. Tanpa akses root, jalankan R dengan BLAS yang disetel saat ditautkan dengan referensi BLAS

  3. Kemungkinan:sudo tanpa kata sandi

  1. Buat Database PostgreSQL tanpa hak akses root

  2. Instal emacs tanpa sudo?

  3. Izinkan proses non-root untuk mengikat ke port 80 dan 443?

  1. Mengapa kata sandi 'sudo' berbeda dengan kata sandi 'su root'

  2. Bagaimana cara menginstal .deb secara lokal tanpa akses apt-get, dpkg atau root?

  3. Bagaimana saya bisa mengizinkan satu pengguna untuk su ke yang lain tanpa mengizinkan akses root?