আমি কি / ইত্যাদি / হোস্টের পরিপূরক হিসাবে কোনও ব্যবহারকারী-নির্দিষ্ট হোস্ট ফাইল তৈরি করতে পারি?


192

হোস্টগুলির একটি তালিকা যুক্ত করা সম্ভব যা কেবলমাত্র নির্দিষ্ট ব্যবহারকারীর জন্য নির্দিষ্ট? সম্ভবত একটি ব্যবহারকারী নির্দিষ্ট হোস্ট ফাইল?

এই প্রক্রিয়াটি /etc/hostsফাইলটিতে প্রবেশকারীদের পরিপূরক করা উচিত ।


2
ভাল, আপনি পরিবর্তে নিজস্ব নেমসার্ভারগুলি চালাতে পারেন, এবং ব্যবহারকারী নির্দিষ্ট ব্যবহারকারী রেজোলভকনফ অনুযায়ী পৃথক নেমসার্ভার ব্যবহার করতে পারেন - ব্যবহারকারী-নির্দিষ্ট রেজোলভকনফ তৈরি করা ছাড়াও ব্যবহারকারী-নির্দিষ্ট / ইত্যাদি / হোস্টগুলি তৈরি করা ঠিক ততটাই কঠিন বলে মনে হয়।
এসএফ

2
সার্ভারটি যদি দূর থেকে থাকে তবে আপনি ~ / .ssh / config ফাইলটি চেষ্টা করতে পারেন: এই পোস্টটি
আয়েজজা

উত্তর:


133

আপনি যে কার্যকারিতাটির সন্ধান করছেন তা glibc এ প্রয়োগ করা হয়েছে। আপনি HOSTALIASESপরিবেশের ভেরিয়েবল সেট করে একটি কাস্টম হোস্ট ফাইলটি সংজ্ঞায়িত করতে পারেন । এই ফাইলটির নামগুলি বাছাই করবে gethostbyname( ডকুমেন্টেশন দেখুন )।

উদাহরণ (উবুন্টু ১৩.১০ তে পরীক্ষিত):

$ echo 'g www.google.com' >> ~/.hosts
$ export HOSTALIASES=~/.hosts
$ wget g -O /dev/null

কিছু সীমাবদ্ধতা:

  • HOSTALIASESশুধুমাত্র অ্যাপ্লিকেশন ব্যবহার করে getaddrinfo(3)বা ব্যবহার করেgethostbyname(3)
  • যখন setuid ব্যবহার করা হয় libc পরিবেশ স্যানিটাইজ করে, যার অর্থ HOSTALIASESসেটিংসটি হারিয়ে গেছে। পিং সেটুইড রুট (কারণ এটি আইসিএমপি প্যাকেটগুলির জন্য শোনা দরকার), তাই HOSTALIASESপিংয়ের সাথে কাজ করবে না যদি না আপনি পিং কল করার আগেই ইতিমধ্যে রুট হন।

12
মনে রাখবেন যে আপনি যদি ব্যবহার করেন nscdএবং বিন্দু ছাড়া হোস্ট-নেমে সীমাবদ্ধ থাকেন তবে এটি কাজ করে না ।
স্টাফেন চেজেলাস

3
এটি CentOS 6
kbolino

3
পার্টিতে দেরীতে, তবে এটি যা পছন্দসই তার বিপরীত, তাই না? আমি মনে করি ওপি / ইত্যাদি / হোস্টগুলিতে হোস্ট-রেজোলিউং এন্ট্রি যুক্ত করার অনুরূপ সমাধান খুঁজছে, তবে এটি এমন একটি যা বাড়ানো সুবিধাগুলি ছাড়াই ব্যবহারকারল্যান্ডে করা যায়। (অর্থাত্ 127.0.0.1 somedomain.com)
নুরি হজস

আমার তখন মনে নেই তবে এই দিনগুলির পিং লিনাক্সে স্যুইড বাইনারি নয়; এটি ক্ষমতা ব্যবহার করে। আপনি চালাতে পারেন getcap /usr/sbin/pingআপনার মত কিছু দেখতে পারে: /usr/bin/ping = cap_net_admin,cap_net_raw+p। এবং প্রযুক্তিগতভাবে এটি আইসিএমপির পরিবর্তে একটি কাঁচা সকেট খোলার প্রয়োজন (তবে আমি মনে করি আপনি যে যুক্তি দিতে পারেন এটি কেবল শব্দার্থক)।
প্রাইফটান

লোকটি বলা সত্ত্বেও "হোস্টালিয়াসেস দ্বারা নির্দেশিত উরফ ফাইলটি প্রথমে নামের জন্য অনুসন্ধান করা হবে" অগ্রাধিকারটি এলোমেলো এবং যদি এই উইজেটের উদাহরণটি চালানো হয় তবে এটি কয়েক ডজন ভুল হয়ে যায়।
নাকিলন

