Как пользователь root, я могу выполнять команды в BASH как другой пользователь без пароля? - PullRequest
0 голосов
/ 08 ноября 2019

У меня есть учетная запись пользователя root на сервере RHeL. На этом сервере у меня есть простой скрипт с именем user.sh, который просто возвращает текущего пользователя:

#!/bin/bash
echo $USER

при запуске из моей учетной записи root вывод

bash user.sh
>>>root

из другого скрипта Iхотел бы иметь возможность временно переключаться между пользователями без ввода пароля, , сохраняя пароль в скрипте или файле , или , изменяя / etc / sudoers и выполняя user.sh, а затемвернуться к моей первоначальной учетной записи root. Это вообще возможно?

Вот что я пробовал до сих пор:

  1. Использование разделителей для выполнения блока кода

    #!/bin/bash
    
    bash /user.sh
    
    su other_user <<EOF
    echo Current user: $USER
    EOF
    

    вывод:

    root
    Current user: root
    
  2. переключение на пользователя в bash, выполнение команды и выход из системы

    #!/bin/bash
    
    bash /user.sh
    
    su other_user
    bash /user.sh
    exit
    

    вывод:Сценарий приостанавливает выполнение и возвращает меня в терминал, зарегистрированный как other_user, однако я все равно буду находиться в каталоге моей корневой учетной записи, который содержит user.sh

    root
    [other_user@my_server]$
    

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

  3. , используя su - <username> -c /path/to/the/shellscript.sh для выполнения сценария в качестве другой учетной записи, а затем возвращает

    #!/bin/bash
    
    bash /user.sh
    
    su - other_user -c /path/user.sh
    

    output:

    root
    -bash: /path/user.sh: Permission denied
    
  4. , используя sudo -i -u other_user для входа в систему как пользователь и выполнения сценария, который приводит к той же проблеме, с которой столкнулась попытка # 2, но я перенаправлен на other_user 's home directory.

Возможно, стоит отметить, что если я использую метод 2, в то время как я вошел в систему какother_user Я могу запустить bash user.sh и получить желаемый результат: other_user

1 Ответ

3 голосов
/ 08 ноября 2019

Во втором примере переменная $USER раскрывается до выполнения su. Это можно предотвратить, указав EOF.

su other_user <<'EOF'
echo Current user: $USER
EOF

Или вы можете выполнить скрипт для его выполнения в корневой оболочке, также используя здесь-doc:

su other_user <<END
bash user.sh
END

или вы можете использовать опцию -c для su:

su other_user -c 'bash user.sh'
...