จากคำตอบของ 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
ระหว่างสอง@include
s เช่นนี้ ..
##### 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
และถ้าฉันกรองมันในความเป็นจริงฉันกำลังกรองข้อความทั้งหมด ฉันต้องการผู้ใช้เฉพาะที่ไม่ได้กล่าวถึงในข้อความและฉันไม่สามารถกรองตามชื่อ ...