"sudo"가 존재하지 않는다고 생각하면서 명령을 실행하십시오.

"sudo"가 존재하지 않는다고 생각하면서 명령을 실행하십시오.

yay나는 권한을 높이기 위해 (archlinux의) 프로그램을 사용합니다 sudo. 그러나 찾지 못하면 sudo로 전환합니다 . 이는 내 사용자가 sudoer가 아니지만 설치되어 있기 때문에 (실행 중에도 설치해야하는 다른 프로그램이 su있기 때문에) 내가 원하는 것입니다. 루트로서 나는 이것이 어리석은 일이라는 것을 알고 있습니다.)sudosudo

이제 문제는 이 프로그램( ) 이 존재하지 않는다고 yay생각하게 하면서 어떻게 실행할 수 있느냐 하는 것입니다.sudo

소스에서 패키지를 빌드하고 설치하는 것은 yay패키지 관리자(AUR 도우미)입니다. 보안상의 이유로 이러한 빌드는 루트로 수행할 수 없습니다. 이는 충분히 공평합니다.

그리고 이미 질문을 드렸으니 참고하세요여기저장소 에 있지만 yay문제가 해결되는 동안 대체 솔루션을 갖고 싶습니다.

답변1

내가 생각할 수 있는 유일한 해결 방법은 yay루트로 시작하고 sudo시작하기 전에 일시적으로 삭제하는 래퍼 스크립트를 사용하는 것입니다 yay.

#!/bin/sh

su -c "mv /sbin/sudo /sbin/sudo.old" && yay "$@"
su -c "mv /sbin/sudo.old /sbin/sudo"

그러나 이렇게 하려면 루트 비밀번호를 두 번 입력해야 합니다. 또 다른 옵션은 루트로 스크립트를 실행한 후 다음을 su사용하여 스크립트 내에서 다른 사용자로 전환하는 것입니다.

#!/bin/sh

normalUser="$1"
shift

mv /sbin/sudo /sbin/sudo.old &&
su -c "yay $@" $normalUser
mv /sbin/sudo.old /sbin/sudo

그런 다음 다음과 같이 실행할 수 있습니다.

su -c "/path/to/yay.wrapper.sh adrin $yayArguments" 

귀하의 경우에는 실제로 사용하지 않기 때문에 안전해야 합니다 . 하지만 혹시라도 문제가 발생하는 경우 쉽게 검색할 수 있도록 sudo복사본을 만들어 두겠습니다 ./sbin/sudo

답변2

이 문제를 우회하는 가장 쉬운 방법은 이 --sudo=su옵션을 사용하는 것입니다.

너무 길어요.- yay --sudo=su -Syu원하는 효과를 얻으려면 실행하기만 하면 됩니다.

yay --sudo=su예상대로 작동하지 않는 이유는 다음과 같습니다 .


yay문제는 CLI 매개변수가 처리되는 방식으로 인해 발생합니다. 문서에서:

If no arguments are provided 'yay -Syu' will be performed.

If no operation is selected -Y will be assumed.

인수가 제공되지 않으면 yay -Syu(전체 시스템 업데이트)가 수행되지만 --sudo=su인수로 계산되므로 yay는 작업을 선택합니다 -Y(쿼리와 일치하는 패키지를 나열합니다. 이 경우 비어 있으므로 명령이 즉시 종료됩니다).

담당하는 코드 조각은 다음과 같습니다.https://github.com/Jguer/yay/blob/next/pkg/settings/parser/parser.go#L618

관련 정보