Używam Zabbix do monitorowania środowiska i zabbix_agentd
jako użytkownik wykonuje zabbix
jeden niestandardowy skrypt co 60 sekund; używa sudo
do uruchomienia tego skryptu jako root
.
W /var/log/auth.log
widzę co 60 sekund:
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
Chcę powstrzymać ten komunikat przed zalaniem mojego dziennika. Dodałem następujący wiersz do /etc/pam.d/sudo
pliku, bezpośrednio przed session required pam_unix.so
:
session [success=1 default=ignore] pam_succeed_if.so service in sudo quiet uid = 0
i wiadomość zniknęła.
Problem polega jednak na tym, że w ten sposób ukryłem każdą wiadomość PAM, gdy ktoś wykonuje skrypt za pomocą sudo
as root
.
Chcę zatrzymać wiadomość tylko dla użytkownika zabbix
(nie dla wszystkich innych użytkowników). sudo
wie, że zabbix
użytkownik chce wykonać skrypt z root
uprawnieniami i czy jest jakiś sposób, aby powiedzieć PAM o tym? Jak mogę powiedzieć PAM, aby nie rejestrował określonego użytkownika podczas korzystania sudo
?
Uwaga : Próbowałem filtrować wiadomości w syslog; chociaż to działa, ma ten sam problem co powyżej, a mianowicie to, że jest zbyt niedyskryminujący, ponieważ komunikat dziennika nie wskazuje, który użytkownik rootuje.
źródło
session closed for user root
a jeśli ją filtruję, filtruję wszystkie wiadomości. Chcę konkretnego użytkownika, który nie jest wymieniony w wiadomości i nie mogę filtrować według jego nazwy ...Odpowiedzi:
Wydajesz się być blisko linii PAM conf:
Patrząc na stronę podręcznika
pam_succeed_if
, myślę, że chcesz przetestować, czy użytkownik żądający (ruser
) jestzabbix
.Więc sugeruję:
To powstrzyma następny test, gdy użytkownik
zabbix
się zmieniroot
(ale nie ma innych przejść). Przetestowałem to z parą moich własnych użytkowników.Usuń
uid = 0
powyższy test, jeśli chcesz zachować ciszę na tematzabbix
zostania dowolnym użytkownikiem, a nie tylko rootowaniem.Usunąłem
service in sudo
test: jest zbędny, biorąc pod uwagę, że ta linia jest w środku/etc/pam.d/sudo
.źródło
service in sudo
.[user] : TTY=unknown ; PWD=... ; USER=root ; COMMAND=...
wiersz z dziennika, możesz dodać to do pliku sudoers.d /:Defaults:[user] !logfile, !syslog
(zamień w[user]
razie potrzeby)/etc/sudoers.d/
- wolę używać nazwy użytkownika, grupy lub aplikacji, której to dotyczy. Zobacz sudo.ws/man/1.8.15/sudoers.man.html:
. I czy jest tologfiles
wyraźne czy coś, co należy wymienić?Na podstawie odpowiedzi Toby'ego znalazłem sposób, aby skonfigurować to w nieco inny sposób na Debian / Ubuntu. W kontekście zobacz:
Debian / Ubuntu ma więc to
pam-auth-update
polecenie i kiedy na nie patrzysz/etc/pam.d/sudo
, wygląda to tak:i
/etc/pam.d/common-session-noninteractive
wygląda tak:Tak, pewnie, mógłbym edytować dowolny z powyższych plików, ale najwyraźniej tutaj działa jakaś „wyższa moc”. Jak sprawić, by moje zmiany grały ładnie z innymi pakietami, które mogą chcieć dodać reguły pam? Podsumowując, wydawało mi się, że nie mogę po prostu dodać linii
/etc/pam.d/sudo
między tymi dwoma@include
...Po przeczytaniu powyższych linków oraz innych przykładów (patrz
/usr/share/pam-configs/unix
) wymyśliłem to w/usr/share/pam-configs/myapp
:Session
iSession-Type
sterowanie, które pliki są edytowane iPriority
definiuje jakiej kolejności idą w. Po dodaniu tego pliku i działapam-auth-update
,/etc/pam.d/common-session-noninteractive
wygląda następująco (na dole :)... tego chcemy, ponieważ nasza
pam_succeed_if
linia musi być wcześniejszasession required pam_unix.so
. (Ta linia pochodzi z/use/share/pam-configs/unix
i maPriority: 256
tak, że kończy się na drugim miejscu.) Zauważ też, że opuściłemservice = sudo
predykat, ponieważcommon-session-noninteractive
może być również zawarty w innych konfiguracjach poza tymsudo
.W moim przypadku spakowałem już swój kod jako instalator .deb, więc dodałem
/usr/share/pam-configs/myapp
plik, dodałempam-auth-update --package
do mojegopostinst
iprerm
skryptów i jestem gotowy!Zastrzeżenie ...
Jeśli czytasz artykuł PAMConfigFrameworkSpec, który podłączyłem powyżej , definiuje on
Session-Interactive-Only
opcję, ale nie ma sposobu na określenie tylko nieinteraktywnych reguł . Tak też/etc/pam.d/common-session
został zaktualizowany . Nie sądzę, żeby można to obejść. Jeśli nie masz nic przeciwko sesjom interaktywnym dla tego użytkownika (jest to konto usługi, prawda?), Wszystko powinno być gotowe!Bonus: jak również usunąć wyjście dziennika sudo
Oprócz
session openened|closed
wierszy emitowanych przez PAMsudo
rejestruje dodatkowe informacje o uruchamianym poleceniu. To wygląda tak:Jeśli chcesz to również usunąć, otwórz ten link, a następnie kontynuuj poniżej ...
Więc ... prawdopodobnie znasz typową
/etc/sudoers.d/___
konfigurację, która może zrobić coś takiego dla konta usługi, które wymaga uprawnień administratora superużytkownika do niektórych działań:to może wejść
/etc/sudoers.d/10_myuser
. Cóż, między innymi możesz również określićDefaults
. Zwróć szczególną uwagę na tę składnię'Defaults' ':' User_List
Teraz spójrz na sekcję OPCJE SUDOERS . Interesujące bity obejmują
log_input
,log_output
ale (prawdopodobnie) co ważniejszesyslog
ilogfile
. Wydaje mi się, że w najnowszych wersjach Debiana albo rsyslog, albo loguj sięsudo
dostdout
lubstderr
domyślnie. Dla mnie było to widoczne w dzienniku dziennika dla mojej usługi, a nie np. W/var/log/auth.log
miejscu, w którym nie zmieszałoby się ono z dziennikami aplikacji. Aby usunąć rejestrowanie sudo, dodałem następujące, aby/etc/sudoers.d/10_myuser
wyglądało to tak:YMMV, jeśli uważasz, że wyłączenie rejestrowania powoduje problemy z audytami bezpieczeństwa, możesz również spróbować rozwiązać ten problem za pomocą filtrów rsyslog.
źródło
success=1
podałeśservice = sudo
, aby użyć (co pomija następną klauzulę), i (2) Ponieważ tak, jak podałeś , każde uruchomione zadanie CRON powodujerequirement "service = sudo" not met by user "root"
. (I ewentualnie inne efekty uboczne.) Jednak twoje bonusy zadziałały świetnie! Dziękuję Ci.postinst
iprerm
skrypty?success=1
- Wolałbympam_unix
całkowicie nie pomijać . Chcę tylko przestać rejestrować dane wyjściowe, które[default=ignore]
wydają się być w porządku, bez pomijania pam_unix.cron
jobs iservice = sudo
: Czy to możliwe, że twoje zadania cron działają jako użytkownik niepoufny, ale nie dzwoniszsudo
w ramach zadań cron?Po dość przerażających testach i badaniach znalazłem działające rozwiązanie dla Debian Stretch (na Raspberry). Z pewnością istnieje więcej niż jeden sposób na spełnienie wymagań OP. Ale dokumentacja PAM jest przytłaczająca, więc większość rzeczy to tak naprawdę TL; DR.
/etc/rsyslog.d/anyname.conf
używając::msg, contains, "session opened for user root by pi" stop
/etc/pam.d/sudo
/usr/share/pam-configs/
/etc/sudoers.d/020_pi
Pokażę ci, jak to zrobić (2) i (4).
Aby pozbyć się „sesji otwierania / zamykania”:
Chcemy pozbyć się następującego
/var/log/auth.log
spamu:Zrób to:
Kluczowe znaczenie ma tutaj
success=1
pominięcie następnej 1 klauzuli (lub w języku PAM „przeskocz nad kolejnym modułem w stosie”), jeśli się powiedzie.Od
man pam.conf
:Następnie uruchom ponownie i pozwól mu działać przez kilka godzin (na przykład w celu sprawdzenia zadań cron), aby sprawdzić, czy to działa. Następnie ponownie zainstaluj uprawnienia do plików, w przeciwnym razie w systemie będzie luka bezpieczeństwa. (
sudo chmod 644 /etc/pam.d/sudo
)Aby pozbyć się powtarzających się komunikatów „TTY PWD COMMAND”:
Chcemy również pozbyć się takich wiadomości:
W moim przypadku zostało to wygenerowane przez skrypt IDS, który uruchamiał arp-scan co kilka minut. Aby usunąć go z wyświetlania w dziennikach, utwórz następujący plik:
(Oto
xxx
nazwa twojego komputera ipi
nazwa użytkownika.)źródło
sudo su -
Nie musisz wtedy ustawiać niebezpiecznych uprawnień i ryzykować zapomnieniem o zmianie to z powrotem.Dostaniesz:
z twoją odpowiedzią.
działa, ale nadal otrzymasz:
w twoich logach.
źródło