किसी विशिष्ट उपयोगकर्ता के लिए dif.log में sudo PAM संदेशों को कैसे रोकें?


16

मैं अपने वातावरण की निगरानी के लिए Zabbix का उपयोग कर रहा हूं और प्रत्येक 60 सेकंड zabbix_agentdमें उपयोगकर्ता की zabbixएक कस्टम स्क्रिप्ट के रूप में निष्पादित करता हूं ; यह sudoइस स्क्रिप्ट को चलाने के लिए उपयोग करता है root

में /var/log/auth.logमैं हर 60 सेकंड देखें:

Aug 11 17:40:32 my-server sudo: pam_unix(sudo:session): session opened for user root by (uid=0)
Aug 11 17:40:32 my-server sudo: pam_unix(sudo:session): session closed for user root

मैं इस संदेश को अपनी लॉग इन बाढ़ से रोकना चाहता हूं। मैंने /etc/pam.d/sudoफाइल करने के लिए निम्नलिखित पंक्ति को तुरंत जोड़ा session required pam_unix.so:

session [success=1 default=ignore] pam_succeed_if.so service in sudo quiet uid = 0

और संदेश गायब हो गया।

लेकिन समस्या यह है कि इस तरह से मैं हर पीएएम संदेश दबा दिया जब किसी के साथ एक स्क्रिप्ट पर कार्य कर रहा है sudoके रूप में root

मैं केवल उपयोगकर्ता zabbix(अन्य सभी उपयोगकर्ताओं को नहीं) के लिए संदेश को रोकना चाहता हूं । sudoजानता है कि zabbixउपयोगकर्ता स्क्रिप्ट को rootविशेषाधिकारों के साथ निष्पादित करना चाहता है और क्या पीएएम को यह बताने का कोई तरीका है? उपयोग करते समय मैं एक विशिष्ट उपयोगकर्ता के लिए लॉग नहीं करने के लिए PAM को कैसे बता सकता हूं sudo?

नोट : मैंने संदेश को syslog में फ़िल्टर करने का प्रयास किया; हालांकि यह काम करता है, इसमें ऊपर की तरह ही समस्या है, अर्थात् यह बहुत अंधाधुंध है, क्योंकि लॉग संदेश यह संकेत नहीं देता है कि कौन सा उपयोगकर्ता रूट बन रहा है।


यह फ़िल्टरिंग का समर्थन करता है और फ़िल्टरिंग के साथ यह काम करता है। मैंने कोशिश की थी लेकिन मुझे यह पसंद नहीं है, क्योंकि फ़िल्टरिंग एक सार्वभौमिक तरीका नहीं है। संदेश में एक दिन कुछ चरित्र बदल जाएगा या कुछ बदल जाएगा और मेरा फ़िल्टर विफल हो जाएगा। मैं कॉन्फ़िगरेशन पैरामीटर, निर्देश या कुछ इसी तरह के समाधान के साथ खोज कर रहा हूं ताकि यह सुनिश्चित हो सके कि यह सभी मामलों में बंद हो जाएगा। और संदेश कहता है session closed for user rootऔर अगर मैं इसे वास्तव में फ़िल्टर करता हूं तो मैं सभी संदेशों को फ़िल्टर कर रहा हूं। मैं एक विशिष्ट उपयोगकर्ता के लिए चाहता हूं जिसका उल्लेख संदेश में नहीं है और मैं उसके नाम से फ़िल्टर नहीं कर सकता ...
inivanoff1

जवाबों:


11

आप अपने PAM conf लाइन के साथ बहुत करीब लगते हैं:

session [success=1 default=ignore] pam_succeed_if.so service in sudo quiet uid = 0

के लिए मैनुअल पृष्ठ को देखते हुए pam_succeed_if, मुझे लगता है कि आप परीक्षण करना चाहते हैं कि अनुरोध करने वाला उपयोगकर्ता ( ruser) है zabbix

तो मेरा सुझाव है:

session [success=1 default=ignore] pam_succeed_if.so quiet uid = 0 ruser = zabbix

जब उपयोगकर्ता zabbixबन जाता है root(लेकिन कोई अन्य संक्रमण नहीं) अगले परीक्षण को दबा देगा । मैंने अपने उपयोगकर्ताओं की एक जोड़ी के साथ इसका परीक्षण किया है।

