হোস্টগুলির একটি তালিকা যুক্ত করা সম্ভব যা কেবলমাত্র নির্দিষ্ট ব্যবহারকারীর জন্য নির্দিষ্ট? সম্ভবত একটি ব্যবহারকারী নির্দিষ্ট হোস্ট ফাইল?
এই প্রক্রিয়াটি /etc/hosts
ফাইলটিতে প্রবেশকারীদের পরিপূরক করা উচিত ।
হোস্টগুলির একটি তালিকা যুক্ত করা সম্ভব যা কেবলমাত্র নির্দিষ্ট ব্যবহারকারীর জন্য নির্দিষ্ট? সম্ভবত একটি ব্যবহারকারী নির্দিষ্ট হোস্ট ফাইল?
এই প্রক্রিয়াটি /etc/hosts
ফাইলটিতে প্রবেশকারীদের পরিপূরক করা উচিত ।
উত্তর:
আপনি যে কার্যকারিতাটির সন্ধান করছেন তা glibc এ প্রয়োগ করা হয়েছে। আপনি HOSTALIASES
পরিবেশের ভেরিয়েবল সেট করে একটি কাস্টম হোস্ট ফাইলটি সংজ্ঞায়িত করতে পারেন । এই ফাইলটির নামগুলি বাছাই করবে gethostbyname
( ডকুমেন্টেশন দেখুন )।
উদাহরণ (উবুন্টু ১৩.১০ তে পরীক্ষিত):
$ echo 'g www.google.com' >> ~/.hosts
$ export HOSTALIASES=~/.hosts
$ wget g -O /dev/null
কিছু সীমাবদ্ধতা:
HOSTALIASES
শুধুমাত্র অ্যাপ্লিকেশন ব্যবহার করে getaddrinfo(3)
বা ব্যবহার করেgethostbyname(3)
HOSTALIASES
সেটিংসটি হারিয়ে গেছে। পিং সেটুইড রুট (কারণ এটি আইসিএমপি প্যাকেটগুলির জন্য শোনা দরকার), তাই HOSTALIASES
পিংয়ের সাথে কাজ করবে না যদি না আপনি পিং কল করার আগেই ইতিমধ্যে রুট হন।nscd
এবং বিন্দু ছাড়া হোস্ট-নেমে সীমাবদ্ধ থাকেন তবে এটি কাজ করে না ।
127.0.0.1 somedomain.com
)
getcap /usr/sbin/ping
আপনার মত কিছু দেখতে পারে: /usr/bin/ping = cap_net_admin,cap_net_raw+p
। এবং প্রযুক্তিগতভাবে এটি আইসিএমপির পরিবর্তে একটি কাঁচা সকেট খোলার প্রয়োজন (তবে আমি মনে করি আপনি যে যুক্তি দিতে পারেন এটি কেবল শব্দার্থক)।
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
কিছুটা অস্তিত্বহীন পাথ দিয়ে এনএসসিডি সকেটের (এমন কিছু ) পথের জন্য এবং প্রতিস্থাপন করতে পারেন ।
LD_LIBRARY_PATH
ব্যবহারকারীর মালিকানাধীন কোনও ডিরেক্টরিতে নির্দেশিত হওয়া মানে ব্যবহারকারী দ্বারা চালিত অন্য যে কোনও প্রক্রিয়া সেই ডিরেক্টরিটি লাইব্রেরি প্রতিস্থাপনের দ্বারা উদ্ভূত নতুন কোনও প্রক্রিয়া সহ-অপ্ট করতে ব্যবহার করতে পারে। এবং libnss_files.so
প্যাকেজ পরিচালকের মাধ্যমে আপডেটগুলি (সুরক্ষা আপডেট সহ) প্যাচযুক্ত সংস্করণে প্রতিফলিত হবে না। LD_LIBRARY_PATH
অন্যান্য কারণে সুপারিশ করা সাধারণত পরিবর্তন করা খারাপ কাজ, তবে এই সমস্যাগুলির কারণে এটি বুদ্ধিমানেরও নয়।
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
unshare(2)
এবং clone(2)
এটি এখানে যাদুটির অংশ। এছাড়াও দেখুন namespaces(7)
এবং user_namespaces(7)
।
ওয়ান সমাধান একটি পৃথক প্রতিটি ব্যবহারকারী আছে হয় chroot
, তাই তারা একে একটি আলাদা থাকতে পারে /etc/hosts
নিজেদের।
আমি একই প্রয়োজনের মুখোমুখি হয়েছি, তাই আমি libnss-userhosts চেষ্টা করেছি, তবে এটি মাল্টিথ্রেডেড অ্যাপ্লিকেশনগুলিতে ব্যর্থ। অতএব আমি স্বতন্ত্র-হোমহোস্ট লিখেছি । এটি খুব নতুন এবং কেবল আমার দ্বারা পরীক্ষিত। আপনি এটির জন্য একটি সুযোগ দিতে পারেন! এটি /etc/host.conf, একাধিক ওরফে নাম এবং বিপরীত সমাধান (নামের ঠিকানায়) কিছু বিকল্প সমর্থন করে।
নিম্নলিখিতটি স্থাপন করা ~/.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
এটি আপনাকে সহায়তা করবে কিনা তা নিশ্চিত নয়, তবে আমি এখানে কেবলমাত্র আমার ব্যবহারকারীর কাছে সহজেই অ্যাক্সেসযোগ্য কোনও "সংরক্ষিত" হোস্টকে যুক্ত করার উপায় খুঁজছিলাম।
আমার মূলত আমাদের ওয়ার্ক নেটওয়ার্কের নির্দিষ্ট কিছু বাক্সে প্রবেশ করতে সক্ষম হওয়া দরকার, যার কেবল একটি প্রবেশ পয়েন্ট রয়েছে।
আমি যা করেছি তা হ'ল আমার .bashrc
ফাইলে এলিয়াস যুক্ত করা ।
উদাহরণস্বরূপ, যদি আপনি যোগ করেছেন:
alias jrfbox='ssh jason@192.168.6.6'
আপনার নীচে ~/.bashrc
( ~
আপনার হোম ডিরেক্টরি)। তারপরে আপনি লগআউট এবং আবার লগইন করার পরে, আপনি টাইপ করতে পারেন jrfbox
, আঘাত করতে পারেন Enterএবং এটি সংযুক্ত হবে।
man ssh_config
।
~/.bashrc
না, কেবল করুন source ~/.bashrc
।
. ~/.bashrc