Saya menjalankan beberapa layanan di dalam wadah Docker LXC di server saya dan saya mulai benar-benar melakukan hal-hal serius dengan mereka.
Satu hal yang saya tidak jelas adalah bagaimana izin pengguna bekerja di dalam dan di luar wadah. Jika, misalnya, saya menjalankan MySQL dalam sebuah wadah dan mengatur direktori datanya /data
, yang merupakan volume Docker, bagaimana izin di dalam dan di luar wadah memengaruhi kebijakan akses?
Jelas, idenya adalah untuk menjalankan MySQL sebagai penggunanya sendiri dalam wadah (yaitu mysql:mysql
) dan memberikannya hak baca dan tulis ke direktori itu. Saya berasumsi bahwa ini akan cukup mudah, hanya chmod
direktori, dll. Tapi bagaimana cara kerjanya di luar wadah? Sekarang saya memiliki volume yang dibagikan Docker ini yang disebut 'data,' bagaimana cara saya mengatur kontrol akses?
Saya secara khusus ingin dapat menjalankan pengguna yang tidak memiliki hak di luar wadah Docker yang secara berkala akan mengakses volume bersama MySQL dan mencadangkan data.
Bagaimana saya bisa mengatur izin, pengguna, dan grup sehingga pengguna tertentu pada host dapat membaca / menulis file dan folder di volume yang dibagi Docker?
sumber
docker
dukungan untuk itu), wadah LXC dapat dijalankan sebagai pengguna yang tidak memiliki hak. Jika tidak,root
pengguna di dalam wadah berpotensi keluar jika wadah tidak dikonfigurasi dengan benar. Yaituroot
pada hostroot
di wadah dalam wadah LXC istimewa.root
omong-omong, bisa juga menjalankan kontainer yang tidak terjangkau . Penting adalah bahwa pemetaan untuk userns didefinisikan.Jawaban:
Sejak rilis 0.9 Docker telah jatuh
LXC
dan menggunakan lingkungan eksekusi sendirilibcontainer
,. Pertanyaan Anda agak tua tapi saya kira jawaban saya masih menggunakan versi yang Anda gunakan.Jawaban Cepat: Untuk memahami izin volume, Anda dapat mengambil analogi dari
mount --bind Host-Dir Container-Dir
. Jadi untuk memenuhi kebutuhan Anda, Anda dapat menggunakan metode tradisional apa pun untuk mengelola izin. Saya kira ACL adalah yang Anda butuhkan .Jawaban Panjang: Jadi seperti pada contoh Anda, kami memiliki wadah bernama dok dengan volume
/data
.Di dalam wadah, server MySQL kami telah dikonfigurasi untuk menggunakan
/data
sebagai datanya direktori. Jadi kami memiliki basis data di/data
dalam wadah. Dan di luar wadah pada OS Host, kami telah memasang/data
volume ini dari/usr/container/Databases/
dan kami menetapkan pengguna bob normal untuk mengambil cadangan dari database. Dari mesin host kami akan mengonfigurasi ACL untuk pengguna bob .Untuk mengujinya, mari buat cadangan dengan pengguna bob .
Dan tar akan keluar dan Anda dapat melihat bahwa pengguna kami dapat mengakses semua file.
Sekarang dari dalam wadah jika Anda memeriksa dengan
getfacl
Anda akan melihat bahwa bukannya bob itu menunjukkan 3000. Ini karena UID bob adalah 3000 dan tidak ada pengguna seperti itu di wadah sehingga hanya menampilkan UID yang diterimanya dari data meta . Sekarang jika Anda membuat pengguna di wadahuseradd -u 3000 bob
Anda dengan Anda akan melihat bahwa sekaranggetfacl
menunjukkan bob nama bukan 3000.Ringkasan : Jadi izin pengguna yang Anda tetapkan dari dalam atau luar wadah mencerminkan kedua lingkungan. Jadi untuk mengelola izin volume, UID di mesin host harus berbeda dari UID di wadah .
sumber
lxc-docker
, apakah itu berarti tidak menggunakan LXC? Apakah hal di atas masih berlaku dalam kasus ini?apt-get info
mungkin memiliki detail) karena di ubuntu ada paket laindocker.io
yang saya gunakan. Saya tidak pergi dengan Ubuntu lama, karena Docker dan RedHat telah bergandengan tangan sekarang. Jadi lebih baik menggunakan RHEL atau CentOS sebagai OS dasar, atau Anda bisa menggunakan LXC.lxc-docker
hal ini tampaknya bekerja sesuai rencana. Saya membuat pengguna dengan jumlah 3000, menyentuh file dalam volume bersama, dan dapat melihat dari OS host bahwa file tersebut ada dan dimiliki oleh pengguna dengan id 3000.