uid = 0यदि आप zabbixकेवल रूट के बजाय किसी भी उपयोगकर्ता बनने के बारे में चुप रहना चाहते हैं, तो उपरोक्त परीक्षण को हटा दें ।

मैंने service in sudoपरीक्षण को हटा दिया : यह निरर्थक है कि यह रेखा अंदर है /etc/pam.d/sudo


1
धन्यवाद! यही मैं ढूंढ रहा हूं। उत्तम! और सुझाव को हटाने के लिए धन्यवाद service in sudo
inivanoff1 15

1
यदि आप [user] : TTY=unknown ; PWD=... ; USER=root ; COMMAND=...लॉग से लाइन को भी हटाना चाहते हैं , तो आप इसे sudoers.d / file में जोड़ सकते हैं: Defaults:[user] !logfile, !syslog( [user]जहां उपयुक्त हो)
thom_nic

@thom_nic उस फ़ाइल का पथ क्या है?
Not2qubit

के तहत कोई भी फ़ाइल /etc/sudoers.d/- मैं उस उपयोगकर्ता, समूह या एप्लिकेशन के नाम का उपयोग करना पसंद करता हूं, जिस पर यह लागू होता है। देखें sudo.ws/man/1.8.15/sudoers.man.html
thom_nic

@thom_nic क्या आप कृपया इसे उत्तर के रूप में थोड़ा और विस्तारित कर सकते हैं? मैं उस प्रारूप को नहीं देखता जिसे आप ऊपर प्रस्तावित करते हैं। इसके अलावा मुझे नहीं लगता कि वहां :कोई है। और logfilesस्पष्ट या कुछ और हैं जिन्हें प्रतिस्थापित किया जाना चाहिए?
not2qubit

3

टोबी के जवाब के आधार पर, मैंने इसे डेबियन / उबंटू पर थोड़ा अलग तरीके से कॉन्फ़िगर करने का एक तरीका पाया। संदर्भ के लिए, देखें:

इसलिए डेबियन / उबंटू के पास यह pam-auth-updateकमांड है और जब आप /etc/pam.d/sudoइसे देखते हैं तो ऐसा दिखता है:

#%PAM-1.0

@include common-auth
@include common-account
@include common-session-noninteractive

और /etc/pam.d/common-session-noninteractiveइस तरह दिखता है:

#
# /etc/pam.d/common-session-noninteractive - session-related modules
# common to all non-interactive services
#
# This file is included from other service-specific PAM config files,
# and should contain a list of modules that define tasks to be performed
# at the start and end of all non-interactive sessions.
#
# As of pam 1.0.1-6, this file is managed by pam-auth-update by default.
# To take advantage of this, it is recommended that you configure any
# local modules either before or after the default block, and use
# pam-auth-update to manage selection of other modules.  See
# pam-auth-update(8) for details.

# here are the per-package modules (the "Primary" block)
session [default=1]         pam_permit.so
# here's the fallback if no module succeeds
session requisite           pam_deny.so
# prime the stack with a positive return value if there isn't one already;
# this avoids us returning an error just because nothing sets a success code
# since the modules above will each just jump around
session required            pam_permit.so
# and here are more per-package modules (the "Additional" block)
session required    pam_unix.so
# end of pam-auth-update config

तो यकीन है, मैं उपरोक्त फ़ाइलों में से किसी को भी संपादित कर सकता हूं, लेकिन स्पष्ट रूप से यहां काम पर कुछ "उच्च शक्ति" है। अन्य पैकेजों के साथ अच्छा खेलने के लिए मेरे परिवर्तन कैसे प्राप्त करें जो कि pam नियमों को जोड़ना चाहते हैं? इसे बंद करने के लिए, ऐसा लगता था कि मैं इस तरह /etc/pam.d/sudoसे दोनों के बीच में एक रेखा नहीं जोड़ सकता था @include

##### THIS DIDN'T WORK :( ######
@include common-auth
@include common-account
session [default=ignore] pam_succeed_if.so quiet_success service = sudo uid = 0 ruser = myappuser
@include common-session-noninteractive

उपरोक्त लिंक के साथ-साथ अन्य उदाहरणों को पढ़ने के बाद (देखें /usr/share/pam-configs/unix) मैं इसके साथ आया था /usr/share/pam-configs/myapp:

