LXC / LXD Kapsayıcısına paylaşılan bir ana bilgisayar dizini ekleme


19

Ubuntu 14.04 üzerinde LXC / LXD ile denemeler yapıyorum ve hepsi harika çalışıyor. Sadece ana makinem ve bir kapsayıcı arasında paylaşılan dizinlerin nasıl çalıştığını anlamaya ihtiyacım var, böylece Virtualbox'ı bir kez ve herkes için fırlatabilirim.

Bu sayfayı gördüm: https://wiki.gentoo.org/wiki/LXD

Hangi talimatlar sağlar, ama sadece hata almaya devam ediyorum.

Herkes bu çalışmasını sağlamak için basit, net talimatları biliyor mu? Herhangi bir yardım çok takdir etmek.


2
Ben kullanarak bir ana bilgisayar dizini monte başardı lxc config device add confexample sharedtmp disk path=/tmp source=/tmp/shared. Ancak, kapsayıcıdaki dizine bakıldığında, içindeki dosyalar için sahip ve grup 'kimse' ve 'grup' olarak ayarlanır ve mount salt okunurdur.
user47227

Lütfen biraz daha ayrıntı ekler misiniz? Ne tam olarak yaptın, ne elde etmek istiyorsunuz ve hangi yerine yaşandı? Herhangi bir uyarı veya hata mesajı aldınız mı? Lütfen bunları sorunuzun tamamında çoğaltın. Ubuntu'da terminal içeriğini ve çoğu diyalog mesajını seçebilir, kopyalayabilir ve yapıştırabilirsiniz. (bkz. Nasıl iyi bir soru sorabilirim? )
David Foerster

Ayrıcalıklı bir kapsayıcı kullandığınızı ve UID / GID eşlemenin sorun olduğunu varsayarsak, LXD ile kullanıcıların eşleşmeleri hakkında bir makalenin bu bölümüne bakın. Ancak, sorunuzu sorduktan sonra bu muhtemelen LXD yoluna eklenmiştir.
0xC0000022L

Bunu eklendi hangi sürümü bilmiyorum (ben 2.18 kulüpler) ama mümkünse, ayrıca kullanabilirsiniz lxc filekonak ve konteyner kullanarak arasında dosya transferi için pushve pull.
code_dredd

Yanıtlar:


21

Bahsettiğiniz https://wiki.gentoo.org/wiki/LXD'deki talimatlar doğrudur, ancak biraz daha açıklanması gerekebilir.

Ana bilgisayarda, önce kapsayıcı verilerinin depolandığı dizinin sahipliğini kontrol edersiniz. Çalıştırmak

sudo ls -l /var/lib/lxd/containers

ve dizini paylaşmak istediğiniz kapsayıcının sahibini kontrol edin. Benim durumumda uidve gidher ikisi de 100000 idi.

Ardından, paylaşmak istediğiniz dizinin sahipliğini değiştirmek için bunları kullanın:

sudo chown 100000:100000 /tmp/share_on_host

Dizini, yorumunuzda belirttiğiniz şekilde kapsayıcıyla paylaşın:

lxc config device add mycontainer sharedtmp disk \
                  path=/tmp/share_on_guest source=/tmp/share_on_host

Şimdi, kapsayıcısında, dizinin /tmp/share_on_guest(dizininizi /tmpsisteme başka şeyler için kullanıldığından ve özel izinlere sahip olduğu için bağlamanızı tavsiye etmeyeceğim ) kökün sahip olduğunu göreceksiniz . Buradan chownkapsayıcıyı, kapsayıcıdaki uygunluğu uidve gidkullanıcınıza uygun hale getirmek için kullanabilirsiniz.

Bir yan not olarak, konteynerdeki sahipliği örneğin uid33 olan bir kullanıcı olarak değiştirdikten sonra , ana bilgisayarda uidşimdi 100033 olduğunu göreceksiniz , bu da tam anlamıyla mantıklı.


