выполнить команду после переключения на другого пользователя с помощью sudo

выполнить команду после переключения на другого пользователя с помощью sudo

Я пытаюсь выполнить эту команду:

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, поэтому вы ничего не выиграете от второй, более ограничительной записи.)

Связанный контент