# Don't log "session opened" messages for myapp user
# See: https://wiki.ubuntu.com/PAMConfigFrameworkSpec
#      https://manpages.debian.org/stretch/libpam-modules/pam_succeed_if.8.en.html
Name: myapp disable session logging
Default: yes
Priority: 300
Session-Type: Additional
Session:
    [default=ignore] pam_succeed_if.so quiet_success service = sudo uid = 0 ruser = myappuser

Sessionऔर Session-Typeनियंत्रण जो फ़ाइलों को संपादित किया जाता है और Priorityवे किस क्रम में जाते हैं को परिभाषित करता है। उस फ़ाइल को जोड़ने और चलाने के बाद pam-auth-update, /etc/pam.d/common-session-noninteractiveइस तरह दिखता है (नीचे)

#... omitted
session required            pam_permit.so
# and here are more per-package modules (the "Additional" block)
session [default=ignore] pam_succeed_if.so quiet_success service = sudo uid = 0 ruser = myappuser
session required pam_unix.so 
# end of pam-auth-update config

... जो हम चाहते हैं क्योंकि हमारी pam_succeed_ifलाइन को पहले आने की जरूरत है session required pam_unix.so। (वह लाइन से आता है /use/share/pam-configs/unixऔर Priority: 256इसलिए इसका दूसरा अंत होता है।) ध्यान दें कि मैंने service = sudoविधेय को छोड़ दिया क्योंकि common-session-noninteractiveइसके अलावा अन्य विन्यास में भी शामिल किया जा सकता है sudo

मेरे मामले में, मैंने अपने कोड को पहले ही एक .deb इंस्टॉलर के रूप में पैक कर लिया था, इसलिए मैंने /usr/share/pam-configs/myappफ़ाइल pam-auth-update --packageको जोड़ा, और अपनी postinstऔर prermस्क्रिप्ट में जोड़ा और मुझे जाने के लिए अच्छा है!

चेतावनी...

यदि आप PAMConfigFrameworkSpec लेख को पढ़ते हैं, जो मैंने ऊपर जोड़ा है , तो यह एक Session-Interactive-Onlyविकल्प को परिभाषित करता है , लेकिन केवल गैर-अनुवांशिक नियमों को निर्दिष्ट करने का एक तरीका नहीं है । इसलिए अपडेट भी किया/etc/pam.d/common-session गया था । मुझे नहीं लगता कि इसके आसपास कोई रास्ता है। यदि आप उस उपयोगकर्ता के लिए इंटरएक्टिव सत्रों में लॉग इन नहीं कर रहे हैं, तो (यह एक सेवा खाता है, ठीक है?) तो आपको सब सेट होना चाहिए!

बोनस: sudo log आउटपुट को कैसे हटाएं

session openened|closedपीएएम जिन रेखाओं के sudoअलावा चलता है, उनके द्वारा चलाए जाने वाले कमांड के बारे में अतिरिक्त जानकारी लॉग करता है । यह इस तरह दिख रहा है:

[user] : TTY=unknown ; PWD=... ; USER=root ; COMMAND=...

अगर आप भी इसे हटाना चाहते हैं, तो इस लिंक को खोलें फिर नीचे जारी रखें ...

तो ... आप शायद विशिष्ट /etc/sudoers.d/___सेटअप से परिचित हैं जो एक सेवा खाते के लिए कुछ ऐसा कर सकता है जिसे कुछ कार्यों के लिए सुपरयुसर निजी की आवश्यकता होती है:

myuser ALL=(ALL) NOPASSWD: /bin/ping

वह अंदर जा सकता है /etc/sudoers.d/10_myuser। ठीक है, अन्य बातों के अलावा आप यह भी निर्दिष्ट कर सकते हैंDefaults । विशेष रूप से इस वाक्यविन्यास पर ध्यान दें'Defaults' ':' User_List

