Как заставить пользователя sudo -u $ использовать env пользователей?


19

Кажется, при sudoиспользовании sudo -u $userэтой среды все еще используется среда root. Как я могу sudoиспользовать пользовательскую среду? в качестве особого примечания, не все пользователи, на которых я буду использовать это, имеют оболочки входа в систему.


Определите «окружающую среду». # whoami => root # sudo -u user whoami => user
Алекс

1
@alex I рисунок sudo -u userаналогичен su userпереключению env в su, который вы должны использоватьsu - user
xenoterracide

Но что вы имеете в виду под «средой пользователя», если у пользователя нет оболочки входа?
Томас Фемел

Пользователи @Thomas могут запускать программы, даже если они не могут входить в оболочку ... Я считаю, что -uтакже игнорирует группы ... Я пробовал что-то из root (используя sudo -u down), и это сработало, по-видимому, не для пользователя. ... поэтому я должен убедиться, что я запускаю команды таким образом, чтобы иметь все ограничения и проблемы с окружающей средой.
ксенотеррацид

Ответы:


21

Пытаться sudo -i -u $user

gerald@book:~$ env |grep HOME
HOME=/home/gerald
gerald@book:~$ sudo -u ubuntu env |grep HOME
HOME=/home/gerald
gerald@book:~$ sudo -i -u ubuntu env |grep HOME
HOME=/home/ubuntu

к сожалению, не работает, если они не имеют оболочки /etc/passwd:( но я думаю, что это будет ...
xenoterracide

Глядя на справочную страницу, кажется, что -Eименно она сохраняет среду, то есть все переменные среды и т. Д. Есть, хотя она все еще не установлена PATHи LD_LIBRARY_PATHдля вызывающего пользователя.
Шахбаз

1
$SUDO_USERможно использовать
Рахул Патил

4

man sudoersв Debian упоминается еще одна возможность. Не уверен, какой путь вы хотите, но ваш вопрос звучит так, как будто вы хотели бы иметь env_resetвариант из /etc/sudoers- наоборот, в основном env_keepсписок. Для того, чтобы установить правильное значение, HOMEвы можете использовать -Hопцию sudoнапрямую или, опять же sudoers, с always_set_homeопцией.

В качестве альтернативы вы можете использовать, env_fileчтобы указать точное окружение, которое вы хотите передать. Тем не менее, я думаю, что было бы лучше, если бы вы проверили env_*варианты man sudoers, потому что /etc/sudoersконтролирует все это, и это точка, к которой следует обратиться.

Вот часть контекста, в котором я использую env_resetвнутри моего sudoersфайла:

Defaults        !lecture
Defaults        env_reset
Defaults        syslog=auth
Defaults        log_year

1

Когда Судо ИНГ переменные окружения не сохраняются.

В моем случае я использую здесь документ .

Вы помещаете свои действия, например, в my_script.shЗДЕСЬ ДОКУМЕНТ:

su -u some_user <<EOF
./my_script.sh
EOF

Вы не должны помещать переменные прямо здесь, так как они будут интерпретированы вашим текущим пользователем.

su -u some_user <<EOF
./my_script.sh $MY_VAR
EOF

Если $MY_VARне установлен для пользователя, выполняющего скрипт, он не будет установлен.

Ваша переменная должна вызываться внутри ваших скриптов, или вы должны избегать их с помощью \.

Например.

su -u some_user <<EOF
./my_script.sh \$MY_VAR
EOF

Здесь $MY_VARбудет иметь some_userконтекстное значение.


Хороший ответ. Одно небольшое исправление: это должно быть su - some_userвместо su -u some_user.
rudolfbyker
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.