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

1

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

Теги:
filesystems

5 ответов

5
Лучший ответ

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

2

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

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

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

0

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

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

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

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

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

0

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

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

0

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню