टोबी के जवाब के आधार पर, मैंने इसे डेबियन / उबंटू पर थोड़ा अलग तरीके से कॉन्फ़िगर करने का एक तरीका पाया। संदर्भ के लिए, देखें:
इसलिए डेबियन / उबंटू के पास यह 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 फ़िल्टर के माध्यम से हल करने का प्रयास कर सकते हैं।
session closed for user root
और अगर मैं इसे वास्तव में फ़िल्टर करता हूं तो मैं सभी संदेशों को फ़िल्टर कर रहा हूं। मैं एक विशिष्ट उपयोगकर्ता के लिए चाहता हूं जिसका उल्लेख संदेश में नहीं है और मैं उसके नाम से फ़िल्टर नहीं कर सकता ...