GNU/Linux >> Belajar Linux >  >> Linux

Memahami kepemilikan file pengguna di buruh pelabuhan:cara menghindari perubahan izin volume tertaut

Dua opsi yang saya temukan:

MENGAKUKAN semua hal (setelah melakukan pekerjaan Anda)

Saya telah melakukan docker run -v `pwd`/shared:/shared image , dan penampung telah membuat file di dalam pwd/shared itulah yang dimiliki oleh proses buruh pelabuhan. Namun, /shared masih dimiliki oleh saya. Jadi dalam proses buruh pelabuhan, saya melakukannya

chown -R `stat -c "%u:%g" /shared` /shared

stat -c "%u:%g" /shared mengembalikan 1000:1000 dalam kasus saya, menjadi uid:gid pengguna saya. Padahal tidak ada user 1000 di dalam docker conatainer, id ada di sana (dan stat /shared cukup katakan "tidak dikenal" jika Anda meminta nama pengguna).

Pokoknya, chown dengan patuh mengalihkan kepemilikan konten /shared ke 1000:1000 (yang sejauh ini tidak ada, tapi di luar wadah, ini saya). Jadi saya sekarang memiliki semua file. Kontainer masih dapat memodifikasi sesuatu jika diinginkan, karena dari sudut pandangnya, ini adalah root .

Dan semuanya baik-baik saja dengan dunia.

docker run -u jadi semua file yang dibuat otomatis akan memiliki pemilik yang tepat

Cara lain untuk melakukannya adalah -u bendera pada docker run.

docker run -v `pwd`/shared:/shared -u `stat -c "%u:%g" /shared` ubuntu bash

Dengan cara ini, pengguna buruh pelabuhan di dalam wadah adalah youruid:yourgid .

Namun: ini berarti melepaskan otoritas root Anda di dalam penampung (apt-get install , dll.). Kecuali jika Anda membuat pengguna dengan uid baru itu dan menambahkannya ke root grup.


Apakah itu benar? Dapatkah seseorang mengarahkan saya ke dokumentasi ini, saya hanya berspekulasi berdasarkan eksperimen di atas.

Mungkin ini hanya karena keduanya memiliki nilai numerik yang sama pada kernel, dan jika saya menguji pada sistem di mana pengguna rumahan saya bukan id 1000, maka izin akan berubah dalam setiap kasus?

Baca info coreutils 'chown invocation' , yang mungkin memberi Anda gambaran yang lebih baik tentang cara kerja izin / kepemilikan file.

Namun, pada dasarnya, setiap file di mesin Anda memiliki sekumpulan bit yang ditempelkan padanya yang menentukan izin dan kepemilikannya. Saat Anda chown file, Anda hanya menyetel bit-bit ini.

Saat Anda chown file ke pengguna/grup tertentu dengan menggunakan nama pengguna atau nama grup, chown akan mencari di /etc/passwd untuk nama pengguna dan /etc/group untuk grup untuk mencoba memetakan nama ke ID. Jika nama pengguna/nama grup tidak ada di file tersebut, chown akan gagal.

[email protected]:/test# touch test
[email protected]:/test# ll
total 8
drwxr-xr-x  2 root root 4096 Oct 22 18:15 ./
drwxr-xr-x 22 root root 4096 Oct 22 18:15 ../
-rw-r--r--  1 root root    0 Oct 22 18:15 test
[email protected]:/test# chown test:test test
chown: invalid user: 'test:test'

Namun, Anda dapat chown file menggunakan ID untuk apa pun yang Anda inginkan (dalam beberapa batas bilangan bulat positif atas, tentu saja), apakah ada pengguna/grup yang ada dengan ID tersebut di mesin Anda atau tidak.

[email protected]:/test# chown 5000:5000 test
[email protected]:/test# ll
total 8
drwxr-xr-x  2 root root 4096 Oct 22 18:15 ./
drwxr-xr-x 22 root root 4096 Oct 22 18:15 ../
-rw-r--r--  1 5000 5000    0 Oct 22 18:15 test

