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-updatekomutu 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/sudoiki @includes 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
Sessionve Session-Typehangi dosyaların düzenleneceğini kontrol eder ve Priorityhangi sırayla gireceklerini tanımlar. Bu dosyayı ekledikten ve çalıştırdıktan pam-auth-updatesonra /etc/pam.d/common-session-noninteractiveaş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/unixve bir sahiptir Priority: 256ikinci biter böylece.) Bıraktım olması da Not service = sudoberi yüklemi common-session-noninteractivekudreti 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/myappdosyayı ekledim pam-auth-update --packageve benim postinstve prermkomut dosyalarına ekledim ve gitmek için iyi biriyim!
Uyarı...
Yukarıda bağladığım PAMConfigFrameworkSpec makalesini okursanız, bir Session-Interactive-Onlyseçenek tanımlar , ancak yalnızca etkileşimli olmayan kuralları belirtmenin bir yolu yoktur . Yani /etc/pam.d/common-sessionedildi 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|closedPAM'ı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_outputancak (muhtemelen) daha önemlisi syslogve içerir logfile. Bana öyle geliyor ki Debian'ın son sürümlerinde rsyslog ya da sudolog stdoutya stderrda default olarak. Bu yüzden benim için bu, örneğin /var/log/auth.loguygulama 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 rootve eğer onu filtrelersem tüm mesajları filtreliyorum. Mesajda belirtilmeyen belirli bir kullanıcı için istiyorum ve ismine göre filtreleyemiyorum ...