!["sudo"가 존재하지 않는다고 생각하면서 명령을 실행하십시오.](https://linux55.com/image/197315/%22sudo%22%EA%B0%80%20%EC%A1%B4%EC%9E%AC%ED%95%98%EC%A7%80%20%EC%95%8A%EB%8A%94%EB%8B%A4%EA%B3%A0%20%EC%83%9D%EA%B0%81%ED%95%98%EB%A9%B4%EC%84%9C%20%EB%AA%85%EB%A0%B9%EC%9D%84%20%EC%8B%A4%ED%96%89%ED%95%98%EC%8B%AD%EC%8B%9C%EC%98%A4..png)
yay
나는 권한을 높이기 위해 (archlinux의) 프로그램을 사용합니다 sudo
. 그러나 찾지 못하면 sudo
로 전환합니다 . 이는 내 사용자가 sudoer가 아니지만 설치되어 있기 때문에 (실행 중에도 설치해야하는 다른 프로그램이 su
있기 때문에) 내가 원하는 것입니다. 루트로서 나는 이것이 어리석은 일이라는 것을 알고 있습니다.)sudo
sudo
이제 문제는 이 프로그램( ) 이 존재하지 않는다고 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