Belirli bir kullanıcı için auth.log dosyasında sudo PAM iletilerini nasıl durdurabilirim?


16

Zabbix'i ortamımı izlemek için kullanıyorum ve her 60 saniyede bir zabbix_agentdkullanıcı zabbixözel komut dosyası olarak yürütüyor ; sudobu komut dosyasını çalıştırmak için kullanır root.

In /var/log/auth.logI her 60 saniyede bir bakın:

Aug 11 17:40:32 my-server sudo: pam_unix(sudo:session): session opened for user root by (uid=0)
Aug 11 17:40:32 my-server sudo: pam_unix(sudo:session): session closed for user root

Bu iletinin günlüğüme taşmasını durdurmak istiyorum. /etc/pam.d/sudoDosyaya hemen önce aşağıdaki satırı ekledim session required pam_unix.so:

session [success=1 default=ignore] pam_succeed_if.so service in sudo quiet uid = 0

ve mesaj kayboldu.

Ama sorun birisi ile bir komut dosyası yürütülürken zaman her PAM mesajı bastırılmış olması bu yoludur sudoolarak root.

İletiyi yalnızca kullanıcı için durdurmak istiyorum zabbix(diğer tüm kullanıcılar için değil). kullanıcının komut dosyasını ayrıcalıklarla yürütmek istediğini sudobiliyor ve PAM'a bunu söylemenin bir yolu var mı? PAM'ı kullanırken belirli bir kullanıcı için oturum açmamasını nasıl söyleyebilirim ?zabbixrootsudo

Not : Sistem günlüğündeki iletileri filtrelemeyi denedim; Her ne kadar bu çalışıyor olsa da, günlük iletisi hangi kullanıcının kök haline geldiğini belirtmediğinden, yukarıdakiyle aynı soruna sahiptir, yani çok gelişigüzeldir.


Filtrelemeyi destekler ve filtreleme ile çalışır. Bunu denedim ama sevmiyorum çünkü filtreleme evrensel bir yol değil. Bir gün mesajdaki bazı karakterler değişecek veya bir şeyler değişecek ve filtrem başarısız olacak. Ben her durumda durduğundan emin olmak için yapılandırma parametresi, yönerge veya benzer bir şey ile bir çözüm arıyorum. Ve mesaj söylüyor 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 ...
inivanoff1

Yanıtlar:


11

PAM conf hattınıza oldukça yakın görünüyorsunuz:

session [success=1 default=ignore] pam_succeed_if.so service in sudo quiet uid = 0

Kılavuz sayfasına baktığımızda pam_succeed_if, istekte bulunan kullanıcının ( ruser) olduğunu test etmek istediğinizi düşünüyorum zabbix.

Bu yüzden şunu öneririm:

session [success=1 default=ignore] pam_succeed_if.so quiet uid = 0 ruser = zabbix

Kullanıcı o zaman bir sonraki testi bastırır zabbixhale root(ancak başka geçişler). Bunu kendi kullanıcılarımla test ettim.

Kökten ziyade herhangi bir kullanıcı olma uid = 0konusunda sessiz kalmak istiyorsanız, yukarıdaki testi kaldırın zabbix.

service in sudoTesti kaldırdım : bu hattın olduğu göz önüne alındığında gereksiz /etc/pam.d/sudo.


1
Teşekkür ederim! Aradığım şey bu. Mükemmel! Ve kaldırma önerisi için teşekkürler service in sudo.
inivanoff1

1
[user] : TTY=unknown ; PWD=... ; USER=root ; COMMAND=...Satırı günlükten de kaldırmak istiyorsanız , bunu bir sudoers.d / file dosyasına ekleyebilirsiniz: Defaults:[user] !logfile, !syslog( [user]uygun olan yerde değiştirin )
thom_nic

@thom_nic Bu dosyanın yolu nedir?
not2qubit

Altındaki herhangi bir dosya /etc/sudoers.d/- Bunun geçerli olduğu kullanıcının, grubun veya uygulamanın adını kullanmayı tercih ederim. Bkz. Sudo.ws/man/1.8.15/sudoers.man.html
thom_nic

@thom_nic Bunu biraz daha genişletilmiş bir cevap olarak gönderebilir misiniz? Yukarıda önerdiğiniz biçimi görmüyorum. Ayrıca orada bir olduğunu sanmıyorum :. Ve logfilesaçık olan mı yoksa değiştirilmesi gereken bir şey mi?
not2qubit

3

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.


"Oturum açıldı / kapatıldı" öğelerini uygulama şekliniz benim için işe yaramadı. Bunun iki nedeni vardır: (1) Kullanmayı belirtmediniz success=1, (bir sonraki maddeyi atlıyor) ve (2) Çünkü nasıl belirlediğiniz service = sudo, çalışan herhangi bir CRON işi ortaya çıkıyor requirement "service = sudo" not met by user "root". (Ve muhtemelen diğer yan etkiler.) Ancak, Bonus eşyalarınız harika çalıştı! Teşekkür ederim.
not2qubit

Sizin postinstve prermkomut dosyalarınız nasıl görünüyor?
not2qubit

@ not2qubit re: success=1- Ben pam_unixtamamen atlamak istemem . Ben sadece [default=ignore]pam_unix atlamadan gayet iyi başarıyor gibi görünüyor çıktı günlüğü durdurmak istiyorum .
thom_nic

