Я пытаюсь запустить сценарий, который получает имя пользователя каждой заблокированной учетной записи в системе Linux. Сервер представляет собой защищенный сервер Gentoo с SELinux. Я попытался написать какой-нибудь Python, который ищет в / shadow / passwd обязательное '!' вместо хеша пароля.
Я собирался просто использовать это ...
def get_users_blacklist(users):
f = open('shadow.example', 'r') #f is for file
blacklist = [] #obvious
for l in f: #l is for line
s = l.split(':') #s is for shadower
for u in users: #u is for user
if (u == s[0]):
if (s[1] == "!"):
blacklist.append(u)
return blacklist
Требуется список пользователей, чтобы проверить, является ли поле пароля в тени «!» (учетная запись отключена), затем он добавляет их в список.
Однако на моем сервере сценарий не может читать /etc/shadow
из-за SELinux, и при его использовании возникает ошибка «доступ запрещен». Мне нужен другой способ узнать эту информацию о пользователях. Google смешивает множество результатов, чтобы заблокировать учетную запись пользователя, и я не могу найти команду, чтобы проверить, заблокирована ли учетная запись.
Я попробовал «audit2allow», чтобы разрешить скриптам Python sysadm_r читать / etc / shadow, но получил ошибку «neverallow» из semodule
при вставке правил. На самом деле это довольно сложно и довольно рискованно.
Я пытаюсь заблокировать все беспарольные учетные записи в группе. users
в sshd_config автоматически. Существует проблема, из-за которой пользователи, учетные записи которых были деактивированы с помощью `passwd -l user ', все еще могут войти с помощью SSH pubkey auth. Я хочу применить это на сервере многих пользователей, поэтому написал сценарий.
Сценарий: https://pastebin.com/Z5T7GS4J
Я думаю, должна быть какая-то утилита с файловыми шапками, которая может сказать мне, был ли пароль пользователя заблокирован / удален из системы. Я не нашел в гугле. В моем решении нельзя переводить SELinux в разрешающий режим из-за автоматизации, а также из-за отсутствия кластеризации.
Вроде как взлом, но может сработать у вас ...
#!/bin/bash
unset VISUAL
export EDITOR=cat
vipw -s >mybackupshadow.out
затем запустите свой скрипт для mybackupshadow.out, конечно, удалив его, когда закончите.
Это предполагает, что у вас есть root-доступ. Я не пробовал это с SELinux, так как мы его не используем, поэтому не уверен, что SELinux влияет на vipw.
Вы можете использовать эту единственную строку кода на Python:
>>> blacklist = [ x.split(":")[0] for x in open("/tmp/shadow", "r") if x.split(":")[1] == '!']
>>> print blacklist
['lxd', 'monitoring-agent']
>>>