나는 팔로우하고 있다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
마녀 u
ser 및 do
)는 다른 사용자로 다른 명령을 실행하는 명령입니다. 지정되지 않은 경우 일반적으로 root
수퍼유저 권한이 있는 사용자이며 파일 시스템의 파일을 수정할 수 있는 사람과 같은 일반적인 액세스 제어가 적용되지 않습니다. 해당 사용자로 명령을 실행할 수 있는 권한을 명시적으로 부여받아야 하며, 이 작업이 작동하려면 신원을 확인하기 위한 자격 증명을 제공해야 합니다.
sed
s
스 트리머 입니다 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가 루트가 아닌 사용자로서 제대로 작동하는 데 필요할 수 있습니다.
이 명령은 무엇을 하고 있으며 불변 배포판에서 작동하도록 하려면 어떻게 해야 합니까?
이는 배포판과 그 세부 사항에 따라 달라질 가능성이 높습니다.불변.