42

LD_PRELOADকৌশলগুলি পাশাপাশি । একটি সহজ বিকল্প যা কয়েকটি সিস্টেমে কাজ করতে পারে তা হ'ল সিস্টেম লাইব্রেরির একটি অনুলিপি বাইনারি-সম্পাদনা /etc/hostsযা আপনার নিজের পাথের সাথে প্রতিস্থাপনের জন্য হোস্টনাম রেজোলিউশন পরিচালনা করে ।

উদাহরণস্বরূপ, লিনাক্সে:

আপনি যদি ব্যবহার না করে থাকেন তবে নিজের মতো করে কিছু জায়গায় nscdঅনুলিপি করুন libnss_files.so:

mkdir -p -- ~/lib &&
cp /lib/x86_64-linux-gnu/libnss_files.so.2 ~/lib

(ভাগ করা লাইব্রেরি অন্য কোথাও অবস্থিত হতে পারে, যেমন /lib/libnss_files.so.2)

এখন /etc/hostsসেখানে একই দৈর্ঘ্যের মতো কোনও জায়গায় প্রতিস্থাপন করতে অনুলিপি সম্পাদনা করুন /tmp/hosts

perl -pi -e 's:/etc/hosts:/tmp/hosts:g' ~/lib/libnss_files.so.2

/tmp/hostsআপনি চান এন্ট্রি যোগ করতে সম্পাদনা করুন। আর ব্যবহার করুন

export LD_LIBRARY_PATH=~/lib

জন্য nss_filesসন্ধান করার জন্য /tmp/hostsপরিবর্তে /etc/hosts

পরিবর্তে /tmp/hosts, আপনি এটিও তৈরি করতে পারেন /dev/fd//3(এখানে দুটি স্ল্যাশ ব্যবহার করে যাতে দৈর্ঘ্যের /dev/fd//3সমান হয় /etc/hosts), এবং করুন

exec 3< ~/hosts

উদাহরণস্বরূপ যা বিভিন্ন কমান্ডকে বিভিন্ন hostsফাইল ব্যবহার করার অনুমতি দেয় ।

যদি nscdইনস্টল এবং চলমান থাকে তবে আপনি একই কৌশলটি ব্যবহার করে এটিকে বাইপাস করতে পারেন, তবে libc.so.6এবার /var/run/nscd/socketকিছুটা অস্তিত্বহীন পাথ দিয়ে এনএসসিডি সকেটের (এমন কিছু ) পথের জন্য এবং প্রতিস্থাপন করতে পারেন ।



7
বাইনারি প্যাচিংয়ের জন্য +1, সুরক্ষা জড়িতদের জন্য -1
পার্থিয়ান শট

@ পার্থিয়ানশট, কী সুরক্ষা জড়িত?
স্টাফেন চেজেলাস

1
@ স্টাফেনচাজলাস LD_LIBRARY_PATHব্যবহারকারীর মালিকানাধীন কোনও ডিরেক্টরিতে নির্দেশিত হওয়া মানে ব্যবহারকারী দ্বারা চালিত অন্য যে কোনও প্রক্রিয়া সেই ডিরেক্টরিটি লাইব্রেরি প্রতিস্থাপনের দ্বারা উদ্ভূত নতুন কোনও প্রক্রিয়া সহ-অপ্ট করতে ব্যবহার করতে পারে। এবং libnss_files.soপ্যাকেজ পরিচালকের মাধ্যমে আপডেটগুলি (সুরক্ষা আপডেট সহ) প্যাচযুক্ত সংস্করণে প্রতিফলিত হবে না। LD_LIBRARY_PATHঅন্যান্য কারণে সুপারিশ করা সাধারণত পরিবর্তন করা খারাপ কাজ, তবে এই সমস্যাগুলির কারণে এটি বুদ্ধিমানেরও নয়।
পার্থিয়ান শট

