Apakah mungkin menambahkan daftar host yang hanya khusus untuk pengguna tertentu? Mungkin file host khusus pengguna?
Mekanisme ini juga harus melengkapi entri dalam /etc/hosts
file.
not-root-user
hosts
redspike
sumber
sumber
Jawaban:
Fungsionalitas yang Anda cari diimplementasikan dalam glibc. Anda dapat menentukan file host kustom dengan mengatur
HOSTALIASES
variabel lingkungan. Nama-nama dalam file ini akan diambil olehgethostbyname
(lihat dokumentasi ).Contoh (diuji pada Ubuntu 13.10):
Beberapa batasan:
HOSTALIASES
hanya berfungsi untuk aplikasi yang menggunakangetaddrinfo(3)
ataugethostbyname(3)
HOSTALIASES
pengaturannya hilang. ping adalah setuid root (karena itu perlu mendengarkan paket ICMP), jadiHOSTALIASES
tidak akan berfungsi dengan ping kecuali Anda sudah melakukan root sebelum menelepon ping.sumber
nscd
dan terbatas pada nama host tanpa titik.127.0.0.1 somedomain.com
)getcap /usr/sbin/ping
Anda mungkin melihat sesuatu seperti:/usr/bin/ping = cap_net_admin,cap_net_raw+p
. Dan secara teknis itu yang dibutuhkan untuk membuka soket mentah daripada ICMP (tapi saya kira Anda bisa berdebat itu hanya semantik).Di samping
LD_PRELOAD
trik. Alternatif sederhana yang dapat bekerja pada beberapa sistem adalah dengan mengedit biner pustaka sistem yang menangani resolusi nama host untuk diganti/etc/hosts
dengan jalur Anda sendiri.Misalnya, di Linux:
Jika Anda tidak menggunakan
nscd
, salinlibnss_files.so
ke beberapa lokasi Anda sendiri seperti:(perpustakaan bersama dapat ditemukan di tempat lain, misalnya
/lib/libnss_files.so.2
)Sekarang, edit biner salinan untuk menggantikan
/etc/hosts
di sana untuk sesuatu yang sama panjangnya/tmp/hosts
.Edit
/tmp/hosts
untuk menambahkan entri yang Anda inginkan. Dan gunakanuntuk
nss_files
melihat,/tmp/hosts
bukan/etc/hosts
.Alih-alih
/tmp/hosts
, Anda juga bisa membuatnya/dev/fd//3
(di sini menggunakan dua garis miring sehingga panjangnya/dev/fd//3
sama dengan/etc/hosts
), dan lakukanMisalnya yang akan memungkinkan perintah yang berbeda menggunakan
hosts
file yang berbeda .Jika
nscd
diinstal dan dijalankan, Anda dapat memotongnya dengan melakukan trik yang sama, tetapi kali ini untuklibc.so.6
dan mengganti jalur ke soket nscd (semacamnya/var/run/nscd/socket
) dengan beberapa jalur yang tidak ada.sumber
LD_LIBRARY_PATH
ke menunjuk ke direktori yang dimiliki oleh pengguna berarti proses lain yang dijalankan oleh pengguna dapat menggunakan direktori itu untuk mengkooptasi proses baru yang dihasilkan dengan mengganti perpustakaan. Dan pembaruanlibnss_files.so
melalui manajer paket (termasuk pembaruan keamanan) tidak akan tercermin dalam versi yang ditambal. MemodifikasiLD_LIBRARY_PATH
umumnya merupakan hal yang buruk untuk direkomendasikan karena alasan lain, tetapi juga tidak bijaksana karena masalah tersebut.Ruang mount pribadi yang dibuat dengan
unshare
perintah dapat digunakan untuk menyediakan file pribadi / etc / hosts ke proses shell dan proses anak berikutnya dimulai dari shell itu.sumber
unshare(2)
danclone(2)
itu adalah bagian dari keajaiban di sini. Lihat juganamespaces(7)
danuser_namespaces(7)
.Salah satu solusinya adalah memiliki masing-masing pengguna secara terpisah
chroot
, sehingga masing-masing dapat memiliki yang terpisah/etc/hosts
untuk diri mereka sendiri.sumber
Saya menghadapi kebutuhan yang sama, jadi saya mencoba libnss-userhosts, tetapi gagal pada aplikasi multithreaded. Karena itu saya telah menulis libnss-homehosts . Ini sangat baru dan hanya diuji oleh saya. Anda mungkin memberi kesempatan untuk itu! Ini mendukung beberapa opsi di /etc/host.conf, beberapa nama alias, dan penyelesaian terbalik (alamat ke nama).
sumber
Menempatkan berikut
~/.bashrc
ini bekerja untuk saya di bash. Itu mengubah nama host di perintah menjadi alamat berdasarkan entri di~/.hosts
. Jika~/.hosts
tidak ada atau jika nama host tidak ditemukan~/.hosts
, perintah dijalankan seperti biasa. Ini harus bekerja dengan flag asli dari fungsi-fungsi yang relevan dan tidak memiliki tempat di mana nama host ditempatkan relatif terhadap flag, misalnyaping -i 0.5 host1 -c 3
, berfungsi. The~/.hosts
berkas mengambil preferensi atas lokasi lain untuk menemukan nama host, jadi jika ada nama host dupicate, alamat di~/.hosts
akan digunakan.Contoh
~/.hosts
diberikan di bawah ini. Ini mengikuti format yang sama dengan/etc/hosts
. Komentar dan spasi putih ditangani dengan benar.sumber
Tidak yakin apakah ini akan membantu Anda, tetapi saya datang ke sini mencari cara untuk menambahkan "host" yang disimpan di tempat yang mudah diakses hanya oleh pengguna saya.
Saya pada dasarnya perlu untuk ssh ke kotak-kotak tertentu di jaringan kerja kami, yang hanya memiliki satu titik masuk.
Apa yang saya lakukan adalah menambahkan alias ke
.bashrc
file saya .Misalnya, jika Anda menambahkan:
di bagian bawah Anda
~/.bashrc
(~
adalah direktori home Anda). Kemudian setelah Anda keluar dan masuk lagi, Anda bisa mengetikjrfbox
, menekan Enter, dan itu akan terhubung.sumber
man ssh_config
.~/.bashrc
, cukup lakukansource ~/.bashrc
.. ~/.bashrc