Ответ
В 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 позволяют задать права для нескольких пользователей и групп, а не только для стандартной тройки "владелец-группа-остальные".