스크립트에서 "sudo su - user"를 모방하는 방법은 무엇입니까?

스크립트에서 "sudo su - user"를 모방하는 방법은 무엇입니까?

lovelyplace내 애플리케이션을 다음에 배포해야 합니다 .구조스크립트. 불행하게도 서버 설정이 잘못되어 있는데 제가 할 수 있는 일은 아무것도 없습니다. 계속해서 서버를 유지해야 합니다.

루트가 아닌 사용자를 사용하여 일반적인 작업을 수행할 수 있습니다 alice. 이름을 으로 지정하겠습니다. 그러면 다른 사용자가 있으니 그 사람에게 전화해 보겠습니다 bob. bob루트 권한이 있습니다. 서버를 준비한 관리자가 루트로만 동작할 수 있는 곳에 모든 것을 설치해 놓았기 때문에 bob제가 하는 거의 모든 일에 꼭 필요합니다.

alice내가 가진 건 계정 비밀번호뿐이에요. 나에게는 비밀번호가 없지만 비밀번호를 입력하고 뭔가를 하면 그의 힘을 사용할 bob수 있다고 들었습니다 . sudo su - bob실제로 쉘에서는 이 작업을 수행할 수 있으며(비밀번호 프롬프트 없음!) 로그인하면 bob모든 작업을 수행할 수 있습니다. 그러나 이 작업은 스크립트에서 비대화형으로 수행해야 합니다. 그것은 마치 sudo su - bob && whoami.

bob그러나 나는 다음과 같은 힘을 얻는 다른 방법을 생각할 수 없습니다 .

예를 들어 sudo su -c whoami bob결과는 [sudo] password for alice:다음과 같습니다.Sorry, user alice is not allowed to execute '/bin/bash' as bob on lovelyplace.

나는 많은 조합 등을 시도했지만 su결과 sudo는 항상 동일합니다. 비밀번호 프롬프트, 그 다음 거부.

뭔가 알아내야 해프로그래밍 방식으로Identity로 서버에 로그인 alice한 후 Identity로 콘텐츠를 실행합니다 bob. sudo whoami인쇄할 이와 유사한 비대화형 라이너가 필요합니다 bob. 그렇지 않으면 스크립트를 통해 애플리케이션을 배포할 수 없습니다.

sudo su - bob스크립트에서 이 이상한 동작을 모방하는 방법에 대한 제안 사항이 있습니까 ?

고쳐 쓰다: bob루트와 동일한 권한이 없습니다. 그는 sudoer 등을 읽을 수 없기 때문에 에 비해 더 높은 권한을 갖고 있지만 alice분명히 루트 설정을 조정할 수 있는 권한은 많지 않습니다.

답변1

실행하려는 명령을 명령의 표준 입력 sudo su - bob(따라서 명령이 생성하는 셸)으로 전달할 수 있어야 합니다.

sudo su - bob <<ENDCOMMANDS
echo "Running as:"
whoami
echo "done now...
ENDCOMMANDS

답변2

귀하의 서버에서 특권적인 쿵푸를 수행하는 것은 매우 흥미로운 일인 것 같습니다. 시도할 수 있는 두 가지가 있지만 Alice와 Bob이 할 수 있는 것과 하지 않을 수 있는 YMMV만 추측할 수 있습니다.

왜 앨리스로 실행되는 스크립트여야 합니까? 일부 자동 액세스이기 때문에? 음, cron 데몬이 있는 경우 bash 스크립트를 주기적으로 실행하는 cron 작업을 bob에 제공할 수 있습니다. alice가 bash 스크립트에 쓸 수 있다면 su(do) 없이 bob으로 스크립트를 실행할 수 있는 방법을 찾았습니까? 부두교. 하지만 보안이 약간 약화됩니다.

내가 시도한 적이 없는 또 다른 접근 방식은 백그라운드 셸 경로로 이동하여 stdin과 out을 파이프에 바인딩하는 것입니다. 표준 입력 파이프로 보낼 수 있어야 하며 sudo su - bob\n백그라운드 셸이 명령을 실행하도록 해야 합니다. 백그라운드 셸로 전송된 각 후속 명령은 bob으로 실행되어야 합니다. 대략적인 스케치는 다음과 같습니다.

mkdir -p /tmp/backshell
mkfifo /tmp/backshell/stdin
mkfifo /tmp/backshell/stdout
mkfifo /tmp/backshell/stderr

bash -l >/tmp/backshell/stdout 2>/tmp/backshell/stderr </tmp/backshell/stdin &

cat /tmp/backshell/stdout &
cat /tmp/backshell/stderr >&2 &

echo "sudo su - bob" >> /tmp/backshell/stdin
echo "whoami" >> /tmp/backshell/stdin

그러나 첫 번째 이후 echo표준 입력 파이프가 닫히므로 백쉘도 닫히는 단점이 있습니다. 따라서 표준 입력 파이프가 닫히는 것을 방지하는 방법을 찾거나 이를 구현하기 위해 더 복잡한 것을 사용해야 합니다. 저는 파이썬이 서브쉘과 상호작용을 위한 정말 좋은 모듈이라고 생각합니다.

관련 정보