KVM을 루트가 아닌 사용자로 실행하도록 하는 이러한 명령은 실제로 무엇을 수행합니까?

KVM을 루트가 아닌 사용자로 실행하도록 하는 이러한 명령은 실제로 무엇을 수행합니까?

나는 팔로우하고 있다KVM을 루트가 아닌 사용자로 실행하기 위한 가이드라는 파일을 만들려면화식조정상적인 일. 문제는 kinoite에서 다음 명령을 실행하려고 하므로 /etc 디렉터리를 수정할 수 없다는 것입니다.

$ sudo sed -i "s/#user = \"root\"/user = \"$(id -un)\"/g" /etc/libvirt/qemu.conf
$ sudo sed -i "s/#group = \"root\"/group = \"$(id -gn)\"/g" /etc/libvirt/qemu.conf
$ sudo usermod -a -G kvm $(id -un)
$ sudo usermod -a -G libvirt $(id -un)
$ sudo systemctl restart libvirtd
$ sudo ln -s /etc/apparmor.d/usr.sbin.libvirtd /etc/apparmor.d/disable/

이 명령은 무엇을 하고 있으며 불변 배포판에서 작동하도록 하려면 어떻게 해야 합니까?

답변1

$ sudo sed -i "s/#user = \"root\"/user = \"$(id -un)\"/g" /etc/libvirt/qemu.conf

id -un명령을 실행한 사용자의 이름을 인쇄합니다.

sudo( s마녀 user 및 do)는 다른 사용자로 다른 명령을 실행하는 명령입니다. 지정되지 않은 경우 일반적으로 root수퍼유저 권한이 있는 사용자이며 파일 시스템의 파일을 수정할 수 있는 사람과 같은 일반적인 액세스 제어가 적용되지 않습니다. 해당 사용자로 명령을 실행할 수 있는 권한을 명시적으로 부여받아야 하며, 이 작업이 작동하려면 신원을 확인하기 위한 자격 증명을 제공해야 합니다.

seds스 트리머 입니다 ed. 일부 sed구현은 -i선택적으로 파일의 내용에 대해 작동 할 수 있으므로 i파일을 다음과 같이 편집할 수 있습니다.개울.

sed명령(70년대 초반부터)은 매우 간단한 프로그래밍 언어를 이해합니다. 해당 언어에는 패턴과 일치하는 문자열을 바꾸는 s/pattern/replacement/flags텍스트 편집기와 동일한 명령이 있습니다 .ed

여기서 패턴은 #user = "root"대체 is 입니다. 즉 user = "<output-of-the-id-command>", g각 줄을 필요한 만큼 여러 번 실행할 수 있다는 의미입니다(여기에서는 의미가 없지만 아마도 무해할 것입니다).

#user = "root"효과적으로, 이는 파일에서 해당 행의 주석 처리를 제거 하고 root호출 사용자로 대체합니다.

편집하는 파일은 다음과 같습니다.libvirt용 QEMU 드라이버 구성. 파일에는 다음이 포함됩니다.

# The user for QEMU processes run by the system instance. It can be
# specified as a user name or as a user id. The qemu driver will try to
# parse this value first as a name and then, if the name doesn't exist,
# as a user id.
#
# Since a sequence of digits is a valid user name, a leading plus sign
# can be used to ensure that a user id will not be interpreted as a user
# name.
#
# By default libvirt runs VMs as non-root and uses AppArmor profiles
# to provide host protection and VM isolation. While AppArmor
# continues to provide this protection when the VMs are running as
# root, /dev/vhost-net, /dev/vhost-vsock and /dev/vhost-scsi access is
# allowed by default in the AppArmor security policy, so malicious VMs
# running as root would have direct access to this file. If changing this
# to run as root, you may want to remove this access from
# /etc/apparmor.d/abstractions/libvirt-qemu. For more information, see:
# https://launchpad.net/bugs/1815910
# https://www.redhat.com/archives/libvir-list/2019-April/msg00750.html
#
# Some examples of valid values are:
#
#       user = "qemu"   # A user named "qemu"
#       user = "+0"     # Super user (uid=0)
#       user = "100"    # A user named "100" or a user with uid=100
#
#user = "root"

당신은 또한 볼 수 있습니다https://libvirt.org/drvqemu.html#posix-users-groups.

따라서 libvirtd명령을 실행한 사용자로 실행하라는 메시지가 표시됩니다.qemu

$ sudo sed -i "s/#group = \"root\"/group = \"$(id -gn)\"/g" /etc/libvirt/qemu.conf

설정은 동일합니다 group.

$ sudo usermod -a -G kvm $(id -un)

그러면 현재 사용자가 Unix 그룹의 구성원으로 추가됩니다 kvm. 이 그룹에는 KVM 하이퍼바이저 기능을 사용하기 위해 qemu에 필요한 /dev/kvm에 대한 읽기+쓰기 액세스 권한이 있습니다.

$ sudo usermod -a -G libvirt $(id -un)

libvirt멤버십을 통해 시스템 수준 가상 머신을 관리할 수 있는 그룹 의 경우에도 마찬가지입니다.

$ sudo systemctl restart libvirtd

libvirtd이 설정을 적용하려면 데몬을 다시 시작하세요 .

$ sudo ln -s /etc/apparmor.d/usr.sbin.libvirtd /etc/apparmor.d/disable/

libvirtd 서비스에 대한 apparmor를 비활성화하면 libvirtd 및 이 명령이 실행하는 일부 명령이 수행할 수 없는 많은 작업이 완화됩니다. 이 중 일부는 qemu가 루트가 아닌 사용자로서 제대로 작동하는 데 필요할 수 있습니다.

이 명령은 무엇을 하고 있으며 불변 배포판에서 작동하도록 하려면 어떻게 해야 합니까?

이는 배포판과 그 세부 사항에 따라 달라질 가능성이 높습니다.불변.

관련 정보