Назад | Перейти на главную страницу

Передача параметра от Local пользователю Sudo

Хорошо, если тема не ясна, я объясню свои сомнения. У меня есть сценарий оболочки, хранящийся у моего локального пользователя с именем (executeAdM.sh), и когда я выполняю этот сценарий, я подключаюсь к пользователю SUDO, принимая команды из файла инструкций. Но когда Я выполняю этот сценарий, я также передаю параметр этому сценарию, который на самом деле является некоторым путем к каталогу пользователя SUDO. См. Сценарий ниже:

Скрипт на локальном (executeADM.sh) -:

#!/bin/bash
echo password | sudo -S -l
sudo /usr/bin/su - user  <<\EOF
#ls -lrt
pwd
for entry in $(ls -r)
  do
  if [ "$entry" = "testingADM.sh" ];then
./$entry $1
fi
done
EOF

Выполнение вышеуказанного как -:

./executeADM.sh somePath

Когда приведенный выше сценарий выполняется, он успешно подключается к другому пользователю, и у пользователя SUDO я выполняю цикл for, который ищет другой СКРИПТ, называемый testADM.sh. Как только сценарий найден, я выполняю этот сценарий с параметром, переданным от локального пользователя, и testADM.sh должен установить этот путь для меня, который не работает, он не читает параметр, переданный от локального пользователя. Может ли кто-нибудь помочь мне здесь, я не понимаю, как решить это. Пожалуйста, спросите меня, если что-то неясно, в основном я хочу передать параметр из сценария LOCAL оболочки в сценарий оболочки SUDO USER:

Пользовательский скрипт SUDO (testingADM.sh) -:

#!/bin/bash
path=$1
cd $path
pwd

Если я жестко запрограммировал значение переменной пути в скрипте, хранящемся в SUDO, все работает нормально. Но я этого не хочу:

 #!/bin/bash
 path=somepath
 cd $path
 pwd

У вас больше проблем, чем вы думаете. Во-первых, вы можете без проблем передать параметр в сценарий sudo:

[me@nagios ~]$ cat parent.sh 
#!/bin/bash
echo parent has $1 $2
sudo ./child.sh $1 $2
[me@nagios ~]$ cat child.sh 
#!/bin/bash
echo child has $1 $2
[me@nagios ~]$ ./parent.sh a1 b2 c3
parent has a1 b2
child has a1 b2

Ваша проблема в том, что вы используете здесь документ (<<EOF), который не является механизмом, который позволяет легко передавать параметры: перепишите, чтобы один скрипт вызывал другой, и все будет в порядке.

Вы также зацикливаете вывод ls, который как многие люди заметили здесь - ужасная идея, и она сломается, как только вы получите достаточно необычное имя файла. Просто проверьте наличие (или, лучше, исполняемого файла, с [ -x) из testingADM.sh перед вызовом.

По сути, вы написали себе XY проблема: как только вы перестанете пытаться делать что-то неправильно, многие из ваших проблем исчезнут.