Ответ
В 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 позволяют задать права для нескольких пользователей и групп, а не только для стандартной тройки "владелец-группа-остальные".
Ответ 18+ 🔞
А, ну вот, смотри, это же про то, как в Питоне с файловыми правами на Линуксе шаманить. Тема, в общем-то, простая, но если не вникать — можно на ровном месте такую дичь натворить, что потом самому себе в сраку захочется чих-пых.
Короче, есть два основных подхода, как эту магию провернуть.
Первый — через родные модули os и stat. Это как бы правильный, питонистый путь. Тут ты не просто цифры 755 пишешь, а собираешь права из кусочков, как конструктор. Выглядит страшновато, но зато понятно, что за чем стоит.
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
Видишь эту кашу с stat.S_IRWXU? Это и есть кирпичики: «владельцу всё можно», «группе читать», «группе исполнять» и так далее. Собираешь их через | (это побитовое ИЛИ, если что) и получаешь нужную комбинацию. Удобно, ёпта, когда хочешь чётко понимать, что именно ты выставляешь, а не просто цифры тыкаешь.
Второй способ — для ленивых или для тех, кто с консоли не вылезает. Берёшь и тупо вызываешь системную команду chmod через subprocess. Просто, как три копейки, но менее переносимо. Если твой скрипт вдруг на системе без chmod окажется (хотя где ж такой Линукс найдётся?), то он накроется медным тазом.
import subprocess
file_path = 'my_script.sh'
# По сути, кричишь из Питона в систему: «Эй, chmod, сделай мне 755 на этот файл!»
subprocess.run(['chmod', '755', file_path], check=True)
Ну и наконец, третий вариант — для параноиков и системных администраторов, у которых доверия ебать ноль. Когда стандартных прав «владелец-группа-остальные» уже не хватает. Вот представь: нужно дать доступ не просто группе, а конкретному Васе из отдела тестирования, который даже в группу разработчиков не входит. Вот тут в игру вступают ACL (Access Control Lists).
Для работы с ними из Питона обычно ставят библиотеку pylibacl. Это уже высший пилотаж, когда нужно раздавать права с точностью до конкретного юзера. Концепция, в общем, простая: ACL — это как расширенная версия прав, где можно навесить правила не на три абстрактные сущности, а на кого угодно. Мощная штука, но и ответственность, блядь, соответствующая — можно так настроить, что потом сам черт ногу сломит.
Вот, вкратце, и всё. Выбирай способ под задачу. Не хочешь заморачиваться — subprocess в помощь. Хочешь чётко и по-взрослому — os.chmod с stat. Ну а если тебе нужно раздать права пол-офиса, а другую половину выгнать — welcome to ACL, дружок.