अब, SUDOERS OPTIONS सेक्शन को देखें । दिलचस्प बिट्स में शामिल हैं log_input, log_outputलेकिन (शायद) अधिक महत्वपूर्ण बात, syslogऔर logfile। यह मुझे प्रतीत होता है कि डेबियन के हाल के संस्करणों में या तो rsyslog या sudoलॉग इन stdoutया stderrडिफ़ॉल्ट रूप से। तो मेरे लिए यह मेरी सेवा के लिए जर्नल लॉग में दिखाई दे रहा था, और उदाहरण के लिए, /var/log/auth.logजहां यह मेरे एप्लिकेशन लॉग में नहीं मिला होगा। सूडो लॉगिंग को हटाने के लिए, मैंने निम्नलिखित को जोड़ा /etc/sudoers.d/10_myuserताकि ऐसा लगे:

Defaults:myuser !logfile, !syslog
myuser ALL=(ALL) NOPASSWD: /bin/ping

YMMV, यदि आपको लगता है कि लॉगिंग अक्षम करना सुरक्षा ऑडिट के साथ समस्याएँ पैदा करता है, तो आप इसे rsyslog फ़िल्टर के माध्यम से हल करने का प्रयास कर सकते हैं।


जिस तरह से आपने "सत्र खोला / बंद" सामान लागू किया, वह मेरे लिए काम नहीं करता था। इसके दो कारण हैं: (1) आपने उपयोग करने के लिए निर्दिष्ट नहीं किया success=1, (जो अगले खंड को छोड़ देता है), और (2) क्योंकि आपने कैसे निर्दिष्ट किया service = sudo, किसी भी चल रहे CRON जॉब, में परिणाम requirement "service = sudo" not met by user "root"। (और संभवतः अन्य दुष्प्रभाव।) हालांकि, आपके बोनस सामान ने बहुत अच्छा काम किया! धन्यवाद।
नॉटआउट 2

आपकी postinstऔर prermस्क्रिप्ट कैसी दिखती है?
नॉटआउट 2

@ not2qubit re: success=1- मैं pam_unixपूरी तरह से छोड़ना नहीं चाहता । मैं केवल उस आउटपुट को लॉग इन करना बंद करना चाहता हूं जो [default=ignore]pam_unix को लंघन के बिना बस ठीक हासिल करना लगता है।
thom_nic

re: cronjobs और service = sudo: क्या यह संभव है कि आपकी क्रॉन जॉब्स एक अनप्लिट यूजर के रूप में चल रही हों, लेकिन आप sudoक्रॉन जॉब्स का हिस्सा नहीं कह रहे हैं ?
thom_nic

2

काफी डरावने परीक्षण और शोध के बाद, मैंने डेबियन स्ट्रेच (रास्पबेरी पर) के लिए एक कार्यशील समाधान पाया है। ओपी से जो मांगा जाता है, उसे पूरा करने के लिए एक से अधिक तरीके हैं। लेकिन पीएएम प्रलेखन भारी है, इसलिए अधिकांश सामान वास्तव में टीएल; डीआर है।

  1. आप के लिए एक कस्टम स्ट्रिंग फिल्टर जोड़ सकते हैं rsyslog : में /etc/rsyslog.d/anyname.confउपयोग करके:
    :msg, contains, "session opened for user root by pi" stop
  2. आप सीधे संपादित कर सकते हैं /etc/pam.d/sudo
  3. आप इसमें PAM config फाइल कस्टम बनाकर सही तरीके से कर सकते हैं: /usr/share/pam-configs/
  4. आप एक कस्टम sudoers फ़ाइल बनाकर कुछ कर सकते हैं :/etc/sudoers.d/020_pi

मैं आपको दिखाता हूँ कि कैसे करना है (2) और (4)।

चेतावनी

/etc/pam.d/अपनी दुनिया को लिखने की अनुमति के बिना पहले किसी भी फाइल को संपादित न करें । यदि आप नहीं करते हैं, और एक गलती करते हैं, तो आप sudo / su के किसी भी भविष्य के उपयोग से बाहर निकल सकते हैं ! इसलिए सुनिश्चित करें कि आपने नई सेटिंग्स को वापस बदलने से पहले उसका परीक्षण किया है। (डिफ़ॉल्ट 644 है )


"सत्र खुला / बंद" से छुटकारा पाने के लिए:

हम निम्नलिखित /var/log/auth.logस्पैम से छुटकारा पाना चाहते हैं :

May 10 11:28:03 xxx sudo[26437]: pam_unix(sudo:session): session opened for user root by (uid=0)
May 10 11:28:07 xxx sudo[26437]: pam_unix(sudo:session): session closed for user root

