다른 사용자의 PATH 변수를 사용하여 명령 실행

다른 사용자의 PATH 변수를 사용하여 명령 실행

우분투 20.04.2 LTS

내가 겪고 있는 문제는 다른 사용자(sudo /runuser/...)로 명령을 실행하는 것입니다. 대상 사용자의 $PATH를 사용하여 명령을 실행하기 위한 옵션을 설정하는 옵션 세트를 찾을 수 없습니다. 이 문제를 처음 본 것은 Ansible을 통해 rake 명령을 실행하는 것이었지만 "deploy"라는 사용자를 사용하여 몇 가지 간단한 명령줄 테스트에 적용했습니다.

우분투 사용자로 명령을 실행하는 경우:

ubuntu@dev:~$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

사용자 배포와 동일한 명령:

deploy@dev:/home/ubuntu$ echo $PATH
/home/deploy/.yarn/bin:/home/deploy/.config/yarn/global/node_modules/.bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
#(This is the desired PATH value)

사용자로 배포할 때 sudo를 사용하여 명령을 실행해 보세요.

ubuntu@dev:~$ sudo su deploy -c "echo $PATH"
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
#(Wrong $PATH value, it's the path for user ubuntu again)
ubuntu@dev:~$ sudo -u deploy --login echo $PATH

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
(Wrong $PATH value, it's the path for user ubuntu again)

runuser를 사용자로 사용하여 실행 명령을 배포해 보십시오.

ubuntu@dev:~$ sudo runuser -l deploy -c 'echo $PATH'
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/snap/bin
#(Wrong $PATH value, not sure which but it's not the PATH of deploy)

"echo $PATH" 명령은 제가 실행하려는 rake 명령을 대체하는 것입니다. 나는 다른 많은 조합을 시도했습니다. 모두 실패하며 대부분은 명령을 실행하는 세션 경로를 반환합니다. 지정된 사용자가 셸을 시작하고 사용자별 PATH 값이 있는 것처럼 명령을 실행할 수 있는 명령과 옵션의 조합을 아는 사람이 있습니까?

감사해요.

답변1

@berndbausch의 의견이 정확합니다. 큰 따옴표가 아닌 작은 따옴표가 필요합니다. 다음을 사용하여 전체 로그인을 시뮬레이션하는 옵션의 이점을 누릴 수도 있습니다 -l.su(1)

# sudo su -l deploy -c 'echo $PATH'

답변2

내가 시도할 때:

$ echo $PATH
/home/bbausch/bin:/home/bbausch/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
$ sudo sh -c "echo $PATH"
/home/bbausch/bin:/home/bbausch/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
$ sudo sh -c 'echo $PATH'
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin

작은따옴표에 주의하세요. 이는 쉘이 명령을 호출하기 전에 큰따옴표로 묶인 문자열에서 변수 확장을 수행하기 때문에 발생합니다. 그러나 환경 변수가 파일에서 처리되는 방식을 구성할 수 있습니다 sudoers.

관련 정보