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-update
perintah ini dan ketika Anda melihatnya /etc/pam.d/sudo
terlihat seperti ini:
#%PAM-1.0
@include common-auth
@include common-account
@include common-session-noninteractive
dan /etc/pam.d/common-session-noninteractive
terlihat 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/sudo
di antara keduanya @include
seperti 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
Session
dan Session-Type
mengontrol file mana yang diedit dan Priority
menentukan urutannya. Setelah menambahkan file itu dan berjalan pam-auth-update
, /etc/pam.d/common-session-noninteractive
terlihat 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_if
saluran kami harus datang sebelumnya session required pam_unix.so
. (Baris itu berasal dari /use/share/pam-configs/unix
dan memiliki Priority: 256
sehingga berakhir di urutan kedua.) Perhatikan juga bahwa saya meninggalkan service = sudo
predikat karena common-session-noninteractive
mungkin 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/myapp
file, dan menambahkan pam-auth-update --package
untuk saya postinst
dan prerm
skrip dan aku baik untuk pergi!
Peringatan ...
Jika Anda membaca artikel PAMConfigFrameworkSpec yang saya tautkan di atas , itu mendefinisikan Session-Interactive-Only
opsi, tetapi tidak memiliki cara untuk menentukan hanya aturan non-aktif . Jadi /etc/pam.d/common-session
itu 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|closed
baris yang dipancarkan PAM, catat sudo
informasi 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_output
tetapi (mungkin) lebih penting, syslog
dan logfile
. Tampaknya bagi saya bahwa dalam versi terbaru Debian, baik rsyslog atau sudo
masuk ke stdout
atau stderr
secara default. Jadi bagi saya ini muncul di jurnal journald untuk layanan saya, dan tidak misalnya di /var/log/auth.log
mana tidak akan dicampur ke dalam log aplikasi saya. Untuk menghapus sudo logging, saya menambahkan yang berikut ini /etc/sudoers.d/10_myuser
sehingga 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 root
dan jika saya memfilternya sebenarnya saya memfilter semua pesan. Saya ingin pengguna tertentu yang tidak disebutkan dalam pesan dan saya tidak bisa memfilter dengan namanya ...