Berdasarkan jawaban Toby, saya menemukan cara untuk mengkonfigurasi ini dengan cara yang sedikit berbeda di Debian / Ubuntu. Untuk konteks, lihat:
Jadi Debian / Ubuntu memiliki pam-auth-updateperintah ini dan ketika Anda melihatnya /etc/pam.d/sudoterlihat seperti ini:
#%PAM-1.0
@include common-auth
@include common-account
@include common-session-noninteractive
dan /etc/pam.d/common-session-noninteractiveterlihat seperti ini:
#
# /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
Jadi yakin, saya bisa mengedit salah satu file di atas tetapi jelas ada beberapa "kekuatan yang lebih tinggi" yang bekerja di sini. Bagaimana cara mendapatkan perubahan agar saya bisa bermain baik dengan paket lain yang mungkin ingin menambahkan aturan pam? Terlebih lagi, sepertinya saya tidak bisa hanya menambahkan garis /etc/pam.d/sudodi antara keduanya @includeseperti ini ..
##### 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
Setelah membaca tautan di atas dan juga contoh-contoh lain (lihat /usr/share/pam-configs/unix) saya menemukan ini, di /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
Sessiondan Session-Typemengontrol file mana yang diedit dan Prioritymenentukan urutannya. Setelah menambahkan file itu dan berjalan pam-auth-update, /etc/pam.d/common-session-noninteractiveterlihat seperti ini (di bagian bawah :)
#... 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
... yang kami inginkan karena pam_succeed_ifsaluran kami harus datang sebelumnya session required pam_unix.so. (Baris itu berasal dari /use/share/pam-configs/unixdan memiliki Priority: 256sehingga berakhir di urutan kedua.) Perhatikan juga bahwa saya meninggalkan service = sudopredikat karena common-session-noninteractivemungkin juga termasuk dalam konfigurasi lain di samping sudo.
Dalam kasus saya, saya sudah dikemas kode saya sebagai installer deb jadi saya menambahkan /usr/share/pam-configs/myappfile, dan menambahkan pam-auth-update --packageuntuk saya postinstdan prermskrip dan aku baik untuk pergi!
Peringatan ...
Jika Anda membaca artikel PAMConfigFrameworkSpec yang saya tautkan di atas , itu mendefinisikan Session-Interactive-Onlyopsi, tetapi tidak memiliki cara untuk menentukan hanya aturan non-aktif . Jadi /etc/pam.d/common-sessionitu juga diperbarui . Saya tidak berpikir ada jalan keluarnya. Jika Anda setuju dengan sesi interaktif yang tidak dicatat untuk pengguna tersebut (ini ADA akun layanan, kan?) Maka Anda harus siap!
Bonus: cara juga menghapus output log sudo
Selain session openened|closedbaris yang dipancarkan PAM, catat sudoinformasi tambahan tentang perintah yang dijalankan. Ini terlihat seperti ini:
[user] : TTY=unknown ; PWD=... ; USER=root ; COMMAND=...
Jika Anda juga ingin menghapusnya, buka tautan ini kemudian lanjutkan di bawah ...
Jadi ... Anda mungkin terbiasa dengan /etc/sudoers.d/___pengaturan tipikal yang mungkin melakukan hal seperti ini untuk akun layanan yang membutuhkan superuser privs untuk beberapa tindakan:
myuser ALL=(ALL) NOPASSWD: /bin/ping
yang mungkin masuk /etc/sudoers.d/10_myuser. Nah, antara lain Anda juga bisa menentukanDefaults . Perhatikan secara khusus sintaks ini'Defaults' ':' User_List
Sekarang, lihat bagian PILIHAN SUDOERS . Bit yang menarik termasuk log_input, log_outputtetapi (mungkin) lebih penting, syslogdan logfile. Tampaknya bagi saya bahwa dalam versi terbaru Debian, baik rsyslog atau sudomasuk ke stdoutatau stderrsecara default. Jadi bagi saya ini muncul di jurnal journald untuk layanan saya, dan tidak misalnya di /var/log/auth.logmana tidak akan dicampur ke dalam log aplikasi saya. Untuk menghapus sudo logging, saya menambahkan yang berikut ini /etc/sudoers.d/10_myusersehingga terlihat seperti:
Defaults:myuser !logfile, !syslog
myuser ALL=(ALL) NOPASSWD: /bin/ping
YMMV, jika Anda merasa menonaktifkan pencatatan menciptakan masalah dengan audit keamanan Anda mungkin juga mencoba menyelesaikannya melalui filter rsyslog.
session closed for user rootdan jika saya memfilternya sebenarnya saya memfilter semua pesan. Saya ingin pengguna tertentu yang tidak disebutkan dalam pesan dan saya tidak bisa memfilter dengan namanya ...