sudo 권한 없이 .bashrc에 디렉토리를 바인드 마운트하는 방법

sudo 권한 없이 .bashrc에 디렉토리를 바인드 마운트하는 방법

참고: 저는 WSL2에서 작업하고 있지만 제 문제는 엄밀히 말하면 Linux에 있습니다. 이곳이 올바른 장소가 아니라면 알려주세요.

.bashrc를 소스로 만들 때마다 mount --bind다음을 사용하여 디렉터리가 필요합니다.

if ! mountpoint -q -- "/mnt/wsl/$WSL_DISTRO_NAME"; then
    mount --bind --make-private / "/mnt/wsl/$WSL_DISTRO_NAME"
fi

[예상] 오류가 발생합니다: only root can use "--bind" option.

다음을 통해 사용자 권한을 높이려고 했습니다 /etc/sudoers.

[myusername] ALL=(ALL) NOPASSWD: /bin/mount

또한 다음을 추가해 보았습니다 /etc/fstab.

/       /mnt/wsl/Ubuntu-18.04   none    bind,user       0 0

하지만 아무것도 작동하지 않는 것 같습니다. 나는 사용자에게 영구 관리자/루트 권한이나 기타 유사한 "게으른" 옵션을 부여하지 않고 가능한 한 책임감 있게 이 작업을 수행하고 싶습니다.

답변1

루트 권한이 필요한 명령 앞에는 다음을 붙일 수 있습니다.

wsl.exe -u root <command>

또는 명령을 따옴표로 묶어야 하는 경우:

wsl.exe -u root /bin/sh -c "<command>" \
  && <another command>

그러면 별도의 WSL 프로세스가 시작되고 루트로 명령이 실행됩니다. 명령을 모두 한 줄에 입력하거나 접두사를 사용하여 여러 명령을 실행하거나 스크립트를 별도의 파일에 넣을 수 있습니다.

이 방법으로 루트로 실행하면 ~분명히 사용자의 홈 디렉터리로 확인됩니다 root. 이 명령을 실행하는 사용자의 홈 디렉터리에 액세스해야 하는 경우 먼저 변수에 저장하세요.

wsl.exe -u root service docker status >/dev/null || wsl.exe -u root service docker start >/dev/null

[boot]대신 항목을 추가할 수 있으므로 위 명령은 서비스를 시작하는 가장 좋은 방법이 아닙니다 wsl.config. 따라서 명령에 대해서도 이 작업을 수행할 수 있습니다.

선택하다

/etc/wsl.conf

[boot]
systemd = true

/etc/wsl.config

[boot]
command="service docker start"

지침

wsl.exe -u root.bashrc 파일에 이러한 사용법을 넣으면 WSL 연결을 통해 Visual Studio Code에서 터미널을 열 때 중단됩니다. VSCode에는 이러한 권한 상승의 사용을 방지하기 위한 보호 장치가 있습니다.

관련 정보