다른 사용자로 전환해야 하고 그 후에 일부 Linux 명령을 실행해야 하는 시나리오가 있습니다.
내 명령은 이렇습니다
( echo myPassword | sudo -S su hduser ) && bash /usr/local/hadoop/sbin/start-dfs.sh
하지만 이 명령을 사용하면 해당 사용자로 전환되고 다음 명령이 이전 사용자에게 실행됩니다.
이 작업을 수행하는 데 사용할 수 있는 쉘 스크립트가 있습니까?
답변1
노력하다.
sudo -H -u TARGET_USER bash -c 'bash /usr/local/hadoop/sbin/start-dfs.sh'
바라보다만수도:
-시간
-H (HOME) 옵션은 보안 정책에 HOME 환경 변수를 비밀번호 데이터베이스에서 지정한 대상 사용자의 홈 디렉터리로 설정하도록 요청합니다(기본값은 루트). 정책에 따라 이는 기본 동작일 수 있습니다.
-u 사용자
-u(사용자) 옵션을 사용하면 sudo가 루트가 아닌 사용자로 지정된 명령을 실행합니다. 사용자 이름 대신 uid를 지정하려면 #uid를 사용하세요. uid로 명령을 실행할 때 많은 쉘에서는 '#'을 백슬래시('\')로 이스케이프해야 합니다. 보안 정책은 uid를 비밀번호 데이터베이스에 나열된 것으로 제한할 수 있습니다. sudoers 정책은 targetpw 옵션이 설정되지 않은 한 비밀번호 데이터베이스에 없는 uid를 허용합니다. 다른 보안 정책에서는 이를 지원하지 않을 수 있습니다.
답변2
su user -c "sh /path/command.sh"
명령을 실행할 수 있습니다사용자.
다음 명령으로 테스트했습니다.
echo myPassword | sudo -S su - foobar -c "/usr/bin/watch -n 1 cat /etc/resolv.conf"
이후 watch -n
foobar로 실행됩니다.
따라서 귀하의 명령은 다음과 같이 작동해야 한다고 생각합니다.
echo myPassword | sudo -S su - hduser -c "bash /usr/local/hadoop/sbin/start-dfs.sh"
답변3
여기 더 짧은 버전이 있습니다αГsнιn의 답변:
sudo -Hu user command
# example: sudo -Hu root fish
답변4
다음을 시도해 볼 수 있습니다.
pkexec - 다른 사용자로 명령 실행
pkexec [--user 사용자 이름] 프로그램 [매개변수...]