Как вы разрешаете скрипту Python доступ к mkdir в защищенном каталоге без доступа su в Linux? - PullRequest
1 голос
/ 23 августа 2011

Я пытаюсь создать сценарий оболочки Python для создания ряда каталогов в Ubuntu Linux.Основной каталог, в котором я пытаюсь создать каталоги, защищен от записи.Есть ли способ разрешить скрипту Python создавать там каталоги, как если бы он был пользователем root, но не должен запускать скрипт через su, поскольку другим пользователям может потребоваться запустить скрипт, но у него не должно быть доступа su?

Ответы [ 5 ]

5 голосов
/ 23 августа 2011

Этот вопрос не имеет никакого отношения к Python.Скрипт Python - это просто процесс, как и любой другой процесс, и для этого нужно иметь соответствующие права.Обычный метод заключается в создании группы и создании родительского каталога g + ws для этой группы.Затем добавьте соответствующих пользователей в эту группу в качестве дополнительной группы.

2 голосов
/ 23 августа 2011

К сожалению нет. Разрешения процесса в среде * nix всегда меньше или равны разрешениям пользователя, который его запускает. Это на самом деле имеет смысл - это огромный риск для безопасности, позволяющий процессам превышать собственные возможности пользователя.

Для этого потребуется тот, кто имеет доступ к этому каталогу - либо через одну из своих групп, либо через sudo. В любом случае это потребует взаимодействия с человеком на каждой машине, на которой запущен скрипт.

Что касается самого простого, ну, вам понадобится кто-то, кто обладает такими полномочиями, чтобы предоставить его другому пользователю, или просто использовать sudo напрямую.

0 голосов
/ 24 августа 2011

Вы можете пометить свой скрипт Python setuid, который делает его запущенным как root независимо от того, какой пользователь его запускает.Имейте в виду, что это может быть серьезной угрозой безопасности, потому что, если пользователь найдет способ заставить ваш скрипт сделать что-то, чего он не должен был делать, то он может потенциально причинить вред корневым привилегиям.Если вы сделаете свой скрипт setuid, убедитесь, что он очень простой и выполняет только одно, с множеством проверок ошибок, чтобы предотвратить непредвиденные вводы.(Для получения дополнительной информации обратитесь к setuid; вам нужно использовать chmod, чтобы отметить бит setuid исполняемого файла.)

Часто лучшим решением является предоставление групповым разрешениям каталога, в котором вы хотите создать новый.каталоги, а затем добавьте эту группу для пользователей, которые будут запускать сценарий.

Вы также можете пойти на компромисс между этими двумя решениями, установив сценарий setuid, но в начале сценария заставьте его использовать свои привилегии root для принятияличность другого пользователя.Затем создайте каталоги, используя привилегии того другого пользователя, которому вы дали соответствующие разрешения.Таким образом, вы по-прежнему выполняете операцию таким образом, что у пользователей нет разрешения на ее непосредственное выполнение (поэтому они должны использовать сценарий), но вы сводите к минимуму риск того, что они смогут использовать ваш сценарий дляделаю разные вещи, которые вы не ожидали.

Я нашел здесь что-то достойное о написании программ setuid:

http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.124.384

0 голосов
/ 24 августа 2011

Вы можете создать отдельную команду, которая создаст каталог и сделает его setuid root (или, более безопасно, setuid или setgid для владельца родительского каталога). Убедитесь, что команда не может делать ничего, кроме того, что вы хотите, чтобы она делала (например, не позволяйте ей передавать свой аргумент system()). Затем вызовите эту команду из скрипта Python.

Конечно, это также позволит любому другому процессу с разрешением на выполнение новой команды создавать подкаталоги.

0 голосов
/ 23 августа 2011

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

Возможно, есть более простые решения, но это то, что приходит мне в голову на первый взгляд.

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