Sudo - целевая пользовательская среда

Очевидно, это связано с буферизацией, которую grep делает для ускорения работы . Существуют инструменты, специально разработанные для чтения любого количества символов, но не более. Один из них - expect :

{ expect -c "log_user 0; expect 2"; cat; } < infile

У меня нет системы, чтобы попробовать это, но я считаю, что ожидаю, что съест все, пока не встретит ожидаемую строку ( 2 ), а затем завершить, оставив остальную часть ввода для cat .

1
31.08.2016, 16:45
3 ответа

Вы, безусловно, можете сделать следующее для всех пользователей или для данного пользователя колебаться, однако это применимо ко всем командам sudo - u anyuser . Отредактируйте файл / etc / sudoers и добавьте строку типа

Defaults env_keep+="PATH JAVA_HOME"

для всех пользователей или

Defaults:wobble env_keep+="PATH JAVA_HOME"

для просто колебания со всеми переменными, которые вы хотите сохранить. На самом деле, PATH обычно является особым случаем и сбрасывается, поэтому вам может потребоваться отменить его с помощью записи типа

Defaults:wobble  !secure_path, env_keep+="PATH JAVA_HOME"

. Очевидно, что эти функции существуют не зря, так что будьте осторожны.

Существует также возможность сохранить среду с помощью sudo -E , что может быть разрешено записью sudoers, например:

wobble ALL = (wibble) SETENV: ALL

, но это все равно сбросит специальный случай PATH, хотя вы можете запускать команды например

sudo -E PATH=$PATH -u wibble ...
2
27.01.2020, 23:35

Вы можете использовать sudo -i , чтобы пройти все процессы входа в систему для пользователя, поэтому sudo -i -u команда wibble войдет в систему как wibble, установит все ее переменные среды и запустите команду от имени этого пользователя.

Однако sudo -i -u wibble echo $ HOME все равно распечатает ваш домашний путь. Это связано с тем, что ваше приглашение расширяет переменную $ HOME еще до запуска sudo, и sudo ничего не может с этим поделать. Поэтому, если вам нужно передать переменную среды через командную строку, она должна быть экранирована должным образом, вот несколько примеров:

sudo echo $HOME
> /home/user
sudo -i echo '$HOME'
> /root
sudo echo '$HOME'
> $HOME
sudo bash -c 'echo $HOME'
> /root
sudo -i bash -c 'echo $HOME'
> /root

Ко всему этому вы можете добавить -u wibble (перед командой) в вместо этого запустите их как wibble.

1
27.01.2020, 23:35

Думаю, вы ищете

sudo su - USER

Это запустит оболочку только с ПОЛЬЗОВАТЕЛЯМИ переменными окружения(SUDO_USERи т. д.):

   -, -l, --login
          Start the shell as a login shell with an environment similar to a real login
0
27.01.2020, 23:35

Теги

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