Ini adalah sesuatu yang saya belum dapat menemukan banyak info sehingga bantuan apa pun akan dihargai.
Pemahaman saya demikian. Ambil file berikut:
-rw-r----- 1 root adm 69524 May 21 17:31 debug.1
Pengguna phil
tidak dapat mengakses file ini:
phil@server:/var/log$ head -n 1 debug.1
cat: debug.1: Permission denied
Jika phil
ditambahkan ke adm
grup, itu dapat:
root@server:~# adduser phil adm
Adding user `phil' to group `adm' ...
Adding user phil to group adm
Done.
phil@server:/var/log$ head -n 1 debug.1
May 21 11:23:15 server kernel: [ 0.000000] DMI: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.7.5.1-0-g8936dbb-20141113_115728-nilsson.home.kraxel.org 04/01/2014
Namun, jika suatu proses dimulai sementara secara eksplisit mengatur user:group
untuk phil:phil
itu tidak dapat membaca file. Proses dimulai seperti ini:
nice -n 19 chroot --userspec phil:phil / sh -c "process"
Jika proses dimulai sebagai phil:adm
, ia dapat membaca file:
nice -n 19 chroot --userspec phil:adm / sh -c "process"
Jadi pertanyaannya adalah:
Apa yang istimewa tentang menjalankan proses dengan kombo pengguna / grup tertentu yang mencegah proses untuk dapat mengakses file yang dimiliki oleh kelompok tambahan dari pengguna itu dan apakah ada cara lain untuk mengatasi hal ini?
Jawaban:
Proses dijalankan dengan uid dan gid. Keduanya memiliki izin yang ditugaskan untuk mereka. Anda dapat memanggil chroot dengan userspec dari pengguna dan grup, di mana sebenarnya pengguna tidak berada dalam grup itu. Proses kemudian akan dieksekusi dengan pengguna uid dan gid grup yang diberikan.
Lihat sebuah contoh. Saya memiliki pengguna yang dipanggil
user
, dan dia ada di grupstudent
:Saya punya file sebagai berikut:
Dia tidak bisa membacanya:
Sekarang, saya dapat menjelaskan
cat
proses dalam konteks penggunauser
DAN gruproot
. Sekarang, proses kucing memiliki izin yang diperlukan:Sangat menarik untuk melihat apa yang
id
dikatakan:Hm, tetapi pengguna
user
tidak ada dalam grup itu (root
). Dari manaid
mendapatkan informasi itu? Jika dipanggil tanpa argumen,id
gunakan panggilan sistemgetuid()
,,getgid()
dangetgroups()
. Jadi konteks prosesid
itu sendiri dicetak. Konteks yang telah kita ubah--userspec
.Saat dipanggil dengan argumen,
id
tentukan saja tugas grup dari pengguna:Untuk pertanyaan Anda:
Anda dapat mengatur konteks proses keamanan yang diperlukan untuk menyelesaikan tugas apa pun yang perlu dilakukan proses. Setiap proses memiliki set uid dan gid yang menjalankannya. Biasanya proses "mengambil" pengguna panggilan uid dan gid sebagai konteksnya. Dengan "take" yang saya maksudkan adalah kernel, jika tidak maka akan menjadi masalah keamanan.
Jadi, sebenarnya bukan pengguna, yang tidak memiliki izin untuk membaca file, itu adalah proses '(
cat
). Tetapi prosesnya berjalan dengan uid / gid dari pengguna panggilan.Jadi Anda tidak harus berada dalam grup tertentu untuk menjalankan proses dengan uid dan gid dari grup itu.
sumber
EUID
merupakan bagian dari pemanggilaninitgroups(3)
. Namun,initgroups(3)
ini adalah operasi yang relatif mahal, karena perlu menghitung semua kelompok. Untuk alasan ini, proses hanya memanggilinitgroups(3)
jika mereka memiliki alasan khusus untuk melakukannya.Menggunakan
--userspec
opsi padachroot
menentukan pengguna dan satu grup untuk digunakan saat menjalankanchroot
. Untuk menentukan grup tambahan, Anda perlu menggunakan--groups
opsi ini juga.Secara default proses mewarisi kelompok utama dan tambahan dari pengguna yang menjalankannya, tetapi dengan menggunakan
--userspec
Anda mengatakanchmod
untuk menimpanya menggunakan kelompok tunggal yang ditentukan.Dokumentasi terperinci tentang izin di Linux tersedia di halaman
credentials(7)
manual.sumber
Ketika Anda masuk ke Linux, proses login¹ - setelah memverifikasi Anda dapat masuk sebagai phil - dapatkan uid dari phil dan grup yang dimilikinya, atur itu sebagai proses yang kemudian dimulai sebagai shell Anda. Kelompok uid, gid dan tambahan adalah properti dari proses tersebut.
Program selanjutnya yang dimulai setelah itu, adalah turunan dari shell itu, dan cukup menerima salinan kredensial tersebut. * Ini menjelaskan mengapa mengubah hak pengguna tidak memengaruhi proses yang sedang berjalan. Namun, perubahan akan diambil pada login berikutnya.
* Pengecualian adalah program yang bit setuid atau setgidnya diset, yang akan memiliki id pengguna efektif berbeda . Ini digunakan misalnya dalam su (1) sehingga dapat berjalan dengan
root
hak istimewa bahkan ketika dijalankan olehphil
.Setelah Anda menambahkan
phil
keadm
grup, ia dapat berlarisu phil
, dansu
akan - berjalan sebagai root - memverifikasi bahwa ia memang memberikan kata sandi phil dan kemudian mendaratkannya ke dalam shell dengan grup uid, gid dan tambahan yang dimiliki oleh phil. Dan karena ini dilakukan setelah menambahkan pengguna ke grup, shell itu sudah ada diadm
grup.Saya tidak menganggap chroot (1) program yang paling cocok untuk berjalan sebagai pengguna yang berbeda , tetapi tentu saja menyelesaikan pekerjaan. Parameter
--userspec phil:phil
membuatnya dijalankan dengan uid ofphil
dan gid ofphil
. Tidak ada grup tambahan yang ditetapkan (untuk itu Anda akan menyediakan--groups
). Dengan demikian, proses anak-anak tidak dalamadm
kelompok.Cara yang lebih normal untuk menjalankan proses Anda seperti phil
su phil -c "process"
. Saatsu
memuat grup uid, gid, dan tambahan dari informasi basis data pengguna,process
akan memiliki kredensial yang sama dengan yang dimiliki pengguna saat ini.¹ Ini mungkin login (1) , sshd, su, gdb atau program lain. Juga, kemungkinan dikelola melalui modul pam.
sumber