Як змусити користувача sudo -u $ користуватися env користувачами?


19

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


Визначте "середовище". # whoami => root # sudo -u user whoami => user
alex

1
@ Алекс Я вважаю, що sudo -u userце аналог su userпереключенню на su - user
суворість,

Але що ви маєте на увазі під "середовищем користувача", якщо у користувача немає оболонки для входу?
Томас Темель

@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

Переглядаючи сторінку man, здається, що -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.