Назад | Перейти на главную страницу

Определить, заблокирована ли учетная запись Linux, когда SELinux защищает тень

Я пытаюсь запустить сценарий, который получает имя пользователя каждой заблокированной учетной записи в системе 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']
>>>