সমস্যা
সর্বশেষতম, স্থিতিশীল উত্তরযোগ্য বিল্ডটি ব্যবহার করে আমার একটি অদ্ভুত সমস্যা রয়েছে যেখানে আমার "গ্র্যাথিং_ফ্যাক্টস" এর সময় একটি সার্ভারে প্লেবুক হ্যাং থাকে তবে সুডো ব্যবহার করার সময় অন্যান্য অনুরূপ সার্ভারগুলিতে ভাল কাজ করে। উত্তরীয় সার্ভারে, আমি আমার ব্যবহারকারীর (এনআইএস ব্যবহারকারী) হিসাবে চালিত হই এবং পরিবর্তনগুলি করতে দূরবর্তী সার্ভারে সুডো (রুট হিসাবে) ব্যবহার করি । আমি যদি এই সেটআপ থেকে সুডো সরিয়ে ফেলি তবে সবকিছু ঠিকঠাক কাজ করে।
সেটআপ
সফ্টওয়্যার সংস্করণ
- ওএস : আরএইচএল 6.4
- উত্তরীয় সংস্করণ : উত্তরযোগ্য 1.8.2
- সুডোর সংস্করণ :
সুডোর সংস্করণ ১.৮..6.২০ Sudoers নীতি প্লাগইন সংস্করণ 1.8.6-6 Sudoers ফাইল ব্যাকরণ সংস্করণ 42 Sudoers I / O প্লাগইন সংস্করণ 1.8.6p3
- এসএসএইচ সংস্করণ : ওপেনএসএসএইচ_5.3 পি 1, ওপেনএসএসএল 1.0.0-ফিপস 29 মার্চ 2010
সার্ভার মানচিত্র
-------- ইউজার 1 @ সার্ভার 1: সুডো-এইচ-এস-পি (জমায়েত হওয়া_ফ্যাক্টগুলিতে ঝুলন্ত) / ব্যবহারকারী 1 @ উত্তরযোগ্য ---- \ -------- ইউজার 1 @ সার্ভার 2: সুডো-এইচ-এস-পি (ভাল কাজ করে)
ব্যবহারকারীরা
- ব্যবহারকারী 1: সার্ভার 1 এবং সার্ভার 2 উভয়ই এনআইএস অ্যাক্সেসযোগ্য ব্যবহারকারী।
- রুট: প্রতিটি সার্ভারের জন্য স্থানীয় রুট ব্যবহারকারী।
উত্তরযোগ্য কনফিগারেশন
আমার উত্তরযোগ্য cfg এর প্রাসঙ্গিক অংশ ।
ansible.cfg
sudo = true
sudo_user = root
ask_sudo_pass = True
ask_pass = True
...
gathering = smart
....
# change this for alternative sudo implementations
sudo_exe = sudo
# what flags to pass to sudo
#sudo_flags = -H
...
# remote_user = ansible
এখানে একটি খালি ফাইল স্পর্শ এবং তারপরে এটি সরানোর জন্য একটি সাধারণ টেস্ট প্লেবুক। সত্যই, আমি কেবল পরীক্ষার জন্য চাই যদি আমি রিমোট সার্ভারে সুডো সঠিকভাবে ব্যবহার করার জন্য উত্তর পেতে পারি। প্লেবুকটি যদি কিছুটা চলতে থাকে তবে আমি ভাল অবস্থায় আছি।
TEST.yml
---
- hosts: Server1:Server2
vars:
- test_file: '/tmp/ansible_test_file.txt'
sudo: yes
tasks:
- name: create empty file to test connectivity and sudo access
file: dest={{ test_file }}
state=touch
owner=root group=root mode=0600
notify:
- clean
handlers:
- name: clean
file: dest={{ test_file }}
state=absent
সুডো কনফিগারেশন
জন্য / etc / sudoers
Host_Alias SRV = Server1, Server2
User_Alias SUPPORT = User1, User2, User3
SUPPORT SRV=(root) ALL
এই sudo কনফিগারেশন দুটি সার্ভারে ঠিক কাজ করে works সুডো নিজেই কোনও সমস্যা নেই।
আমি কীভাবে এটি চালাচ্ছি
খুব সহজ:
$ উত্তরযোগ্য-প্লেবুক পরীক্ষা.আইএমএল এসএসএইচ পাসওয়ার্ড: sudo পাসওয়ার্ড [এসএসএইচ পাসওয়ার্ডের ডিফল্ট]: খেলুন [সার্ভার 1: সার্ভার 2] ****************************************** ** সংগ্রহের বিষয়গুলি ************************************************ *************** ঠিক আছে: [সার্ভার 2] ব্যর্থ: [সার্ভার 1] => failed "ব্যর্থ": সত্য, "পার্সড": মিথ্যা} দুঃখিত আবার চেষ্টা করুন. [উত্তরোত্তর মাধ্যমে sudo, কী = mxxiqyvztlfnbctwixzmgvhwfdarumtq] পাসওয়ার্ড: sudo: 1 টি ভুল পাসওয়ার্ড চেষ্টা TASK: [সংযোগ এবং sudo অ্যাক্সেস পরীক্ষা করার জন্য খালি ফাইল তৈরি করুন] **************** পরিবর্তিত: [সার্ভার 2] বিজ্ঞপ্তিযুক্ত: [পরিষ্কার] ******************************************* **************** পরিবর্তিত: [সার্ভার 2] খেলুন রেকাপ ******************************************** ******************** আবার চেষ্টা করতে, ব্যবহার করুন: --limlim @ / home / User1 / test.retry সার্ভার 1: ঠিক = 0 টি পরিবর্তন হয়েছে = 0 টি অপ্রাপ্য = 0 ব্যর্থ = 1 সার্ভার 2: ঠিক = 3 পরিবর্তিত = 2 অ্যাক্সেসযোগ্য = 0 ব্যর্থ = 0
আমি স্পষ্টভাবে এসএসএইচ / সুডো পাসওয়ার্ডের পাশাপাশি প্রচ্ছন্নভাবে (এসএসএইচ-তে ডিফল্ট পাস করতে দেই) উভয়ই প্রবেশ করানো ব্যতীত ব্যর্থ।
রিমোট সার্ভার লগ
সার্ভার 1 (ব্যর্থ)
প্রথমেই / var / log /? নিরাপদ
31 ডিসেম্বর 15:21:10 সার্ভার 1 এসএসডিডি [27093]: এক্সএক্সএক্সএক্সএক্স পোর্ট 51446 এসএসএস 2 থেকে ইউজার 1 এর জন্য গৃহীত পাসওয়ার্ড ডিসেম্বর 31 15:21:10 সার্ভার 1 এসএসডিডি [27093]: পাম_উনিক্স (এসএসডিডি: সেশন): সেশনটি ইউজার 1 এর জন্য খোলা হয়েছে (uid = 0) ডিসেম্বর 31 15:21:11 সার্ভার 1 এসএসডিডি [27095]: এসফ্টপির জন্য সাবসিস্টেমের অনুরোধ ডিসেম্বর 31 15:21:11 সার্ভার 1 সুডো: পাম_উনিক্স (sudo: auth): প্রমাণীকরণ ব্যর্থতা; লগনাম = ব্যবহারকারীর ইউআইডি = 187 ইউইডি = 0 টিটি = / দেব / পিটিএস / 1 রুসার = ব্যবহারকারী 1 রোস্ট = ব্যবহারকারী = ব্যবহারকারী 1 ডিসেম্বর 31 15:26:13 সার্ভার 1 সুডো: পাম_উনিক্স (সুডো: অ্যাথ): কথোপকথন ব্যর্থ হয়েছে ডিসেম্বর 31 15:26:13 সার্ভার 1 সুডো: পাম_উনিক্স (সুডো: এথ): লেখক [ব্যবহারকারীর জন্য] পাসওয়ার্ড সনাক্ত করতে পারেনি ডিসেম্বর 31 15:26:13 সার্ভার 1 সুডো: ব্যবহারকারী 1: 1 টি ভুল পাসওয়ার্ড চেষ্টা; টিটিওয়াই = পিটিএস / 1; পিডব্লিউডি = / হোম / ইউজার 1; ব্যবহারকারী = মূল; COMMAND = / বিন / শ-সি প্রতিধ্বনি SUDO-SUCCESS-mxxiqyvztlfnbctwixzmgvhwfdarumtq; ল্যাং = সি এলসি_সিটিওয়াই = সি / ইউএসআর / বিন / পাইথন /tmp/.ansible/tmp/ansible-tmp-1420039272.66-164754043073536/setup; rm -rf /tmp/.ansible/tmp/ansible-tmp-1420039272.66-164754043073536/> / দেব / নাল 2> & 1 ডিসেম্বর 31 15:26:13 সার্ভার 1 এসএসডিডি [27093]: পাম_উনিক্স (এসএসডিডি: সেশন): ব্যবহারকারী ইউজারের জন্য সেশন বন্ধ
সার্ভার 2 (সূক্ষ্ম রান)
প্রথমেই / var / log /? নিরাপদ
ডিসেম্বর 31 15:21:12 সার্ভার 2 এসএসডিডি [31447]: এক্সএক্সএক্সএক্স পোর্ট 60346 এসএসএস 2 থেকে ইউজার 1 এর জন্য গৃহীত পাসওয়ার্ড ডিসেম্বর 31 15:21:12 সার্ভার 2 এসএসডিডি [31447]: পাম_উনিক্স (এসএসডিডি: সেশন): সেশনটি ইউজার 1-এর জন্য খোলা হয়েছে (uid = 0) ডিসেম্বর 31 15:21:12 সার্ভার 2 এসএসডিডি [31449]: এসএফটিপি জন্য সাবসিস্টেমের অনুরোধ ডিসেম্বর 31 15:21:12 সার্ভার 2 সুডো: ব্যবহারকারী 1: টিটিওয়াই = পিটিএস / 2; পিডব্লিউডি = / হোম / ইউজার 1; ব্যবহারকারী = মূল; COMMAND = / বিন / শ-সি প্রতিধ্বনি SUDO-SUCCESS-vjaypzeocvrdlqalxflgcrcoezhnbibs; ল্যাং = সি এলসি_সিটিওয়াই = সি / ইউএসআর / বিন / পাইথন /tmp/.ansible/tmp/ansible-tmp-1420039272.68-243930711246149/setup; rm -rf /tmp/.ansible/tmp/ansible-tmp-1420039272.68-243930711246149/> / দেব / নাল 2> ও 1 ডিসেম্বর 31 15:21:14 সার্ভার 2 এসএসডিডি [31447]: পাম_উনিক্স (এসএসডিডি: সেশন): ব্যবহারকারীর জন্য সেশন বন্ধ
স্ট্রেস আউটপুট
রুট ব্যবহারকারীর জবাবদিহি কমান্ড লক্ষ্য করে যখন স্ট্রেস থেকে আউটপুট দেওয়া হয়। COMMAND:
while [[ -z $(ps -fu root|grep [a]nsible|awk '{print $2}') ]]; do
continue
done
strace -vfp $(ps -fu root|grep [a]nsible|awk '{print $2}') -o /root/strace.out`
Server1
23650 নির্বাচন করুন (0, NULL, NULL, NULL, {1, 508055}) = 0 (টাইমআউট) 23650 সকেট (PF_NETLINK, SOCK_RAW, 9) = 10 23650 fcntl (10, F_SETFD, FD_CLOEXEC) = 0 23650 রিডলিঙ্ক ("/ proc / স্বা / exeুক", "/ usr / বিন / sudo", 4096) = 13 23650 সেন্ডো (10, "| \ 0 \ 0 \ 0L \ 4 \ 5 \ 0 \ 1 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 পিএএম = খাঁটি" ..., 124, 0, {সা_ফ্যামিলি) = AF_NETLINK, পিড = 0, গোষ্ঠীগুলি = 00000000}, 12) = 124 23650 জরিপ ([{এফডি = 10, ইভেন্টগুলি = পলিন}], 1, 500)) = 1 ([{এফডি = 10, আয় = পোলিন}]) 23650 recvfrom (10, "$ \ 0 \ 0 \ 0 \ 0 \ 2 \ 0 \ 0 \ 0 \ 1 \ 0 \ 0 \ 0 বি \\\ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 | \ 0 \ 0 \ 0L \ 4 \ 5 \ 0 \ 1 \ 0 \ 0 \ 0 "..., 8988, MSG_PEEK | MSG_DONTWAIT, {sa_family = AF_NETLINK, পিড = 0, গোষ্ঠীগুলি = 00000000}, [12]) = 36 23650 recvfrom (10, "$ \ 0 \ 0 \ 0 \ 0 \ 2 \ 0 \ 0 \ 0 \ 1 \ 0 \ 0 \ 0 বি \\\ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 | \ 0 \ 0 \ 0L \ 4 \ 5 \ 0 \ 1 \ 0 \ 0 \ 0 "..., 8988, MSG_DONTWAIT, {সা_ফ্যামিলি = এএফ_নেট LINK, পিড = 0, গোষ্ঠী = 00000000}, [12]) = 36 23650 বন্ধ (10) = 0 23650 লিখুন (2, "দুঃখিত, আবার চেষ্টা করুন \" n ", 18) = 18 23650 getTimeofday (200 1420050850, 238344}, NULL) = 0 23650 সকেট (PF_FILE, SOCK_STREAM, 0) = 10 23650 সংযোগ (10, {সা_ফ্যামিলি = এফ_এফআইএল, পথ = "/ ভের / রান / ডিবিস / সিস্টেম_বাস_সকেট"}, 33) = 0
Server2
6625 নির্বাচন করুন (8, [5 7], [], NULL, NULL) =? পূর্ববর্তী নোহাঁদ (পুনরায় চালু করতে হবে) 25 66২৫ --- সিগএইচএলডি (শিশু প্রস্থানিত) @ 0 (0) --- 6625 লিখুন (8, "\ 21", 1) = 1 6625 rt_sigreturn (0x8) = -1 EINTR (বাধাপ্রাপ্ত সিস্টেম কল) 6625 নির্বাচন করুন (8, [5]], [], নুল, ন্যূনল) = 1 ([7] এ) 6625 পঠিত (7, "\ 21", 1) = 1 25 wait২৪ ওয়েট ৪ (6363636, [{WIFEXITED (গুলি)) এবং& WEXITSTATUS (গুলি) == 0}], ডব্লুএনহ্যাং | ডাব্লুএসটিপিপড, নুল) = 6636 6625 আরটি_সিগপ্রোকমাস্ক (সাইন_ব্লক, ন্যূন, [], 8) = 0 6625 সকেট (PF_NETLINK, SOCK_RAW, 9) = 6 6625 fcntl (6, F_SETFD, FD_CLOEXEC) = 0 6625 রিডলিঙ্ক ("/ proc / স্বতঃ / এক্সিম", "/ ইউএসআর / বিন / সুডো", 4096) = 13 6625 সেন্ডো (6, "x \ 0 \ 0 \ 0 আর 0 \ 4 \ 5 \ 0 \ 6 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 পি 0 পিএএম: সেশন_সি" ..., 120, 0, {সা_ফ্যামিলি = AF_NETLINK, পিড = 0, গোষ্ঠীগুলি = 00000000}, 12) = 120 6625 পোল ([{এফডি = 6, ইভেন্টগুলি = পোলিং}], 1, 500)) = 1 ([{এফডি = 6, আয় = পোলিন}]) 6625 recvfrom (6, "$ \ 0 \ 0 \ 0 \ 2 \ 0 \ 0 \ 0 \ 6 \ 0 \ 0 \ 0 \ 330 \ 355 \ 377 \ 377 \ 0 \ 0 \ 0 \ 0x \ 0 \ 0 \ 0 আর \ 4 \ 5 \ 0 \ 6 \ 0 \ 0 \ 0 "..., 8988, এমএসজি_পিক | এমএসজি_ডোনটওয়াইট, {সা_ফ্যামিলি = এএফ_নেট LINK, পিড = 0, গোষ্ঠীগুলি = 00000000}, [12]) = 36 6625 recvfrom (6, "$ \ 0 \ 0 \ 0 \ 2 \ 0 \ 0 \ 0 \ 6 \ 0 \ 0 \ 0 \ 330 \ 355 \ 377 \ 377 \ 0 \ 0 \ 0 \ 0x \ 0 \ 0 \ 0 আর \ 4 \ 5 \ 0 \ 6 \ 0 \ 0 \ 0 "..., 8988, এমএসজি_ডন্টওয়াইট, {সা_ফ্যামিলি = এএফ_নেট LINK, পিড = 0, গোষ্ঠী = 00000000}, [12]) = 36 6625 বন্ধ (6) = 0 6625 খোলা ("/ ইত্যাদি / সুরক্ষা / pam_env.conf", O_RDONLY) = 6 6625 fstat (6, {st_dev = মেকেদেভ (253, 1), st_ino = 521434, st_mode = S_IFREG | 0644, st_nlink = 1, st_uid = 0, st_gid = 0, st_blksize = 4096, st_blocks = 8, st_sati = 2980, = 2014/12 / 31-16: 10: 01, এসটি_মটাইম = 2012/10 / 15-08: 23: 52, এসটি_কালটাইম = 2014/06 / 16-15: 45: 35}) = 0 6625 এমএমএপ (NULL, 4096, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0) = 0x7fbc3a59a000 6625 পড়ুন (6, "# \ n # এটি কনফিগারেশন ফাই" ..., 4096) = 2980 6625 পড়ুন (6, "", 4096) = 0 6625 বন্ধ (6) = 0 6625 মুনম্যাপ (0x7fbc3a59a000, 4096) = 0 6625 খোলা ("/ ইত্যাদি / পরিবেশ", O_RDONLY) = 6
আমার ধারণা
সার্ভার 1 সঠিকভাবে পাসওয়ার্ড পাচ্ছে না বা ভুলভাবে জিজ্ঞাসা করছে / একটি পাসওয়ার্ডের জন্য অপেক্ষা করছে। এটি সুডো বা উত্তরীয় সমস্যার মতো দেখায় না (একা, তারা উভয়ই ঠিকঠাক কাজ করে) তবে সার্ভার 1 সার্ভার 2 এর অনুরূপ ফ্যাশনে শংসাপত্রগুলি (বা তাদের মেনে চলেন) বলে মনে হয় না। সার্ভার 1 & 2 বিভিন্ন উদ্দেশ্যে পরিবেশন করে, তাই তাদের কিছু প্রমাণীকরণ বা প্যাকেজ সংস্করণ পার্থক্য থাকতে পারে তবে এটি উভয়ই একই সংগ্রহস্থল থেকে নির্মিত হয়েছিল; অতএব, তাদের চেয়ে আলাদা হওয়া উচিত নয়।
প্যাম আথ
আমি ভেবেছিলাম সম্ভবত সিস্টেমে বিভিন্ন পিএএম কনফিগারেশন রয়েছে যার ফলে পাসওয়ার্ডগুলি কিছুটা ভিন্নভাবে পরিচালনা করা হয়েছিল। আমি /etc/pam.d/ ফাইলগুলি (ব্যবহার করে md5sum [file]
) তুলনা করেছি এবং দুটি সিস্টেমের মধ্যে সেগুলি একই।
টেস্ট
সুডো এসটিডিন
Sudo STDIN থেকে কোনও পাসওয়ার্ড পড়বে না এমন অন্য একটি সমস্যা পরীক্ষা করেছে, তবে এটি উভয় সার্ভারে দুর্দান্ত কাজ করেছে।
সুডো অ্যাড-হক পরীক্ষা করুন
-বাশ-৪.১ $ উত্তরযোগ্য সার্ভার ১-এম ফাইল -a "ডেস্ক = / টিএমপি / উত্তরযোগ্য_তম। টেক্সট স্টেট = স্পর্শ" -সেকে এসএসএইচ পাসওয়ার্ড: sudo পাসওয়ার্ড [এসএসএইচ পাসওয়ার্ডের ডিফল্ট]: সার্ভার 1 | সাফল্য >> "পরিবর্তিত": সত্য, "ভাগ্য": "/tmp/ansible_test.txt", "গিড": 0, "গোষ্ঠী": "মূল", "মোড": "0644", "মালিক": "মূল", "আকার": 0, "রাষ্ট্র": "ফাইল", "uid": 0 }
সফল! কিন্তু কেন?!
টি এল; ডিআর
- সার্ভার 2 মনে হয় সুডো পাসওয়ার্ড প্রম্পটে অপেক্ষা করছে যখন সার্ভার 2 ঠিকঠাক চলবে।
- চলমান
ansible
Server1 এ "অ্যাড-হক" কাজ করে জরিমানা। প্লেবুক হিসাবে এটি চালানো ব্যর্থ।
প্রশ্ন (গুলি)
- কী কারণে আমার উত্তরযোগ্য সুডোর কনফিগারেশনটি একটি সার্ভারে সূক্ষ্মভাবে কাজ করতে পারে এবং অন্যটিতে প্রত্যাখ্যানিত হতে পারে?
- অ্যাড-হক বনাম প্লেবুক চালানোর সময় কী উত্তরীয় স্থানীয় থেকে দূরবর্তী মেশিনে পাসওয়ার্ড "পাস" করে? আমি ধরে নিয়েছিলাম তারা একই হবে।
আমি ভাবছি এটি খালি গিটহাব পৃষ্ঠায় একটি বাগ রিপোর্ট জমা দেওয়ার কাছাকাছি চলেছে খাঁটিভাবে যে সুডো অ্যাক্সেসের বিভিন্ন ফলাফল রয়েছে তা নির্ভর করে যদি আমি অ্যাড-হক চালাচ্ছি বা না করছি।