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

19

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

xenoterracide
источник
Определите «окружающую среду». # 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
0xC0000022L
источник
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контекстное значение.

Juaniyyoo
источник
Хороший ответ. Одно небольшое исправление: это должно быть su - some_userвместо su -u some_user.
rudolfbyker