Emin değilim sadece benim kurulum, ama LXD V3.0.3 LTS (Ubuntu 18.04 LTS) ile ben içinde başka bir şey sembolik bağlantıları bulursa /var/lib/lxd/containerso sivri over /var/lib/lxd/storage-pools/lxd/containers(bu durumda son lxdbit my zfs depolama havuzunun adıdır). Oradaki tüm konteynerler, çalışırken 165536 uid / gid değerine sahipti ve root:rootkapalı olduğunda sahipti .
deoren

1
Bunun eski bir soru + cevap olduğunun farkındayım, ancak Ubuntu 18.04'te herhangi bir izinle uğraşmak zorunda kalmadım. Sadece klasörü ekleyin ve lxc configbir cazibe gibi çalıştı!
Apache

4

İşte bu sorunun güncellenmiş bir cevabı.

Ana bilgisayar klasörünü kaptaki /var/wwwgibi /var/testbağlayın.

lxc config device add mycontainer vartest disk source=/var/www path=/var/test

Ubuntu'ya Sor hoş geldiniz! Bunu nasıl yapacağınızla ilgili belirli ayrıntılarla genişletmek için bu cevabı düzenlemenizi öneririz . (Ayrıca , AskUbuntu'da ne tür cevapların en değerli olduğu hakkında genel tavsiyeler için İyi bir cevap nasıl yazarım? )
David Foerster

3

Kapsayıcıya ek aygıtlar atayabilirsiniz ve bunlar ana makineye erişilebilen klasörler olabilir.

$ lxc config ## display help
...
lxc config device add [<remote>:]<container> <device> <type> [key=value...]
    Add a device to a container.
...

Bunun <device>yalnızca atadığınız rastgele bir ad olduğunu unutmayın; bu, sonraki cihaz yönetimi için kimlik olarak kullanılacaktır.

Örneğin, "./host" ana bilgisayar klasörünü kapta "/ mnt / host" olarak bağlamak için ...

lxc config device add mycontainer vartest disk source=$(pwd)/host path=/mnt/host

Bir sorun var - bu klasörün hem ana bilgisayar hem de kapsayıcı tarafından yazılabilir olmasını istiyorsanız, sahiplik ve izinlerin buna göre yapılandırılması gerekir. Bu, kullanıcı ve grup iddeğerleri için sayısal aralıkları sanallaştıran varsayılan LXD modu ile karmaşıktır . Ancak kolay bir çözüm var : kapsayıcıyı ana bilgisayar eşdeğeri ayrıcalıklarla çalışacak şekilde yapılandırarak bu sanallaştırmayı atlayın ...

lxc config set <container> security.privileged true

Bu yaklaşımın ana bilgisayar güvenliği üzerindeki etkileri şu anda benim için net değil, ancak sanallaştırma tarafından bir şekilde "kapsanmış" gibi görünüyor. Pratik risk, kabı nasıl ve neden kullanacağınıza bağlıdır. Https://insights.ubuntu.com/2017/06/15/custom-user-mappings-in-lxd-containers adresindeki teknik notlara bakın.

Ayrıca, bu yaklaşımın, normalde kapsayıcıda kök olmayan bir kullanıcı olarak, örneğin aşağıdakileri eklediğiniz gibi çalıştırırsanız en iyi şekilde çalıştığını unutmayın ...

lxc exec zesty -- su --login ubuntu

Kök dışı oturum açma ile ilgili bir sorun var: envÖzellikle farklı http_proxy. Bir örnek Çözüm: sudo http_proxy=http://[fe80::1%eth0]:13128 apt-get update.
nobar

http_proxyBununla ilgili olarak , daha kolay çözümün muhtemelen burada tartışıldığı gibi IPV4'ü etkinleştirmek olduğunu düşünüyorum .
nobar

