На основі відповіді Тобі я знайшов спосіб налаштувати це дещо по-іншому на Debian / Ubuntu. Для контексту див.
Отже, Debian / Ubuntu мають цю pam-auth-update
команду, і коли ви дивитесь, /etc/pam.d/sudo
вона виглядає приблизно так:
#%PAM-1.0
@include common-auth
@include common-account
@include common-session-noninteractive
і /etc/pam.d/common-session-noninteractive
виглядає так:
#
# /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
Так що я можу редагувати будь-який із наведених вище файлів, але явно тут є якась «більша потужність». Як змусити мої зміни грати добре з іншими пакунками, до яких можна додати правила пам’яті? На завершення, здавалося, що я не можу просто додати рядок/etc/pam.d/sudo
між двома @include
подібними.
##### 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
Прочитавши вищезазначені посилання, а також інші приклади (див /usr/share/pam-configs/unix
), Я придумав це в /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
і Session-Type
контролювати, які файли редагуються таPriority
визначає, в якому порядку вони входять. Після додавання цього файлу та запуску pam-auth-update
, /etc/pam.d/common-session-noninteractive
виглядає так (внизу :)
#... 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
... чого ми хочемо, тому що наша pam_succeed_if
лінія повинна пройти раніше session required pam_unix.so
. (Цей рядок походить /use/share/pam-configs/unix
і має, таким Priority: 256
чином, він закінчується другим.) Зауважте також, що я залишив service = sudo
предикат, оскільки він common-session-noninteractive
може бути включений до інших конфігурацій sudo
.
У моєму випадку я вже запакував свій код як інсталятор .deb, тому я додав /usr/share/pam-configs/myapp
файл і додав pam-auth-update --package
до моїх postinst
та prerm
сценаріїв, і мені добре!
Закрити ...
Якщо ви читаєте статтю PAMConfigFrameworkSpec, яку я пов’язував вище , вона визначає Session-Interactive-Only
варіант, але не має способу вказати лише неінтерактивні правила . Так само /etc/pam.d/common-session
було оновлено . Я не думаю, що це існує. Якщо у вас все в порядку, коли інтерактивні сеанси не реєструються для цього користувача (це - обліковий запис служби, правда?), Вам слід все налаштувати!
Бонус: як також видалити вихідний журнал sudo
На додаток до session openened|closed
рядків, які випромінює PAM, sudo
записує додаткову інформацію про виконану команду. Це виглядає приблизно так:
[user] : TTY=unknown ; PWD=... ; USER=root ; COMMAND=...
Якщо ви також хочете видалити це, відкрийте це посилання, а потім продовжуйте нижче ...
Отже ... ви, мабуть, знайомі з типовою /etc/sudoers.d/___
установкою, яка може зробити щось подібне для облікового запису послуги, який потребує надпривісних приватних даних для деяких дій:
myuser ALL=(ALL) NOPASSWD: /bin/ping
що може зайти /etc/sudoers.d/10_myuser
. Ну, крім іншого, ви також можете вказатиDefaults
. Зверніть увагу саме на цей синтаксис'Defaults' ':' User_List
А тепер подивіться розділ СУДОЕРИ . Цікаві біти включають log_input
, log_output
але (напевно) важливіше syslog
і logfile
. Мені здається, що в останніх версіях Debian або rsyslog, або sudo
увійти до, stdout
або stderr
за замовчуванням. Тож для мене це відображалось в журналі журналу для моєї служби, а не, наприклад, /var/log/auth.log
там, де він не змішався б у моїх журналах програм. Щоб видалити журнал sudo, я додав таке, щоб /etc/sudoers.d/10_myuser
воно виглядало так:
Defaults:myuser !logfile, !syslog
myuser ALL=(ALL) NOPASSWD: /bin/ping
YMMV, якщо у вас відмова від реєстрації створює проблеми з аудитами безпеки, ви також можете спробувати вирішити це за допомогою фільтрів rsyslog.
session closed for user root
і якщо я його фільтрую насправді, я фільтрую всі повідомлення. Я хочу, щоб конкретний користувач, який не згадується в повідомленні, і не можу відфільтрувати його ім'я ...