จากคำตอบของ Toby ฉันพบวิธีกำหนดค่านี้ในวิธีที่แตกต่างกันเล็กน้อยใน Debian / Ubuntu สำหรับบริบทดู:
ดังนั้น Debian / Ubuntu มี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ระหว่างสอง@includes เช่นนี้ ..
##### 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 output ได้อย่างไร
นอกเหนือจากsession openened|closedบรรทัดที่ PAM ปล่อยออกมาแล้วให้sudoบันทึกข้อมูลเพิ่มเติมเกี่ยวกับคำสั่งที่ทำงาน ดูเหมือนว่านี้:
[user] : TTY=unknown ; PWD=... ; USER=root ; COMMAND=...
หากคุณยังต้องการที่จะลบที่เปิดลิงก์นี้แล้วดำเนินการต่อด้านล่าง ...
ดังนั้น ... คุณอาจคุ้นเคยกับ/etc/sudoers.d/___การตั้งค่าทั่วไปซึ่งอาจทำสิ่งนี้สำหรับบัญชีบริการที่ต้องการ superuser privs สำหรับการกระทำบางอย่าง:
myuser ALL=(ALL) NOPASSWD: /bin/ping
/etc/sudoers.d/10_myuserที่อาจจะไปใน เหนือสิ่งอื่นใดคุณยังสามารถระบุDefaultsได้ โปรดทราบว่าไวยากรณ์นี้โดยเฉพาะ'Defaults' ':' User_List
ตอนนี้ดูที่ส่วน sudoers OPTIONS บิตที่น่าสนใจ ได้แก่log_input, log_outputแต่ (อาจจะ) สำคัญกว่าและsyslog logfileดูเหมือนว่าใน Debian เวอร์ชันล่าสุดไม่ว่าจะเป็น rsyslog หรือsudoเข้าสู่ระบบstdoutหรือstderrโดยค่าเริ่มต้น ดังนั้นสำหรับฉันนี่แสดงในบันทึกประจำวันสำหรับบริการของฉันและไม่เช่น/var/log/auth.logที่จะไม่ได้รับการผสมลงในบันทึกแอปพลิเคชันของฉัน ในการลบการบันทึก sudo ฉันได้เพิ่มสิ่งต่อไปนี้เพื่อ/etc/sudoers.d/10_myuserให้ดูเหมือน:
Defaults:myuser !logfile, !syslog
myuser ALL=(ALL) NOPASSWD: /bin/ping
YMMV หากคุณรู้สึกว่าการปิดใช้งานการบันทึกสร้างปัญหาเกี่ยวกับการตรวจสอบความปลอดภัยคุณอาจลองแก้ปัญหาด้วยตัวกรอง rsyslog
session closed for user rootและถ้าฉันกรองมันในความเป็นจริงฉันกำลังกรองข้อความทั้งหมด ฉันต้องการผู้ใช้เฉพาะที่ไม่ได้กล่าวถึงในข้อความและฉันไม่สามารถกรองตามชื่อ ...