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명령을 사용하면 적절하게 권한이 부여된 사용자가 다른 사람처럼 명령을 실행할 수 있습니다. 기본적으로 이다른 사람루트이지만 (인증에 따라) 모든 사용자가 될 수 있습니다. 또한 기본적으로 sudo현재 사용자의 비밀번호를 묻습니다.

echo hello사용자 로 명령 을 실행하려면 dp-postgres다음을 수행하십시오.

sudo -u dp-postgres echo hello

로그인 환경 설정이 필요한 경우 다음을 포함하세요 -i.

sudo -iu dp-postgres echo hello

root이 두 가지 예는 먼저 사용자에 대해 변경된 다음 사용자에 대해 변경되지 않으므로 이 사용자에 대한 액세스를 허용하지만 에 대한 액세스는 허용하지 않도록 dp-postgres사용자 정의 항목을 설정하도록 선택할 수 있습니다 . 이는 액세스를 제한 및/또는 관리해야 하는 다중 사용자 환경에 적합한 솔루션입니다 . (그러나 귀하는 이미 에 대한 액세스 권한을 갖고 있으므로 더 제한적인 두 번째 액세스로는 아무것도 얻을 수 없습니다.)sudoersdp-postgresrootrootroot

관련 정보