Как я могу выполнить часть сценария как другой пользователь?

Похож на Вас, исчерпал дисковое пространство.

1
30.09.2013, 13:11
2 ответа

Я ожидал бы, что сценарий останавливается при команде "su", потому что это запрашивает пароль и не получает тот.

Как часто несколько решений для этого :)

Вместо "sudo" использования "su", который имеет переключатель-S для принятия пароля от стандартного входа:

echo "password" | sudo -S -u USER1 sh -c "...

Кроме того, переместите тот раздел своего приложения/сценария, которое должно работать как другой пользователь к вспомогательному приложению. Можно затем постараться не писать сценарий с сохраненным паролем в виде открытого текста (который имеет некоторые проблемы безопасности) при помощи набора-uid и ценуроза набора на том вспомогательном приложении:

chown USER1.GRP1 helperapp
chmod 6755 helperapp

Риск, который Вы выполняете с этим, состоит в том, что теперь любой в системе может выполнить helperapp как USER1. Вместо того, чтобы использовать set-uid/gid можно использовать, настраивают sudo, чтобы позволить определенному пользователю выполнять het helperapp как USER1 без подсказки пароля (это требует полномочий администратора/корня):

# /etc/sudoers
# Allow USER2 to run helperapp as USER1 without prompting for a password
USER2 ALL=(USER1) NOPASSWD:/path/to/helperapp

Ваш код может затем выглядеть примерно так:

#!/bin/ksh
(some code)
Log=~/my.log
chown USER1 filename

sudo -u USER1  /path/to/helperapp |  tee -a ${Log} 2>&1;

Ни одно из этого не было протестировано и использование в Вашей собственной опасности...

2
27.01.2020, 23:21
  • 1
    Можно добавить TCPMUX к списку. –  kworr 30.09.2013, 17:19
  • 2
    Это только релевантно, если сценарий не работает как корень. Учитывая, что сценарий звонит chown, это, очень вероятно, будет работать как корень. –  Gilles 'SO- stop being evil' 01.10.2013, 00:11
  • 3
    да, который это выполняет как корневой пепел –  munish 01.10.2013, 06:12

Так как Вы работаете su -, Вы говорите su выполнять оболочку входа в систему. Оболочка входа в систему, проигнорированная -c аргумент и чтения управляют в интерактивном режиме вместо этого. Решение не состоит в том, чтобы передать -.

Если Вы хотите считать файл запуска целевого пользователя, сделайте это явно.

su - USER1 <<EOF
date
if [ -e ~/.profile ]; then . ~/.profile; fi
…
EOF 2>&1 | tee -a -- "$LOG"
2
27.01.2020, 23:21

Теги

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