Если вы действительно хотите, чтобы ваш код был устойчивым в самых разных конфигурациях Linux, я бы посоветовал вам рассмотреть крайние случаи, когда кто-то может использовать SELinux, или ACL файловой системы, или функции "возможностей", которые были в ядро Linux начиная с версии 2.2 или около того. Возможно, ваш процесс запущен в какой-либо оболочке, в которой используется SELinux, или в библиотеке некоторых возможностей Linux, например libcap2 libcap-ng или fscaps или elfcap через нечто более экзотическое, например замечательную и печально недооцененную систему systrace от Niels Provos.
Все это способы, которыми ваш код может выполняться без полномочий root, и все же вашему процессу мог быть делегирован необходимый доступ для выполнения его работы без EUID == 0.
Так что я бы посоветовал вам подумать о написании кода более Pythonical, оборачивая операции, которые могут завершиться неудачей из-за разрешений или других проблем с кодом обработки исключений. Если вы планируете выполнять различные операции (например, с использованием модуля subprocess
), вы можете предложить префикс всех таких вызовов с sudo
(например, в качестве параметра командной строки, среды или файла .rc). Если он запускается в интерактивном режиме, вы можете предложить повторно выполнить любые команды, которые вызывают исключения, связанные с разрешениями, используя sudo
(опционально, только если вы найдете sudo
в os.environ ['PATH']).
В целом верно, что большинство систем Linux и UNIX по-прежнему осуществляют большую часть администрирования привилегированным пользователем с правами root. Тем не менее, это старая школа, и мы, программисты, должны стараться поддерживать новые модели. Попытка выполнить ваши операции и позволить обработке исключений выполнять свою работу, позволяет вашему коду работать в любой системе, которая прозрачно разрешает необходимые вам операции, и знание и готовность к использованию sudo
- приятное прикосновение (как это, безусловно, самый распространенный инструмент для контролируемого делегирования системных привилегий).