2013-03-22 1 views
1

Мне часто нужно запускать по адресу Работа в качестве другого пользователя. Я всегда делал что-то вродеКак запустить 'at' как другой пользователь?

$ echo "$PWD/batchToRun -parameters" | sudo su - otheruser -c "at now" 

batchToRun также планируется запустить через otheruser кронтаб «s. Это хорошо работает до тех пор, пока batchToRun не начнется в зависимости от тонких побочных эффектов настроек переменных окружения - например LANG (sort any?) - которые передаются из среды пользователя, работающего sudo.

Обычно я не хочу регистрироваться как otheruser; это полупривилегированная учетная запись, и я хотел бы «бумажный след» связанной с ней деятельности, чтобы я мог вернуться и посмотреть, что именно было сделано, кем, когда и т. д.

Помимо очевидной перезаписи batchToRun независимо от таких настроек, что является хорошим способом обеспечить, чтобы среда sudoer не загрязняла целевую среду?

Примечание: это на FC7 (Судо версии 1.6.8p12) и других старых дистрибутивах, поэтому любые блестящие новые возможности sudo/su/at (в частности, возможность передать аргумент с -i к sudo) находятся за пределами моего ухватить.

Обновление: выясняется, что su - otheruser на самом деле является достаточным межсетевым экраном между пользователями и что мое загрязнение исходит от чего-то в интерактивной последовательности запуска. Тем не менее, мне все еще нравится возможность редактирования env.

ответ

1

Вы можете лишить среды перед запуском at:

echo "command ..." | env - PATH="$PATH" sudo su - otheruser -c "at now" 

Вы также можете организовать sudo сделать это для вас, установив опцию env_reset. Например, вы можете дать своему пользователю доступ для запуска команды at как otheruser напрямую (вместо sudo для root, а затем для другого пользователя), а затем установите env_reset командой Defaults для этого пользователя или этой команды (см. Справочную страницу sudoers).

Но это, возможно, самое простое решение, не изменяя, как вы обычно делаете сегодня.

+0

Ницца. И все эти годы я думал, что «env» полезен только для печати вашей среды. – jhfrontz

0

Любое «загрязнение» окружающей среды otheruser должно быть ограничено окружением команды at. Когда на самом деле приходит время для запуска batchToRun, он будет работать от otheruser, используя стандартную среду по умолчанию. То есть, только at now запускается в оболочке, созданной командой su sudo.

+0

Поведение, которое я вижу, соответствует описанному на странице «at»: рабочий каталог, среда (за исключением переменных TERM, DISPLAY и _) и umask сохраняются с момента вызова. – jhfrontz

+0

Возможно, вы предполагаете, что «su - otheruser» должен быть чистым перерывом? Теперь, когда я возвращаюсь и более внимательно изучаю, я считаю, что это правда - источник загрязнения окружающей среды кажется чем-то более коварным. – jhfrontz