Как я могу выполнить одну команду как пользователь без полномочий root, в то время как остальная часть скрипта выполняется с привилегиями root? [дубликат]

У меня есть сценарий, который проверяет, установлена ​​ли в моей системе версия Java 8. Если нет, сценарий устанавливает его. Также, убедившись, что установлена ​​правильная версия java, он проверяет, правильно ли установлена ​​переменная $ JAVA_HOME .

Я делаю это, добавляя путь JAVA_HOME к моему файлу / etc / environment . Здесь все работает.

Однако на следующем шаге, когда я пытаюсь перезагрузить файл / etc / environment с помощью команды source , новый файл не загружается.

Я считаю, что это связано с тем, что пользователь запустил сценарий. Я запускаю сценарий как пользователь root. Однако мне нужно запустить source / etc / environment как пользователь без полномочий root, а остальные команды должны выполняться как root.

Я пробовал использовать sudo с помощью команд -u и su с помощью -u -c, однако у меня это не сработало. Любые указания на то, как это можно сделать, будут большим подспорьем. {{1} } Спасибо

0
задан 10 April 2019 в 05:52

1 ответ

Я чувствую, что подход для запущения всего скрипта как корня за исключением одной определенной команды, которая должна быть выполнена как другой пользователь, по сути испорчен. Я предложил бы сделать это наоборот: запустите скрипт как пользователя и префикс все команды в сценарии, который должен работать с полномочиями пользователя root с sudo.

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

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

Конечно, все это зависит от Вашей ситуации. Могут быть ситуации, где выполнение его наоборот лучше: можно также запустить скрипт как корень и отбросить полномочия пользователя root путем добавления префикса команды, которая должна работать с полномочиями username с sudo -u username. Также см. комментарии в соответствии с этим ответом для краткого обсуждения за и против. (Обратите внимание, что сам упомянутый ответ предполагает, что обычно лучше запустить весь скрипт как корень и полномочия отбрасывания при необходимости, вместо того, чтобы запустить весь скрипт как пользователя и получить полномочия пользователя root в случае необходимости.Позвольте с вами не согласиться. Это, конечно, все зависит от Вашей ситуации. С точки зрения безопасности последний подход более безопасен. Но если это не беспокойство, бывший подход имеет некоторые небольшие преимущества с технической точки зрения. Посмотрите обсуждение в соответствии со связанным ответом.)

0
ответ дан 25 October 2019 в 06:02

Другие вопросы по тегам:

Похожие вопросы: