LINUX.ORG.RU
ФорумAdmin

sudo -Hi -u user_name script.sh

 


0

1

Доброе утро. Помогите пожалуйста с вопросом.

Пытаюсь запустить скрипт от имени другого пользователя с его окружающей средой.

echo $SHELL /bin/csh

Окружение берется вот так:

 
.login
~
if ( -e $HOME/.sapenv_`hostname`.csh ) then
   source $HOME/.sapenv_`hostname`.csh
else if ( -e $HOME/.sapenv.csh ) then
   source $HOME/.sapenv.csh
endif
~

Собственно я добавил запуск скрипта в sudo и пытаюсь его запускать.

 
/etc/sudoers
ec3adm ALL=(ecladm) NOPASSWD: /usr/sap/ECL/SYS/exe/dbg/stopsap
ec3adm ALL=(ecladm) NOPASSWD: /usr/bin/env
Для примера я еще добавил env, чтобы видеть все окружение.
 
ec3adm>
sudo -Hi -u ecladm /usr/bin/env
sudo -Hi -u ecladm /usr/sap/ECL/SYS/exe/dbg/stopsap

Этот скрипт использует переменную SAPSYSTEMNAME записанную в ~/.sapenv.csh и подгружающуюся только если зашел пользователем ecladm и загрузилось его окружение. пример:

 
cat .sapenv.csh | grep "setenv SAPSYSTEMNAME"
setenv SAPSYSTEMNAME  ECL

в общем думал поможет опция -i или -s, но они запрашивает пароль, а мне ни в коем случае нельзя выдавать пароль. Хочу использовать именно окружение ecladm чтобы не было скрытых ошибок. Что я делаю не так?



Последнее исправление: Shinma (всего исправлений: 5)

с его окружающей средой

оригинально ты это дело назвал. ты имеешь ввиду дефолтный env или какой? а то оно как бы меняться может.

и вроде как именно для твоего случая придумали sticky bit и suid/sgid

upcFrost ★★★★★
()
Последнее исправление: upcFrost (всего исправлений: 1)

в общем думал поможет опция -i или -s, но они запрашивает пароль,

схерали? Если есть NOPASSWD то запрося пароля не будет

Но с окружением все-равно беда будет. Не используй -i, а в запускаемом csh-скрипте читай через source тотже .login и/или дугой файл.

Сам недавно сталкивался с таким для SAP на AIXe

futurama ★★★★★
()
Ответ на: комментарий от upcFrost

схема сложнее я тут ее упростил

все дело выглядит в общих чертах так oper – запускает скрипт, он же оператор, он же бесправный пользлователь. ecladm – админ SAP, у него права на старт/стоп SAP ec3adm – админ БД, выполняет работу с БД.

в общем скрипт запускает пользователь oper: sudo -u ec3adm /tmp/tst.sh

Т.к. у ec3adm слишком много команд в этом скрипте и они километровые, это по части БД. я выбрал их как отправную точку - команды которые нельзя трогать и заносить в судо. Значит все должно плясать вокруг них. В общем oper запускает, а сам скрипт выполняется от ec3adm. но внутри скрипта надо остановить sap. останов SAP это еще один скрип, но туда точно лезть нельзя и тот скрипт рассчитан на ENV ecladm . задача подтянуть через sudo ENV пользователя ecladm если запускается оно скриптом от имени ec3adm. скрипт в свою очередь запускает бесправный пользователей oper. как то так. Поэтому я так описал в начале темы.

А задача такая - как запустить скрипт через sudo, чтобы ENV использовалось другого пользователя в данном случае хозяина скрипта. иначе скрипт не отработает. Ему нужна окружающая среда от SAP (ecladm )

Shinma
() автор топика
Ответ на: комментарий от Shinma

чтобы ENV использовалось другого пользователя в данном случае хозяина скрипта

sudo по дефолту и так юзает env другого пользователя, это регулируется флагом в sudoers. а вот если у тебя ecladm еще там что-то себе в env успевает загнать перед тем как стартануть SAP - тогда уже надо его профиль смотреть и скрипты которые он тянет

в целом если совсем все лень - есть тупой и простой вариант. от ecladm выполни env и схорони в файл. внизу допиши строчку инициализации SAP. файл пускай от oper выставив suid на ecladm.

upcFrost ★★★★★
()
Ответ на: комментарий от Shinma

Я уже сказал что делать. конкретно что не понятно?

futurama ★★★★★
()
Ответ на: комментарий от upcFrost

А что за флаг? у меня ecladm работает с shell по умолчанию

 /bin/csh
тот по умолчанию грузит все переменные вот такой строкой
source $HOME/.sapenv.csh 
а уже в самом файле используется подгрузка переменных отличным от bash способом:
setenv SAPSYSTEMNAME  ECL
т.е. нагло этот файл я не подтяну
sudoers
ec3adm  ALL=(ALL) NOPASSWD: /usr/sap/ECL/SYS/exe/dbg/startsap
ec3adm ALL=(ecladm) NOPASSWD: /usr/bin/env

/home/ec3adm> sudo  -u ecladm /usr/sap/ECL/SYS/exe/dbg/startsap
SAPSYSTEMNAME not set
please send the tracefile /home/ecladm/startsap.trc to support
/home/ec3adm> sudo  -u ecladm /usr/bin/env
TERM=xterm
LANG=en_US.UTF-8
COLORTERM=1
SHELL=/bin/sh
MAIL=/var/mail/ecladm
PATH=/usr/sbin:/usr/bin:/sbin:/bin
LOGNAME=ecladm
USER=ecladm
USERNAME=ecladm
HOME=/home/ecladm
SUDO_COMMAND=/usr/bin/env
SUDO_USER=ec3adm
SUDO_UID=14301
SUDO_GID=221
XDG_SESSION_ID=1842
XDG_RUNTIME_DIR=/run/user/261
Shinma
() автор топика
Ответ на: комментарий от Shinma

И да у oper по умолчанию окружение bash и у ec3adm bash. они не принимают интерактивно (без подготовки левого файла) команды из окружения csh. тот же source. Поэтому я не вижу пока идеи реализации. Сижу маны читаю по sudo...

Shinma
() автор топика

Выполнил через одно место

visudo
ec3adm ALL=(ecladm) NOPASSWD: /usr/bin/ssh ecladm@server2 /usr/sap/ECL/SYS/exe/dbg/startsap

как бы банально это не выглядело команда для запуска будет такой:

sudo -u ecladm /usr/bin/ssh ec3adm@server2 /usr/sap/ECL/SYS/exe/dbg/startsap

между ecladm сделал обмен ключами ssh.

Shinma
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.