... ardından sudo dhclientkapta - veya değiştirmek manualiçin dhcpde 50-cloud-init.cfg. Burada güzel ipuçları: github.com/lxc/lxd/issues/1298
nobar

1
Bu patentli olarak kötü bir fikir. Ayrıcalıklı konteynırlara geçilmesini tavsiye etmek, LXD'nin getirdiği ilerlemelerden birini altüst eder. LXC 1.x, ayrıcalıklı kaplar (ve evet, hatta kök olarak bile) kullanma olanağı sunarken, ayrıntıları sıralamak biraz daha karmaşıktı. LXD ile bu artık geçmişte kaldı. Ayrıca, ana bilgisayar tarafı UID'sine gerekli erişime izin vermek veya burada özetlenen yöntemi kullanmak için bazı klasörlerde ACL'leri ayarlamak konusunda bu kadar karmaşık olan şey nedir? Evet UID'leri / GID'leri eşleştirmek tek yol değildir!
0xC0000022L

1

Ph0t0nix'in mükemmel cevabına dayanarak, Ubuntu 18.04 sunucum için aşağıdaki adım adım yaklaşımı öneriyorum:

  1. Ana bilgisayarda rootfs sahibinin UID'sini belirleyin:

    sudo ls -l /var/lib/lxd/storage-pools/lxd/containers/webserver/rootfs  
    id -u root    100000
  2. Kapta ubuntu'nun UID'sini belirleyin (yani kaptaki kullanıcı):

    id -u ubuntu    1000
  3. Ana bilgisayarda paylaşımlı klasör oluşturun ve kapsayıcıya ekleyin:

    lxc config device add webserver mydevicename disk path=/home/share_on_guest source=/home/share_on_host
  4. Paylaşılan klasörün ana bilgisayar UID'sinde ayarlama (UID = UID ana bilgisayar + UID misafir):

    sudo chown 101000:101000 /home/share_on_host
  5. Misafir (kullanıcı ubuntu) artık paylaşılan klasöre erişebilir ve kapsayıcı içinde paylaşılan klasöre erişimi ayarlayabilir chmod.


0

Artık kapsayıcıda ve ana bilgisayarda UID ve GID arasındaki eşlemeyi işlemek için LXD profillerini kullanarak bu soruna çalışan, güvenli bir çözümüm var.

Burada çok yararlı bir öz bulunabilir:

https://gist.github.com/bloodearnest/ebf044476e70c4baee59c5000a10f4c8


5
İşleri dünya çapında yazılabilir hale getirmenin genellikle güvenlik açısından kötü bir fikir olduğunu unutmayın. Muhtemelen ana bilgisayar yolunda POSIX ACL'leri kullanmayı, bu kullanıcı kimliği için belirli bir ACL ve daha sonra da yazma erişimine ihtiyaç duyan diğer tüm ana bilgisayarlar için eklenti kullanıcısına erişim izni vermeyi düşünmelisiniz.
stgraber

1
@stgraber, söylediklerinize katılırken, bunu nasıl kuracağım hakkında hiçbir fikrim yok. Bazı bağlantılar yardımcı olabilir.
s3v3n

Lütfen 0777belirgin bir neden olmadan aka "lütfen-sistemimi-ve-verilerimi yok et" izinleri önermeyin ! Bunun neredeyse hiçbir nedeni yoktur, çünkü (grup) sahipliğini değiştirmek gibi daha mantıklı değişikliklerle önlenebilir. -1
David Foerster

Demek istediğim, ama bunu çalıştıracak başka bir yolun yokluğunda, sadece tek bir kullanıcı geliştirme makinesinde geçici bir çözüm olarak kullandım. O zamandan beri profilleri kullanmanın bununla başa çıkmanın bir yolu olduğunu keşfettim.
user47227

1
ACL'leri veya burada ana hatları verilen yöntemi kullanmanın zorluğu nedir ?
0xC0000022L
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.