मैं उन सभी उपयोगकर्ताओं को सूचीबद्ध करने के लिए एक कमांड चाहता हूं जिनके पास रूट विशेषाधिकार हैं अर्थात 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
तक पहुंच है।
sudo
JoKeR के उपयोग से इस तरह की पहुंच का पता लगाया जा सकता है, sudo -l -U vagrant
लेकिन यहां किसी भी अन्य उत्तर का पता नहीं लगाया गया है, जो सभी getent
या तो भरोसा करते हैं /etc/group
।