Я хочу сделать что-то вроде этого, чтобы переключать пользователя неинтерактивно:
su otheruser -p <password>
Но это явно не работает ... что будет?
Вы можете использовать эхо:
echo <otherpwd> | su - otheruser -c "my command line"
или ожидайте:
expect -c 'spawn su - otheruser -c "my command line"; expect "Password :"; send "<otherpwd>\n"; interact'
Но это означает, что пароль хранится в вашем скрипте в виде открытого текста, что никогда не бывает хорошо. На самом деле, лучше всего было бы sudo ...
Несколько способов стать другим пользователем.
su
работает без пароля, только если вы уже являетесь пользователем root. Пытаться предоставить ему пароль в командной строке - плохая идея, это приведет к раскрытию учетных данных. Не используйте su.
sudo
широко распространен и бесплатен. Вы можете развернуть политику, включая команды без пароля, в файлах или LDAP.
ssh otheruser@localhost
еще более широко используется. Однако у вас должен быть ключ без ключевой фразы или его эквивалент.
ksu
полезен в среде Kerberos. Если у вас уже есть билет, вы можете его использовать.
pbrun
является частью PowerBroker, коммерческого привилегированного продукта, с которым я не очень хорошо знаком.
dzdo
является частью Centrify DirectAuthorize, еще одного коммерческого продукта с привилегиями.
doas
OpenBSD выполняет команды от имени другого пользователя. Похоже, у него есть порт Linux, который появился довольно недавно.
pfexec
использует управление доступом на основе ролей в Solaris. Однако вы отметили этот вопрос Linux.