Получаем список пользователей с правами доступ на все каталоги в папке
Получаем список пользователей с правами доступ на все каталоги в папке
Категория: Разработка Теги: ОС Опубликовано: 26 марта 2025

Скрипт получения прав доступ пользователей Windows ко всем вложенным папкам

Иногда нужно получить список всех пользователей с правами чтение, изменение и выполнение в определенном каталоге с учетом всех вложенных папок.

Скрипт на Python собирает, как локальных пользователей, так и доменных. Публикую, вдруг кому-то пригодится.

import subprocess
import os

def get_permissions_with_icacls_read_rights(folder_path, output_file="permissions.txt"):
    """
    Получает права доступа к папке и ее вложенным папкам, используя icacls,
    и записывает информацию в текстовый файл, отображая всех пользователей/группы
    с правами "изменение", "чтение и выполнение", "список содержимого папки" и "чтение".
    Улучшено определение прав на "Чтение".
    """

    try:
        with open(output_file, "w", encoding="utf-8") as f:
            for root, dirs, files in os.walk(folder_path):
                f.write(f"Папка: {root}\n")
                try:
                    # Запускаем icacls для получения прав доступа
                    result = subprocess.run(['icacls', root], capture_output=True, text=True, encoding='utf-8', errors='ignore', check=True)
                    output = result.stdout

                    # Разбираем вывод icacls построчно
                    lines = output.splitlines()
                    if len(lines) > 1:  # Пропускаем первую строку с путем к папке
                        for line in lines[1:]:
                            line = line.strip()  # Удаляем пробелы в начале и конце строки

                            # Проверяем, содержит ли строка информацию о правах доступа
                            if ":" in line and "(" in line:
                                parts = line.split(":")
                                if len(parts) > 1:
                                    user_or_group = parts[0].strip()
                                    rights_part = parts[1].strip()

                                    # Извлекаем права доступа из части строки, содержащей права
                                    rights = rights_part.strip("()").upper()  # Извлекаем права и приводим к верхнему регистру

                                    # Определяем тип доступа
                                    access_type = []
                                    if 'F' in rights:
                                        access_type.append('Полный доступ')
                                    if 'M' in rights:
                                        access_type.append('Изменение')
                                    if 'RX' in rights:
                                        access_type.append('Чтение и выполнение')
                                    if 'R' in rights and 'RX' not in rights:  # Проверяем, есть ли только право на "Чтение"
                                        access_type.append('Чтение')

                                    # Записываем информацию, если есть какие-либо права
                                    if access_type:
                                        f.write(f"  Пользователь/Группа: {user_or_group}, Права: {', '.join(access_type)}\n")
                    f.write("-" * 40 + "\n")

                except subprocess.CalledProcessError as e:
                    f.write(f"Ошибка при выполнении icacls для папки {root}: {e}\n")
                except Exception as e:
                    f.write(f"Ошибка при обработке папки {root}: {e}\n")

        print(f"Информация о правах доступа записана в файл: {output_file}")

    except Exception as e:
        print(f"Ошибка при записи в файл: {e}")


# Пример использования
if __name__ == '__main__':
    folder_path = r"ПУТЬ_К_ПАПКЕ"  # Замените на реальный путь к папке
    output_file = "permissions.txt"  # Имя файла для записи

    get_permissions_with_icacls_read_rights(folder_path, output_file)

Вместо ПУТЬ_К_ПАПКЕ пишем путь к каталогу, из которого и нужно извлечь список пользователей имеющих права там что-то делать, включая конкретные полномочия.

Результат будет записан в файл permissions.txt. 

Алексей Черемных Алексей Черемных
110