Сценарий, выполняемый другим пользователем из root, создает файлы в неправильном каталоге (root)

346
NaturalBornCamper

Я запускаю скрипт bash с точки зрения root, который затем запускает программу в скрипте

su -c "sh /home/user2/script.sh" -m user2 

Проблема заключается в том, что программа, запущенная этим сценарием и выполняемая от имени пользователя user2, все еще пытается создать файлы в /root/.config/, что, конечно же, завершается ошибкой, так как это не разрешено пользователем user2 .

Я делаю что-то не так? Есть ли другой лучший способ изменить пользователя в скрипте, ввести пароль пользователя и запустить программу?

0
Параметр `-m` сохраняет среду вызывающей оболочки, поэтому` $ HOME` останется установленным в `/ root`, если вызывается из корневой оболочки. Почему ты это использовал? И почему вы вызываете оболочку Bourne для запуска сценария `bash`? AFH 7 лет назад 2
Ух ты, спасибо .. Я думал, что параметр "m" был слишком указан пользователем, совершенно не понял, как я взял эту команду из другого вопроса переполнения тайника. NaturalBornCamper 7 лет назад 0
Об оболочке Борна ... это все, что я когда-либо использовал, не знал, что не всегда должен ее использовать NaturalBornCamper 7 лет назад 0
Ваш вопрос помечен как `[bash]` и начинается с "Я запускаю скрипт bash ...". В наши дни необычно не использовать Bash, так как это оболочка по умолчанию для большинства дистрибутивов Linux. Если ваш скрипт начинается с `#! / Bin / bash` или` #! / Bin / sh`, это будет определять, какая оболочка используется, независимо от оболочки, из которой она была запущена. Попутно, для `sh` и` bash` характерна одна и та же программа с переключателями для определения используемого синтаксиса. Я отвечу на ваш вопрос, чтобы другие могли видеть, что есть ответ, AFH 7 лет назад 0

1 ответ на вопрос

2
AFH

Если вы используете -mпараметр с su, он передаст ваше текущее окружение выполняемой команде или оболочке. В частности, $HOMEпеременная будет установлена ​​на свое значение в вызывающей оболочке и не будет определена вызванным пользователем.

Таким образом, если вы вошли в систему как root, $HOMEбудет /rootи останется таковым при выполнении script.shпод su -m. Если нет других частей окружающей среды, которые вы хотите сохранить, вы можете просто опустить -mот suвызова.

Вау, спасибо большое! +1 для полных объяснений, надеюсь, кто-то может использовать это. Я использую Linux некоторое время, но как любитель, поэтому я не знаю о таких деталях, очень полезно! NaturalBornCamper 7 лет назад 0

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