Toby'nin cevabına dayanarak, bunu Debian / Ubuntu'da biraz farklı bir şekilde yapılandırmanın bir yolunu buldum. Bağlam için bkz:
Debian / Ubuntu'nun bu pam-auth-update
komutu var ve baktığınızda /etc/pam.d/sudo
şöyle görünüyor:
#%PAM-1.0
@include common-auth
@include common-account
@include common-session-noninteractive
ve /etc/pam.d/common-session-noninteractive
şuna benzer:
#
# /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
Bu yüzden, yukarıdaki dosyalardan birini düzenleyebilirim, ancak açıkça burada iş yerinde bazı "daha yüksek güç" var. Pam kuralları eklemek isteyebilecek diğer paketlerle güzel oynamak için değişikliklerimi nasıl alabilirim? Üstüne üstlük, sadece /etc/pam.d/sudo
iki @include
s arasına böyle bir satır ekleyemedim gibi görünüyordu ..
##### 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
Yukarıdaki bağlantıları ve diğer örnekleri okuduktan sonra (bkz. /usr/share/pam-configs/unix
) Bunu buldum, içinde /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
ve Session-Type
hangi dosyaların düzenleneceğini kontrol eder ve Priority
hangi sırayla gireceklerini tanımlar. Bu dosyayı ekledikten ve çalıştırdıktan pam-auth-update
sonra /etc/pam.d/common-session-noninteractive
aşağıdaki gibi görünür (en altta :)
#... 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
... istediğimiz şey bu, çünkü pam_succeed_if
çizgimizin daha önce gelmesi gerekiyor session required pam_unix.so
. (Bu çizgi gelen /use/share/pam-configs/unix
ve bir sahiptir Priority: 256
ikinci biter böylece.) Bıraktım olması da Not service = sudo
beri yüklemi common-session-noninteractive
kudreti de yanında başka yapılandırmasında dahil edilmesi sudo
.
Benim durumumda, zaten bir .deb yükleyici olarak kodumu paketlenmişti, bu yüzden /usr/share/pam-configs/myapp
dosyayı ekledim pam-auth-update --package
ve benim postinst
ve prerm
komut dosyalarına ekledim ve gitmek için iyi biriyim!
Uyarı...
Yukarıda bağladığım PAMConfigFrameworkSpec makalesini okursanız, bir Session-Interactive-Only
seçenek tanımlar , ancak yalnızca etkileşimli olmayan kuralları belirtmenin bir yolu yoktur . Yani /etc/pam.d/common-session
edildi da güncellendi . Bunun etrafında bir yol olduğunu sanmıyorum. Etkileşimli oturumların o kullanıcı için günlüğe kaydedilmemesi konusunda sorun yaşıyorsanız (bu bir hizmet hesabıdır, değil mi?)
Bonus: sudo log çıktısı nasıl kaldırılır
session openened|closed
PAM'ın yaydığı satırlara ek olarak, sudo
çalıştırılan komut hakkında ek bilgiler günlüğe kaydeder. Şöyle görünüyor:
[user] : TTY=unknown ; PWD=... ; USER=root ; COMMAND=...
Bunu da kaldırmak istiyorsanız, bu bağlantıyı açın ve aşağıya devam edin ...
Yani ... muhtemelen /etc/sudoers.d/___
bazı eylemler için süper kullanıcı gizlerine ihtiyaç duyan bir hizmet hesabı için böyle bir şey yapabilen tipik kurulum hakkında bilginiz vardır :
myuser ALL=(ALL) NOPASSWD: /bin/ping
içeri girebilir /etc/sudoers.d/10_myuser
. Diğer şeylerin yanı sıra belirtebilirsinizDefaults
. Özellikle bu sözdizimine dikkat edin'Defaults' ':' User_List
Şimdi SUDOERS SEÇENEKLERİ bölümüne bakın . İlginç bitler log_input
, log_output
ancak (muhtemelen) daha önemlisi syslog
ve içerir logfile
. Bana öyle geliyor ki Debian'ın son sürümlerinde rsyslog ya da sudo
log stdout
ya stderr
da default olarak. Bu yüzden benim için bu, örneğin /var/log/auth.log
uygulama günlüklerime karışmayacağı yerlerde değil, hizmetimin günlük kaydında gösteriliyordu . Sudo günlüğünü kaldırmak için aşağıdakine benzer şekilde aşağıdakileri ekledim /etc/sudoers.d/10_myuser
:
Defaults:myuser !logfile, !syslog
myuser ALL=(ALL) NOPASSWD: /bin/ping
YMMV, günlüğe kaydetmeyi devre dışı bırakmanın güvenlik denetimleriyle ilgili sorunlar oluşturduğunu düşünüyorsanız, bunu rsyslog filtreleri aracılığıyla da çözmeyi deneyebilirsiniz.
session closed for user root
ve eğer onu filtrelersem tüm mesajları filtreliyorum. Mesajda belirtilmeyen belirli bir kullanıcı için istiyorum ve ismine göre filtreleyemiyorum ...