1

Как разрешить пользователю Y писать в папке A только при выполнении скрипта X?

3 ответа3

4

Я полагаю, что для этого потребуется, чтобы программа X имела права setuid и принадлежала пользователю UA, который имеет права на запись в папку A. Затем, когда вызывается X, он запускается как UA, независимо от того, каким пользователем он был вызван.

Большинство оболочек (возможно, всех) не позволяют сценариям иметь разрешения setuid, они просто игнорируют этот бит разрешения, если X не является двоичным. конечно, x может быть двоичной оболочкой, которая просто выполняет какой-то отдельный скрипт X.sh.

Вы не должны устанавливать X как root, если вам не нужно. Вы можете сделать папку A доступной для записи пользователем UA с меньшими правами.

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

2

С этой проблемой обычно сталкиваются игры - например, nethack имеет файлы "костей" и таблицу его истории, которые должны быть доступны для записи в игре, но не отдельным пользователям, не являющимся администраторами. Это делается с помощью исполняемого setgid.

http://nethack.wikia.com/wiki/Setgid содержит краткое описание этой системы. Преимущество заключается в том, что использование nethack даст вам только привилегии групповых игр, а не привилегии пользователя root.

0

Как насчет того, чтобы скрипт x записывал в /usr /bin, но как пользователь z, который является учетной записью пользователя для этой конкретной цели?

Конечно, это означает использование залипающего бита, который имеет свои собственные проблемы безопасности, но вы можете заблокировать пользователя z (без входа в систему, очень ограниченные права доступа вне /usr /bin и т.д.)

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

Многие приложения выполняют разделение привилегий - они делают все возможное как непривилегированный пользователь, и затем одна или две операции, требующие root, фактически выполняются отдельным процессом. (Альтернативно: начните с прав root, выполните одну-две вещи, требующие root, и удалите привилегии.)

Ваш другой вариант, вне моей головы, это sudo.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .