मैं उन सभी उपयोगकर्ताओं को सूचीबद्ध करने के लिए एक कमांड चाहता हूं जिनके पास रूट विशेषाधिकार हैं अर्थात sudo?
मान लीजिए मैं एक सुडोल उपयोगकर्ता हूँ। मैं अन्य सभी sudoer उपयोगकर्ताओं को कैसे जान सकता हूं?
मैं उन सभी उपयोगकर्ताओं को सूचीबद्ध करने के लिए एक कमांड चाहता हूं जिनके पास रूट विशेषाधिकार हैं अर्थात sudo?
मान लीजिए मैं एक सुडोल उपयोगकर्ता हूँ। मैं अन्य सभी sudoer उपयोगकर्ताओं को कैसे जान सकता हूं?
जवाबों:
यदि आपको केवल sudoसमूह में सूचीबद्ध सूडोर्स को सूचीबद्ध करने की आवश्यकता है , तो मुझे लगता है कि ऐसा करने का सबसे अच्छा तरीका इस कमांड को चलाना होगा (जो इस उत्तर में अन्य कमांडों की तुलना में कम्प्यूटेशनल रूप से हल्का होना चाहिए ):
grep -Po '^sudo.+:\K.*$' /etc/group
इसके अलावा muru द्वारा टिप्पणियों में सुझाए गए, प्रविष्टियों के प्रारूप को /etc/groupआसानी से नियंत्रित किया जा सकता है cut:
grep '^sudo:.*$' /etc/group | cut -d: -f4
इसके अलावा फिर से muru द्वारा टिप्पणी में सुझाव के रूप में, एक का उपयोग कर सकते हैं getentके स्थान पर grep:
getent group sudo | cut -d: -f4
इनमें से कोई भी आदेश sudoसमूह में सूचीबद्ध सभी उपयोगकर्ताओं /etc/group(यदि कोई हो) को प्रिंट करेगा ।
कमांड # 1 ब्रेकडाउन:
grep: एक फ़ाइल में एक regex से मेल खाते सभी लाइनों को प्रिंट करता है-P: grepमैच पर्ल-स्टाइल रेगेक्स बनाता हैo: grepप्रिंट केवल मिलान किए गए स्ट्रिंग बनाता है'^sudo.+:\K.*$': grepउद्धरणों के बीच रेगेक्स से मेल खाता हैरेगेक्स # 1 ब्रेकडाउन:
^: लाइन की शुरुआत.+: एक या एक से अधिक वर्ण\K: पिछला मैच त्यागें.*: शून्य या अधिक वर्ण$: पंक्ति का अंतकमांड # 2 ब्रेकडाउन:
grep: एक फ़ाइल में एक regex से मेल खाते सभी लाइनों को प्रिंट करता है'^sudo.+:\K.*$': grepउद्धरणों के बीच रेगेक्स से मेल खाता हैcut: किसी फ़ाइल में प्रत्येक पंक्ति का केवल एक निर्दिष्ट अनुभाग प्रिंट करता है-d:: क्षेत्र परिसीमन के रूप में cutव्याख्या :करता है-f4: cutप्रिंट केवल चौथा क्षेत्र बनाता हैरेगेक्स # 2 ब्रेकडाउन:
^: लाइन की शुरुआत.*: शून्य या अधिक वर्ण$: पंक्ति का अंतgetent group sudo | cut -d: -f4, या awk का उपयोग करें, लेकिन या तो यह याद रखें कि समूह और पासवार्ड के पास निश्चित प्रारूप हैं, जिसमें सीमांकक हैं।
getent group- आपको grep की बिल्कुल भी आवश्यकता नहीं है। getent group fooपसंद है grep foo /etc/group, लेकिन अधिक सक्षम है।
getentकोई भी कैसे grepऔर getentतुलनात्मक रूप से तुलना करता है? क्या इसे चलाना हल्का होगा getent?
sudoसमूह के सदस्य हैं । कुछ यूनिक्स में अन्य समूह हैं जैसे कि wheel। @Muru के जवाब में सभी sudoers शामिल होंगे चाहे वे किसी भी समूह में हों।
जैसा कि यहां कहा गया है कि मैं एक साथ -l& -Uविकल्पों की खोज के लिए सबसे सरल तरीका मानता हूं , बस usersइसे टाइप करें जैसे कि उदाहरण: Johnतब
यदि उपयोगकर्ता के पास sudoपहुँच है, तो यह sudoउस विशेष उपयोगकर्ता के लिए पहुँच के स्तर को प्रिंट करेगा :
sudo -l -U John
User John may run the following commands on this host:
(ALL : ALL) ALL
यदि उपयोगकर्ता के पास sudo एक्सेस नहीं है, तो यह प्रिंट करेगा कि उपयोगकर्ता को लोकलहोस्ट पर चलने की अनुमति नहीं हैsudo :
sudo -l -U John
User John is not allowed to run sudo on localhost.
for u in $(awk -F'[/:]' '{if($3>=1000&&$3!=65534) print $1}' /etc/passwd); do sudo -lU "$u" ; done। त्वरित हैक कुछ भी गारंटी नहीं है :)
"%domain admins@mycompany.intra" ALL=(ALL) ALLतो यह काम करता है। आपने मुझे बहुत समय बचाया, क्योंकि मैं गैर-स्थानीय उपयोगकर्ताओं के लिए भी इस काम से अनजान था।
जैसा कि पहले ही कहा जा चुका है, इसका उत्तर यूनिक्स और लिनक्स स्टैक एक्सचेंज में पाया जा सकता है :
इससे पता चलता है कि उपयोगकर्ता "saml" पहिया समूह का सदस्य है।
$ getent group wheel wheel:x:10:saml
फर्क सिर्फ इतना है कि उबंटू में समूह नहीं है wheel, लेकिन sudo(या adminउबंटू के पुराने संस्करणों में)। तो कमांड बन जाता है:
getent group sudo
geten groupऔर मुझे बहुत सारी संख्याएँ दिखाई दीं। मेरा मूल प्रश्न है, यह कैसे पता लगाया जाए कि कोई उपयोगकर्ता एक सिस्टम उपयोगकर्ता है (साथ बनाया गया है useradd -r)
sudo -l -Uपरीक्षण पर विस्तार करना , कोई भी उन getent passwdउपयोगकर्ताओं को निर्धारित करने के लिए उपयोग कर सकता है जो उपयोग कर सकते हैं sudo। उपयोग getentकरने से हम उन उपयोगकर्ताओं तक पहुँच प्राप्त कर सकते हैं, जो passwdफ़ाइल में मौजूद नहीं हो सकते हैं , जैसे LDAP उपयोगकर्ता:
getent passwd | cut -f1 -d: | sudo xargs -L1 sudo -l -U | grep -v 'not allowed'
sudo -U एक गैर-शून्य निकास मान वापस नहीं करता है जिसका हम लाभ उठा सकते हैं, इसलिए हम आउटपुट को कम करने के लिए कम हो जाते हैं।
sudo।
अधिकांश यूनिक्स जैसी प्रणालियों पर, जिसमें sudo कमांड है, और एक sudo कॉन्फ़िगरेशन फ़ाइल है; जड़ के रूप में चल रहा है:
:~$ sudo bash
या
:~$ su
:~# visudo
एक व्यवस्थापक को उन समूहों के विशेषाधिकारों का निरीक्षण और संशोधन करने की अनुमति देगा जो सुडो कमांड का उपयोग कर सकते हैं।
उबंटू की तरह डेबियन आधारित यूनिक्स जैसी प्रणालियों पर, समूह 4 और 27 में आम तौर पर सुडो विशेषाधिकार के अधिकार हैं।
समूह 4 प्रशासक समूह (प्रवेश) है और समूह 27 sudo gid है।
यह देखने के लिए कि वर्तमान में इन समूहों को कौन से उपयोगकर्ता सौंपे गए हैं, नीचे दिखाए गए अनुसार / etc / group फाइल को कैट करते हैं:
:~$ cat /etc/group
एक नमूना आउटपुट, उबंटू पर (लेकिन रेडहैट आधारित नहीं, ओरेकल सोलारिस / सोलारिस आधारित, या बीएसडी आधारित सिस्टम) इससे उपजेंगे:
adm:x:4:youruser
tty:x:5:
disk:x:6:
lp:x:7:
mail:x:8:
news:x:9:
uucp:x:10:
man:x:12:
proxy:x:13:
kmem:x:15:
dialout:x:20:
fax:x:21:
voice:x:22:
cdrom:x:24:youruser,mybrother
floppy:x:25:
tape:x:26:
sudo:x:27:youruser,mybrother
जैसा कि हम बता सकते हैं, youruser सिस्टम का प्रशासक है, और समूह 4 का सदस्य (प्रवेश) है। लेकिन आपका यसर और मैब्रोथर दोनों ही समूह 27 के सदस्य हैं, जो कि समूह सुडो की gid (समूह पहचान) संख्या है। तो mybrother रूट विशेषाधिकार (सुपर उपयोगकर्ता) भी प्राप्त कर सकता है।
फेडोरा और स्लैकवेयर जैसे कई लिनक्स सिस्टम, पहिया समूह gid = 10 को शामिल करते हैं। जब sudo कमांड लागू होने पर प्रशासक विशेषाधिकार देता है। बीएसडी आधारित प्रणालियों (उदाहरण के लिए फ्रीबीएसडी) पर, रूट उपयोगकर्ता पहिया समूह का एक सदस्य है जो कि जीआईडी 0 है।
आईडी कमांड का उपयोग करके भी कोई भी उपयोगकर्ता सिस्टम में किसी अन्य ज्ञात उपयोगकर्ता की समूह जानकारी पा सकता है।
उदाहरण के लिए:
:~$ id mybrother
नमूना उत्पादन
uid=1001(mybrother) gid=1001(mybrother) groups=1001(mybrother),24(cdrom),27(sudo),30(dip),46(plugdev),108(lpadmin),124(sambashare)
यह आदेश sudo अधिकारों के साथ उपयोगकर्ताओं की सूची लौटाता है:
awk -F ":" '{ system("groups " $1 " | grep -P \"[[:space:]]sudo([[:space:]]|$)\"") }' /etc/passwd
आउटपुट है (उदाहरण के लिए):
<username> : <username> adm cdrom sudo dip plugdev lpadmin sambashare docker
यदि केवल उपयोगकर्ता नाम प्रदर्शित किया जाना है, तो यह कमांड:
awk -F ":" '{ system("groups " $1 " | grep -P \"[[:space:]]sudo([[:space:]]|$)\"") }' | awk -F ":" '{ print $1 }' /etc/passwd
कमान:
cat /etc/group | grep sudo
आउटपुट:
sudo:x:27:Tom,Stacy
टॉम, स्टेसी सुडो विशेषाधिकार वाले उपयोगकर्ता हैं।
cat ।
मैं इस बारे में स्तब्ध था कि vagrantउपयोगकर्ता sudoबिना उल्लेख किए भी कैसे उपयोग कर सकता है /etc/sudoersऔर /etc/groupन ही इसके साथ पाया गया getent।
बाहर sudoभी सभी फाइलों के तहत प्रविष्टियों को पढ़ता है/etc/sudoers.d/ । इसलिए यदि आपने उस निर्देशिका को नहीं देखा है, तो आपको एहसास नहीं हो सकता है कि वास्तव में कितने उपयोगकर्ताओं sudoतक पहुंच है।
sudoJoKeR के उपयोग से इस तरह की पहुंच का पता लगाया जा सकता है, sudo -l -U vagrantलेकिन यहां किसी भी अन्य उत्तर का पता नहीं लगाया गया है, जो सभी getentया तो भरोसा करते हैं /etc/group।