यह करो:

# sudo chmod 666 /etc/pam.d/sudo
# sudo cat /etc/pam.d/sudo

#%PAM-1.0

@include common-auth
@include common-account
session [success=1 default=ignore] pam_succeed_if.so quiet_success uid = 0 ruser = pi
@include common-session-noninteractive

यहाँ महत्वपूर्ण महत्व क्या है success=1, इसका मतलब यह है कि अगर सफल हो तो अगले 1 क्लॉज़ को छोड़ दें (या पीएएम लिंगो में "अगले मॉड्यूल पर कूदें")।

से man pam.conf:

अनदेखा करें - जब मॉड्यूल के ढेर के साथ उपयोग किया जाता है, तो मॉड्यूल की वापसी स्थिति आवेदन प्राप्त करने वाले रिटर्न कोड में योगदान नहीं करेगी।

किया - मॉड्यूल स्टैक को समाप्त करने के साइड इफेक्ट के साथ ओके के बराबर और पीएएम तुरंत आवेदन पर लौट रहा है।

एन - स्टैक में अगले एन मॉड्यूल पर कूदने के साइड इफेक्ट के साथ ओके के बराबर।

इसके बाद, रिबूट करें और इसे कुछ घंटों तक चलने दें (उदाहरण के लिए क्रोन नौकरियों की जांच करने के लिए) कि यह काम करता है। फिर फ़ाइल अनुमतियों को फिर से स्थापित करना सुनिश्चित करें, अन्यथा आपके सिस्टम में एक अंतराल सुरक्षा छेद होगा। ( sudo chmod 644 /etc/pam.d/sudo)


बार-बार "TTY PWD COMMAND" संदेशों से छुटकारा पाने के लिए:

हम इस तरह के संदेशों से छुटकारा पाना चाहते हैं:

May 11 18:23:20 xxx sudo:       pi : TTY=unknown ; PWD=... ; USER=root ; COMMAND=/usr/bin/arp-scan -q -l

मेरे मामले में, यह एक आईडीएस स्क्रिप्ट द्वारा उत्पन्न किया गया था जो हर कुछ मिनटों में arp-scan चल रहा था । लॉग में दिखाने से इसे हटाने के लिए, निम्न फ़ाइल बनाएं:

# sudo nano /etc/sudoers.d/020_pi
# sudo cat /etc/sudoers.d/020_pi

Defaults:pi     !logfile, !syslog
pi xxx = (root) NOPASSWD: /usr/bin/arp-scan

(यहां xxxआपके मशीन का नाम है, और piउपयोगकर्ता नाम है।)


1
> /Etc/pam.d/ में किसी भी फाइल को एडिट न करें। पहले अपनी दुनिया को लिखने की परमिशन में बदलाव किए बिना .... अत्यधिक रूट के रूप में एक और टर्मिनल सेशन चलाने का सुझाव दें जैसे कि sudo su - तब आपको खतरनाक परमिशन और रिस्क को सेट करने की जरूरत नहीं है। वापस।
thom_nic

@thom_nic क्या आपने इसका परीक्षण किया है? मेरा अनुमान है कि यदि आप गलती से PAM में sudo / su का उपयोग करते हैं, तो कोई फर्क नहीं पड़ता कि आप क्या करते हैं, एक रूट शेल में भी एक त्रुटि उत्पन्न करेगा। यदि यह नहीं है, तो PAM शायद वैसा काम नहीं कर रहा है जैसा उसे करना चाहिए।
not2qubit

-2

तुम्हे मिल जाएगा:

pam_succeed_if(sudo:session): unknown attribute "ruser"

आपके जवाब के साथ

#%PAM-1.0

@include common-auth
@include common-account
@include common-session-noninteractive
session     [success=1 default=ignore] pam_succeed_if.so service in zabbix quiet use_uid
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid

काम करता है लेकिन आप अभी भी एक मिल जाएगा:

pam_unix(sudo:session): session opened for user root by (uid=0)

आपके लॉग में।


1
कृपया निर्दिष्ट करें: 1. आप किस फ़ाइल का संपादन कर रहे हैं, 2. "आप" कौन है और यह क्या हल करता है।
18:00
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.