
Я пытаюсь выполнить эту команду:
echo hello | sudo su - dp-postgres
Но я понимаю это:
-bash: line 1: hello: command not found
Я также попробовал это:
sudo su - dp-postgres -c 'echo hello'
Но это значит, что у меня спрашивают пароль текущего пользователя.
Мне нужно переключиться dp-postgres
и затем выполнить любую команду от имени dp-postgres
пользователя.
решение1
sudo
команда позволяет выполнить команду от имени другого пользователя. По умолчанию, он запросит пароль текущего пользователя, это нормальное поведение (очевидно, пользователь также должен иметь sudo
разрешение на использование). Если вы хотите предотвратить запрос пароля, вам нужно изменить свой /etc/sudoers
файл и использовать NOPASSWD
опцию, которая позволит вам запустить sudo без запроса пароля.
Для вашей команды вы можете сделать что-то вроде:
sudo su - dp-postgres <<-EOF
echo hello
EOF
Ваша вторая команда тоже должна работать:
sudo su - dp-postgres -c 'echo hello'
Вот пример:
$ sudo su - -c 'echo hello; id'
hello
uid=0(root) gid=0(root) groups=0(root)
На моей стороне пароль не требуется, поскольку первый пользователь находится в sudo
группе и имеет что-то вроде этого:
%sudo ALL=(ALL:ALL) NOPASSWD:ALL
В /etc/sudoers
файле.
решение2
Как уже было написано в другом месте, sudo
команда позволяет соответствующим образом авторизованному пользователю выполнить команду от имени другого человека. По умолчанию этокто-нибудь другойroot, но (при условии авторизации) это может быть любой пользователь. Также по умолчанию sudo
будет запрашиваться пароль текущего пользователя.
Если вы хотите выполнить echo hello
команду от имени dp-postgres
пользователя, вы можете сделать следующее:
sudo -u dp-postgres echo hello
Если вам необходимо настроить среду входа, включите -i
:
sudo -iu dp-postgres echo hello
Обратите внимание, что эти два примера не изменяются сначала на root
пользователя, а затем на dp-postgres
пользователя, поэтому вы можете настроить пользовательскую sudoers
запись, чтобы разрешить доступ этому dp-postgres
пользователю, но не к root
. Это хорошее решение для многопользовательской среды, где доступ к root
должен быть ограничен и/или управляем. (Однако я отмечаю, что у вас уже есть доступ к root
, поэтому вы ничего не выиграете от второй, более ограничительной записи.)