lxc: chạy hộp ảo bên trong một container


9

Tôi đã cài đặt hộp ảo bên trong một thùng chứa lxc. Tuy nhiên, khi tôi cố gắng khởi động VM, tôi nhận được thông báo:

trình điều khiển kernel không truy cập được (rc = 1909) .... vấn đề cấp phép với / dev / vboxdrv.

Điều này rõ ràng trông giống như một vấn đề bảo mật có thể dự đoán.

Có ai biết làm thế nào tôi có thể cấp quyền cho container để truy cập trình điều khiển thiết bị này: '/ dev / vboxdrv' không?

Bất kỳ trợ giúp hoặc con trỏ đánh giá rất cao.

Câu trả lời:


9

Trên máy chủ LXC của bạn (Tôi giả sử Ubuntu ở đây):

  1. Cài đặt virtualbox-dkms, linux-headers-generic, build-essentialgói và kiểm tra kernel module được nạp:

    myhost$ sudo /etc/init.d/virtualbox status
    VirtualBox kernel modules are loaded.
    
  2. Lấy số thiết bị VirtualBox (10, 55/56/57 trong trường hợp của tôi):

    myhost$ ls -la /dev | grep vbox
    crw-------  1 root root     10,  57 Feb 25 08:22 vboxdrv
    crw-------  1 root root     10,  56 Feb 25 08:22 vboxdrvu
    crw-------  1 root root     10,  55 Feb 25 08:22 vboxnetctl
    
  3. Lấy số nút và thêm vào cấu hình khách LXC của bạn ( /var/lib/lxc/myguest/config):

    ## VirtualBox
    lxc.cgroup.devices.allow = c 10:57 rwm
    lxc.cgroup.devices.allow = c 10:56 rwm
    lxc.cgroup.devices.allow = c 10:55 rwm
    
  4. Khởi động lại khách LXC của bạn, cài đặt virtualboxgói và tạo các nút thiết bị:

    myguest$ sudo mknod -m 600 /dev/vboxdrv c 10 57
    myguest$ sudo mknod -m 600 /dev/vboxdrvu c 10 56
    myguest$ sudo mknod -m 600 /dev/vboxnetctl c 10 55
    
  5. Kiểm tra VirtualBox trên máy khách có thể thấy các mô-đun hạt nhân:

    myguest$ sudo /etc/init.d/virtualbox status
    VirtualBox kernel modules are loaded.
    

Đây phải là câu trả lời chính xác. Các bước quan trọng nhất mà tất cả các câu trả lời khác thiếu là bước 3 và 4.
Léo Lam

1

Trình điều khiển hạt nhân VirtualBox Linux (vboxdrv) không được tải hoặc có vấn đề về quyền với / dev / vboxdrv. Thiết lập lại mô-đun hạt nhân bằng cách thực hiện

 '/etc/init.d/vboxdrv setup'

làm gốc. Người dùng Ubuntu hoặc Fedora nên cài đặt gói DKMS lúc đầu. Gói này theo dõi các thay đổi nhân Linux và biên dịch lại mô-đun hạt nhân vboxdrv nếu cần.


Đây chỉ là một trích dẫn từ thông báo lỗi. Trình điều khiển được tải nhưng container không có quyền truy cập nó. Theo phản hồi lỗi. Câu hỏi của tôi là: làm thế nào để cấp quyền cho các quy trình trong một container để truy cập các thiết bị kernel ?? Làm thế nào để tôi giải quyết vấn đề quyền?
dùng108168

0

Bạn cần /dev/vboxdrvsở hữu bởi nhóm "vboxuser" và người dùng bắt đầu vùng chứa trong nhóm đó. Thêm người dùng vào nhóm sau đó đảm bảo có quyền của nhóm (tức là chmod 660 /dev/vboxdrv).


Xin chào Nathan C. Cảm ơn phản hồi của bạn. Tôi đang làm việc này ở đâu; trong môi trường máy chủ hay container?
dùng108168

Máy chủ giả định các trình điều khiển kernel được cài đặt ở đó (do LXC phụ thuộc vào kernel host).

Xin chào Nathan C Cảm ơn đã làm rõ. Thiết bị / dev / vboxdrv được sở hữu bởi root và tôi đang bắt đầu container với quyền root. Tôi đã chạy virtualbox với tư cách là một người dùng khác trong container nhưng đã thử chạy nó dưới quyền root. Tôi cũng đã mã hóa thiết bị để đặt nhóm thành vboxusers và quyền thành 660. Tôi vẫn nhận được lỗi. Mọi thứ hoạt động tốt trên máy chủ cho cả người dùng root và không root. Tôi không phải đặt cài đặt trong tệp cấu hình lxc để cấp quyền cho vùng chứa ?? Đó là những gì tôi giả định nhưng không biết chúng là gì. Cảm ơn bạn đã giúp đỡ.
dùng108168

-1

Không cần thiết phải cài đặt hộp ảo trên máy chủ của bạn, miễn là bộ chứa của bạn biên dịch mô-đun hạt nhân, bạn chỉ có thể tải nó trong tập lệnh khởi động trước trên bộ chứa LXC. Để bảo mật tốt hơn, bạn có thể sao chép các mô-đun hạt nhân VBox vào máy chủ của mình trước khi tải.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.