Bit UID dan GID disetel pada file itu sendiri, jadi saat Anda memasang file tersebut di dalam wadah buruh pelabuhan, file tersebut memiliki UID pemilik/grup yang sama seperti pada host, tetapi sekarang dipetakan ke /etc/passwd dalam penampung, yang mungkin akan menjadi pengguna lain kecuali jika dimiliki oleh root (UID 0).

Pertanyaan sebenarnya adalah, tentu saja, 'apa yang harus saya lakukan?' Jika bob masuk sebagai bob pada mesin host yang diberikan, dia harus dapat menjalankan wadah sebagai bob dan tidak mengubah izin file di bawah akun host-nya. Seperti berdiri, dia benar-benar perlu menjalankan penampung sebagai buruh pelabuhan pengguna untuk menghindari perubahan akunnya.

Sepertinya, dengan penyiapan Anda saat ini, Anda harus memastikan UID> nama pengguna Anda di /etc/passwd di host Anda cocok dengan UID Anda> nama pengguna di wadah Anda /etc/passwd jika Anda ingin berinteraksi dengan direktori pengguna yang terpasang sebagai pengguna yang sama yang masuk ke host.

Anda dapat membuat pengguna dengan id pengguna tertentu dengan useradd -u xxxx . Buuuut, sepertinya itu solusi yang berantakan...

Anda mungkin harus menemukan solusi yang tidak memasang direktori home pengguna host.


Jadi, saya berakhir di pos ini mencari cara memulihkan kepemilikan semua file (dimiliki oleh root) yang keluar dari wadah buruh pelabuhan yang berjalan sebagai root , kepada pengguna saya yang tidak memiliki hak istimewa di host.

Saya membutuhkan proses di dalam container untuk dijalankan sebagai root, jadi saya tidak bisa menggunakan -u saat docker dijalankan.

Saya tidak bangga dengan apa yang saya lakukan, tetapi di akhir skrip bash saya, saya menambahkan ini:

docker run --rm -it \
    --entrypoint /bin/sh \
    -e HOST_UID=`id -u` \
    -v ${HOST_FOLDER_OWNED_BY_ROOT}:/tmp \
    alpine:latest \
    -c 'chown -R ${HOST_UID}:${HOST_UID} /tmp/'

Mari kita uraikan beberapa baris:

  • Jalankan /bin/sh di dalam wadah:

--entrypoint /bin/sh

  • Teruskan uid pengguna saat ini sebagai variabel lingkungan ke penampung:

-e HOST_UID=`id -u`

  • Pasang folder apa pun yang ingin Anda miliki kembali ke pengguna Anda (diisi dengan file yang dimiliki oleh root, dihasilkan oleh wadah sebelumnya yang dijalankan sebagai root ), di bawah /tmp penampung baru ini :

-v ${HOST_FOLDER_OWNED_BY_ROOT}:/tmp

  • Jalankan chown secara rekursif dengan uid pengguna host di atas direktori target (dipasang di dalam wadah di /tmp ):

-c 'chown -R ${HOST_UID}:${HOST_UID} /tmp/'

Jadi, dengan ini, saya mendapatkan file yang dimiliki kembali ke pengguna saya saat ini tanpa harus "meningkatkan" hak istimewa ke root atau ke sudo.

Itu kotor, tapi berhasil. Semoga saya membantu.


Linux
  1. Cara Menyalin Izin dan Kepemilikan File ke File Lain di Linux

  2. Linux chmod and chown – Cara Mengubah Izin dan Kepemilikan File di Linux

  3. Cara Memaksa Kepemilikan File oleh Pengguna/Grup Pada Samba Share

  1. Cara Menjaga Kepemilikan Dan Izin File Tetap Utuh Saat Menyalin File Atau Direktori

  2. Bagaimana cara menghindari mengubah izin Linux file saat menyimpan melalui koneksi samba?

  3. Bagaimana cara kerja izin file untuk pengguna root?

  1. Bagaimana Cara Mengubah Izin Dari Pengguna Root Menjadi Semua Pengguna?

  2. Periksa izin file Linux dengan ls

  3. Memahami Bagaimana Umask Mengontrol Izin File / Direktori Awal di Linux