re: cronjobs ve service = sudo: cron işlerinizin unpriv kullanıcısı olarak çalışıyor olması mümkün mü, ancak sudocron işlerinin bir parçası olarak aramıyorsunuz ?
thom_nic

2

Biraz korkutucu test ve araştırmadan sonra, Debian Stretch (Ahududu üzerinde) için çalışan bir çözüm buldum. OP'nin ne istediğini başarmanın kesinlikle birden fazla yolu var. Ancak PAM belgeleri çok zor, bu yüzden çoğu şey gerçekten TL; DR.

  1. Şurada/etc/rsyslog.d/anyname.conf kullanarak rsyslog içinde: için özel bir dize filtresi ekleyebilirsiniz :
    :msg, contains, "session opened for user root by pi" stop
  2. Doğrudan düzenleyebilirsiniz /etc/pam.d/sudo
  3. Özel bir PAM yapılandırma dosyası oluşturarak bunu doğru şekilde yapabilirsiniz: /usr/share/pam-configs/
  4. Bazılarını özel sudoers dosyası oluşturarak yapabilirsiniz :/etc/sudoers.d/020_pi

Size (2) ve (4) nasıl yapılacağını göstereceğim.

UYARI

/etc/pam.d/Önce dünya yazma izinlerini değiştirmeden herhangi bir dosyayı düzenlemeyin . Yapmazsanız ve bir hata yaparsanız, sudo / su'nun ileride kullanması engellenebilir ! Bu nedenle, yeni ayarları geri değiştirmeden önce test ettiğinizden emin olun. (Varsayılan 644'tür )


"Oturum açma / kapama" işlevinden kurtulmak için:

Aşağıdaki /var/log/auth.logspam mesajlarından kurtulmak istiyoruz :

May 10 11:28:03 xxx sudo[26437]: pam_unix(sudo:session): session opened for user root by (uid=0)
May 10 11:28:07 xxx sudo[26437]: pam_unix(sudo:session): session closed for user root

Bunu yap:

# sudo chmod 666 /etc/pam.d/sudo
# sudo cat /etc/pam.d/sudo

#%PAM-1.0

@include common-auth
@include common-account
session [success=1 default=ignore] pam_succeed_if.so quiet_success uid = 0 ruser = pi
@include common-session-noninteractive

Burada çok önemli olan success=1, eğer başarılı olursa, sonraki 1 maddesini atlamak anlamına gelir (veya PAM lingo "yığıntaki bir sonraki modül üzerinden atlamak").

Gönderen man pam.conf:

yoksay - bir modül yığını ile birlikte kullanıldığında, modülün dönüş durumu uygulamanın aldığı dönüş koduna katkıda bulunmaz.

yapılır - modül yığınını ve PAM'ı hemen uygulamaya döndürmenin yan etkisi ile ok'a eşdeğerdir.

N - yığındaki bir sonraki N modülünü atlamanın yan etkisi ile ok'a eşdeğerdir.

Sonra, yeniden başlatın ve çalışıp çalışmadığını test etmek için birkaç saat çalışmasına izin verin (örneğin cron işlerini kontrol etmek için). Ardından, dosya izinlerini yeniden eklediğinizden emin olun, aksi takdirde sisteminizde bir güvenlik açığı olur. ( sudo chmod 644 /etc/pam.d/sudo)


Tekrarlanan "TTY PWD COMMAND" iletilerinden kurtulmak için:

Ayrıca şöyle mesajlardan kurtulmak istiyoruz:

May 11 18:23:20 xxx sudo:       pi : TTY=unknown ; PWD=... ; USER=root ; COMMAND=/usr/bin/arp-scan -q -l

Benim durumumda, bu, birkaç dakikada bir arp-scan çalıştıran bir IDS betiği tarafından oluşturuldu . Günlüklerde görünmesini kaldırmak için aşağıdaki dosyayı oluşturun:

# sudo nano /etc/sudoers.d/020_pi
# sudo cat /etc/sudoers.d/020_pi

Defaults:pi     !logfile, !syslog
pi xxx = (root) NOPASSWD: /usr/bin/arp-scan

(İşte xxxmakine adınız ve pikullanıcı adı.)


1
> Do not düzenlemek onların dünya yazma izinlerini değiştirmeden birinci olmadan /etc/pam.conf herhangi dosyaları .... Son derece root olarak başka bir terminal oturumu çalıştırmanızı öneririz yerine örneğin sudo su - Sonra değişikliği unutmak tehlikeli izinleri ve riski ayarlamak gerekmez geri döndü.
thom_nic

@thom_nic Bunu test ettiniz mi? Tahminimce, PAM'de yanlışlıkla sudo / su kullanımını engellerseniz, ne yaparsanız yapın, bir kök kabuğunda bile bir hata üretecektir. Değilse, PAM muhtemelen olması gerektiği gibi çalışmıyor.
not2qubit

-2

Alacaksın:

pam_succeed_if(sudo:session): unknown attribute "ruser"

cevabınızla.

#%PAM-1.0

@include common-auth
@include common-account
@include common-session-noninteractive
session     [success=1 default=ignore] pam_succeed_if.so service in zabbix quiet use_uid
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid

çalışır, ancak yine de alırsınız:

pam_unix(sudo:session): session opened for user root by (uid=0)

günlüklerinde.


1
Lütfen belirtin: 1. hangi dosyayı düzenlediğinizi, 2. kim "siz" ve ne çözdüğünü.
not2qubit
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.