13
@ পার্থিয়ানশট, অনুপস্থিত আপডেটগুলি সম্পর্কে আপনার বক্তব্যটি একটি ন্যায্য বিষয়। তবে আপনার অন্য বিষয়টির জন্য, যদি আপনার নামে কোনও দুর্বৃত্ত সফ্টওয়্যার চলমান থাকে তবে এটি like এলডি_লিবিআরএএপিএটিএইচএলএর একটি অঞ্চলে লেখার অ্যাক্সেস থাকা আপনার চিন্তার মধ্যে সবচেয়ে কম কারণ এটি ইতিমধ্যে আপনার মতো আরও খারাপ এবং আরও নির্ভরযোগ্য অঞ্চলে লেখার অ্যাক্সেস পেয়েছে your .বাশ *, ক্রোনট্যাব, .ফরওয়ার্ড এবং আপনার ব্যবহৃত সমস্ত সফ্টওয়্যার দ্বারা সমস্ত কনফিগারেশন ফাইল (যেখানে এটি উদাহরণস্বরূপ LD_ RE পূর্বনির্ধারিত, লাইব্রেরিপাথ set সেট করতে পারে তবে সাধারণত আরও খারাপ করতে পারে)
স্টাফেন চ্যাজেলাস

24

unshareকমান্ডের সাহায্যে তৈরি ব্যক্তিগত মাউন্টস্পেসগুলি একটি শেল প্রক্রিয়াতে প্রাইভেট / ইত্যাদি / হোস্ট ফাইল সরবরাহ করতে ব্যবহৃত হয় এবং পরবর্তী শেল থেকে পরবর্তী যে কোনও শিশু প্রক্রিয়া শুরু হয়।

# Start by creating your custom /etc/hosts file
[user] cd ~
[user] cat >my_hosts <<EOF
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
127.0.0.1 news.bbc.co.uk
EOF

[user] sudo unshare --mount
# We're now running as root in a private mountspace. 
# Any filesystem mounts performed in this private mountspace
# are private to this shell process and its children

# Use a bind mount to install our custom hosts file over /etc/hosts
[root] mount my_hosts /etc/hosts --bind

[root] cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
127.0.0.1 news.bbc.co.uk

[root] exec su - appuser

[appuser] # Run your app here that needs a custom /etc/hosts file

