Как проверить, какие пользователи использовали sudo, с помощью grep?

На этом этапе я бы сказал, что основная причина - обратная совместимость - разделение каталога существовало с самого начала, в V4 (это четвертый выпуск UNIX, а не SVR4). Тогда могло быть любое количество причин: избегать необходимости обрабатывать множество файлов в одном каталоге, думать о справочных страницах как о частях книги ...

-2
16.10.2018, 15:39
2 ответа

Это будет перебирать каждого пользователя в /etc/passwdс оболочкой /bin/bash, затем grepдля пользователя в /var/log/auth.log, затем использовать awk, чтобы проверить, является ли пятое поле «sudo» :' и шестое имя пользователя, sortи uniqзатем используются для возврата списка пользователей, которые использовали sudo(, которые также имеют оболочку /bin/bashв/etc/passwd:

for user in $(awk -F: '$7 == "/bin/bash"{print $1}' /etc/passwd);do 
  grep "$user" /var/log/auth.log|\
  awk -v user="$user" '$5 == "sudo:" && $6 == user {print user}'
done | sort | uniq
0
28.04.2021, 23:41

Глядя на это с другой стороны :Получите всех пользователей, которые недавно использовали sudoи перечислите тех, у которых bashв качестве оболочки для входа в систему:

sed -nE 's/.*[0-9] ([^ ]+) sudo:.*/\1/p' </var/log/auth.log | sort -u |
while read user; do
    getent passwd "$user" |
    awk -F ':' '$NF == "/bin/bash" { print $1 }'
done

Выражение sedизвлекает имена пользователей, которые использовали sudo, sort -uсортирует их и удаляет дубликаты, а цикл проверяет, установили ли эти оставшиеся пользователи /bin/bashв качестве оболочки входа в систему. Если они есть, печатается имя пользователя.

Имеет смысл делать это в таком порядке, если файл auth.logдействительно большой и вы не хотите анализировать его по одному разу для каждого bashпользователя. Вместо этого мы запускаем getentодин раз для каждого пользователя в файле журнала. Но мы можем улучшить это...

В предложенном порядке:

getent passwd |
awk -F ':' '$NF == "/bin/bash" { printf("s/.*[0-9] (%s) sudo:.*/\\1/p\n", $1) }' |
sed -nE -f - /var/log/auth.log | sort -u

Здесь сценарий awkсоздает сценарий sed. На моей тестовой машине Ubuntu этот скрипт будет выглядеть как

s/.*[0-9] (root) sudo:.*/\1/p
s/.*[0-9] (ubuntu) sudo:.*/\1/p
s/.*[0-9] (myself) sudo:.*/\1/p
s/.*[0-9] (otheruser) sudo:.*/\1/p

Этот сценарий sedзатем запускается для файла журнала auth.logи выводит именаbash-с использованием пользователей, которые недавно использовали sudo. Результат сортируется и дубликаты удаляются.

Здесь мы не анализируем файл журнала более одного раза, и, кроме того, нам не требуется более одного вызова getent.

2
28.04.2021, 23:41

Теги

Похожие вопросы