Как управлять правами доступа к файлам в Linux с помощью Python

Ответ

В Python для управления правами доступа к файлам в Linux используются в основном модуль os в связке с модулем stat для стандартных POSIX-прав, а также внешние утилиты для расширенных прав (ACL).

1. Стандартные права (POSIX)

Для изменения прав доступа используется функция os.chmod(), а для получения — os.stat(). Константы для прав (например, "чтение для владельца") хранятся в модуле stat.

Пример:

import os
import stat

file_path = 'my_script.sh'

# Устанавливаем права 755 (rwxr-xr-x)
# Владелец: чтение, запись, исполнение
# Группа: чтение, исполнение
# Остальные: чтение, исполнение
permissions = stat.S_IRWXU | stat.S_IRGRP | stat.S_IXGRP | stat.S_IROTH | stat.S_IXOTH
os.chmod(file_path, permissions)

# Проверка установленных прав
current_mode = os.stat(file_path).st_mode
print(f"Права для {file_path}: {oct(current_mode)[-3:]}") # Вывод: Права для my_script.sh: 755

2. Использование subprocess

Как альтернативу можно вызывать системную утилиту chmod напрямую. Это проще для знакомых с shell-командами, но менее портируемо.

import subprocess

file_path = 'my_script.sh'
# Вызываем системную команду chmod 755 my_script.sh
subprocess.run(['chmod', '755', file_path], check=True)

3. Расширенные права (ACL)

Для более гранулярного контроля (например, выдачи прав конкретному пользователю, не являющемуся владельцем) используются Access Control Lists (ACL). Для работы с ними из Python можно установить библиотеку pylibacl.

Концепция: ACL позволяют задать права для нескольких пользователей и групп, а не только для стандартной тройки "владелец-группа-остальные".