[appuser] ping news.bbc.co.uk
PING news.bbc.co.uk (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.062 ms
64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.026 ms
^C
--- news.bbc.co.uk ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.026/0.044/0.062/0.018 ms

3
অপেক্ষা করুন। আমি ভেবেছিলাম সবেমাত্র মাউন্ট করা ফাইল সিস্টেমগুলি ডিরেক্টরিতে (মাউন্ট পয়েন্ট) মাউন্ট করুন। আমি জানতাম না যে কোনও ফাইল অন্য কোনও ফাইলের উপরে মাউন্ট করা যেতে পারে। এটা কি সত্যিই কাজ করে? (আমি এটি গুরুত্ব সহকারে জিজ্ঞাসা করছি That এটি
ব্যঙ্গাত্মক

5
হ্যাঁ, এটি কাজ করে, আপনি --bind দিয়ে অন্য কোনও ফাইলের উপর একটি ফাইল মাউন্ট করতে পারেন।
frielp

ঠিক সেই কৌতূহলীদের জন্য একটি নোট যেমন: এটি নেমস্পেসগুলির সাথে করা; এখানে সিস্টাল রয়েছে unshare(2)এবং clone(2)এটি এখানে যাদুটির অংশ। এছাড়াও দেখুন namespaces(7)এবং user_namespaces(7)
প্রাইফটান

5

ওয়ান সমাধান একটি পৃথক প্রতিটি ব্যবহারকারী আছে হয় chroot, তাই তারা একে একটি আলাদা থাকতে পারে /etc/hostsনিজেদের।


3
এটি একটি উত্তর হতে পারে, তবে সামান্য ব্যাখ্যা দিয়ে বলা হিসাবে এটি একটি মন্তব্য হিসাবে বেশি উপযুক্ত
অ্যান্থন

2
আচ্ছা ... হ্যাঁ, এটা করণীয়। যদিও ক্রুটিং এই ধরণের জিনিসটির জন্য বেশ ভারী-শুল্ক সমাধান। এবং এটি নিজের ইস্যুগুলির নিজস্ব সেট নিয়ে আসে।
পার্থিয়ান শট

5

আমি একই প্রয়োজনের মুখোমুখি হয়েছি, তাই আমি libnss-userhosts চেষ্টা করেছি, তবে এটি মাল্টিথ্রেডেড অ্যাপ্লিকেশনগুলিতে ব্যর্থ। অতএব আমি স্বতন্ত্র-হোমহোস্ট লিখেছি । এটি খুব নতুন এবং কেবল আমার দ্বারা পরীক্ষিত। আপনি এটির জন্য একটি সুযোগ দিতে পারেন! এটি /etc/host.conf, একাধিক ওরফে নাম এবং বিপরীত সমাধান (নামের ঠিকানায়) কিছু বিকল্প সমর্থন করে।


1
এটি libnss রক্ষণাবেক্ষণকারীদের এবং / অথবা বিতরণ রক্ষণাবেক্ষণকারীদের কাছে পিচ দেওয়া ভাল ধারণা বলে মনে হচ্ছে। তবে এটি হওয়ার আগে, রুটহীন ব্যবহারকারীরা নিজেরাই এটি ব্যবহার করতে পারবেন না। এখনও, +1
einpoklum

3

নিম্নলিখিতটি স্থাপন করা ~/.bashrcআমার পক্ষে ব্যাশে কাজ করছে। এটি কমান্ডের হোস্টনামকে প্রবেশের ভিত্তিতে একটি ঠিকানায় রূপান্তর করে ~/.hosts। যদি ~/.hostsঅস্তিত্ব না থাকে বা হোস্টনামটি খুঁজে না পাওয়া যায় ~/.hosts, কমান্ডটি স্বাভাবিক হিসাবে কার্যকর করে। এটি সম্পর্কিত ফাংশনগুলির মূল পতাকাগুলির সাথে কাজ করা উচিত এবং পতাকাগুলির তুলনায় হোস্টনামটি যেখানে স্থাপন করা হয়েছে তা নির্বিশেষে ping -i 0.5 host1 -c 3কাজ করে works ~/.hostsফাইল হোস্ট-নেম খোঁজার জন্য অন্য কোনও স্থানে উপর অগ্রাধিকার লাগে, তাই যদি কোন dupicate হোস্টনেইম হয়, ঠিকানা ~/.hostsব্যবহার করা হবে।

$ cat ~/.bashrc 
function resolve {
        hostfile=~/.hosts
        if [[ -f "$hostfile" ]]; then
                for arg in $(seq 1 $#); do
                        if [[ "${!arg:0:1}" != "-" ]]; then
                                ip=$(sed -n -e "/^\s*\(\#.*\|\)$/d" -e "/\<${!arg}\>/{s;^\s*\(\S*\)\s*.*$;\1;p;q}" "$hostfile")
                                if [[ -n "$ip" ]]; then
                                        command "${FUNCNAME[1]}" "${@:1:$(($arg-1))}" "$ip" "${@:$(($arg+1)):$#}"
                                        return
                                fi
                        fi
                done
        fi
        command "${FUNCNAME[1]}" "$@"
}

function ping {
        resolve "$@"
}

function traceroute {
        resolve "$@"
}

এর একটি উদাহরণ ~/.hostsনীচে দেওয়া হল। এটি একই বিন্যাস অনুসরণ করে /etc/hosts। মন্তব্য এবং সাদা স্থান সঠিকভাবে পরিচালনা করা হয়।

$ cat ~/.hosts 
# addresses and hostnames
stackexchange.com se

192.168.0.1 host1 # this is host1's address
login-node.inst.ac.uk login

গিট বা উইজেট কি এই "সংকল্প" ব্যবহার করতে পারে? বা কেবলমাত্র আপনার ফাংশন যারা "সংকল্প" ফাংশন ব্যবহার করেন?
কিনসী

2

এটি আপনাকে সহায়তা করবে কিনা তা নিশ্চিত নয়, তবে আমি এখানে কেবলমাত্র আমার ব্যবহারকারীর কাছে সহজেই অ্যাক্সেসযোগ্য কোনও "সংরক্ষিত" হোস্টকে যুক্ত করার উপায় খুঁজছিলাম।

আমার মূলত আমাদের ওয়ার্ক নেটওয়ার্কের নির্দিষ্ট কিছু বাক্সে প্রবেশ করতে সক্ষম হওয়া দরকার, যার কেবল একটি প্রবেশ পয়েন্ট রয়েছে।

আমি যা করেছি তা হ'ল আমার .bashrcফাইলে এলিয়াস যুক্ত করা ।

উদাহরণস্বরূপ, যদি আপনি যোগ করেছেন:

alias jrfbox='ssh jason@192.168.6.6' 

আপনার নীচে ~/.bashrc( ~আপনার হোম ডিরেক্টরি)। তারপরে আপনি লগআউট এবং আবার লগইন করার পরে, আপনি টাইপ করতে পারেন jrfbox, আঘাত করতে পারেন Enterএবং এটি সংযুক্ত হবে।


14
আপনি যদি বিশেষত এসএসএইচ ক্ষেত্রে আকর্ষণীয় হন তবে আপনার দেখা উচিত man ssh_config
নিক

1
আপনাকে পুনরায় লোড করার জন্য লগ আউট করতে হবে না এবং আবার ব্যাক ইন করতে হবে ~/.bashrcনা, কেবল করুন source ~/.bashrc
ব্যবহারকারী 991710

1
@ ব্যবহারকারী 991710 বা এই বিষয়টির জন্য. ~/.bashrc
প্রাইফটান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.