Saya menjalankan sistem desktop Ubuntu 12.04. Sejauh ini saya hanya menginstal beberapa program (saya memiliki hak sudo).
Ketika saya memeriksa daftar pengguna di sistem, saya melihat daftar panjang, seperti lebih dari 20 pengguna — kapan pengguna ini dibuat (mis. Daemon, sys, sinkronisasi, game, pulsa, dll.)? Bagaimana ini terkait dengan program baru yang diinstal?
Jika saya menjalankan program di sistem saya, itu harus dijalankan dengan UID saya. Tetapi ketika melakukan ps , saya melihat banyak program lain berjalan dengan UID yang berbeda (seperti root, daemon, avahi, syslog, colord dll.) - bagaimana program-program ini dimulai dengan UID yang berbeda?
Jawaban:
Akun pengguna tidak hanya digunakan untuk pengguna manusia yang sebenarnya, tetapi juga untuk menjalankan layanan sistem dan terkadang sebagai pemilik file sistem. Hal ini dilakukan karena pemisahan antara sumber daya pengguna manusia (proses, file, dll.) Dan pemisahan antara sumber daya layanan sistem membutuhkan mekanisme yang sama di bawah tenda.
Program yang Anda jalankan biasanya dijalankan dengan ID pengguna Anda. Ini hanya daemon sistem yang berjalan di bawah akun mereka sendiri. Entah file konfigurasi yang menunjukkan kapan menjalankan daemon juga menunjukkan apa yang harus dijalankan oleh pengguna, atau daemon beralih ke akun yang tidak memiliki hak pribadi setelah memulai. Beberapa daemon memerlukan hak administratif penuh, sehingga mereka berjalan di bawah akun root . Banyak daemon hanya membutuhkan akses ke perangkat keras tertentu atau ke file tertentu, sehingga mereka berjalan di bawah akun pengguna khusus. Ini dilakukan untuk keamanan: dengan cara itu, bahkan jika ada bug atau kesalahan konfigurasi pada salah satu layanan ini, itu tidak dapat menyebabkan serangan sistem penuh, karena penyerang akan terbatas pada apa yang dapat dilakukan layanan ini dan tidak akan dapat menimpa file, memata-matai proses, dll.
Di bawah Ubuntu, ID pengguna dalam kisaran 0–99 dibuat saat instalasi sistem. 0 adalah root; banyak dari yang berada dalam kisaran 1-99 hanya ada karena alasan historis dan hanya disimpan untuk kompatibilitas dengan beberapa instalasi lokal yang menggunakannya (beberapa entri tambahan tidak ada salahnya). ID pengguna dalam kisaran 100–999 dibuat dan dihapus secara dinamis ketika layanan yang membutuhkan ID pengguna khusus diinstal atau dihapus. Kisaran mulai dari 1000 dan seterusnya adalah untuk pengguna manusia atau akun lain yang dibuat oleh administrator sistem. Hal yang sama berlaku untuk kelompok.
sumber
Saya kira Anda menemukan daftar pengguna ini dengan memeriksa
/etc/passwd
? Ini benar-benar normal - 'pengguna' berfungsi untuk membawa serangkaian izin, berguna untuk mengunci tidak hanya 'pengguna aktual' tetapi juga memprogram ke area-area tertentu dari sistem Anda dan melacak apa yang mereka ubah (konsep yang sama dengan grup).Saya telah memasukkan salah satu
/etc/passwd
file Raspberry Pi saya di bawah ini untuk referensi Anda; Anda akan melihat penggunantop
di bagian bawah file ini, dibuat oleh programntop
(pemantauan jaringan). Demikian pulasshd
,gnats
pelaporan bug , dll.sumber
dpkg --get-selections | grep -v deinstall
dan membandingkannya dengan daftar file pengguna / etc / passwd Anda jika Anda mau. Adapun pertanyaan Anda: "... bagaimana program ini dijalankan dengan UID diff", Anda dapat mencoba ini sendiri. Tulis skrip bash acaktest_file
yang berisi sesuatu yang tidak berbahaya (echo "Test"
). Kemudiansudo chmod 755 test_file
(jadi itu dapat dibaca dan dieksekusi oleh siapa saja dan dapat dibaca, dapat ditulis dan dieksekusi oleh pemilik) kemudiansudo chown nobody
yang akan menugaskannya kepada penggunanobody
. Kemudian jalankan. 'Program'test_file
hanya berjalan dengan UIDnobody
.nobody
UID, tetapi berlari dengan UID Anda; Anda harus menjadikannya file SUID untuk melakukan itu, tetapi bit SUID dijatuhkan jika file dijalankan dengan penerjemah.dpkg
bitnya masih berguna (mudah-mudahan) tolong abaikan bagian tentang menjalankannya sendiri! Baik pergi dengan SUID atau masuk sebagai pengguna yang berbeda agar masuk akalDalam kasus yang Anda sebutkan, mereka dibuat pada instalasi sistem. Akun pengguna ini adalah konvensional, beberapa berasal dari dekade. Mereka juga standar. Linux Standard Base membaginya menjadi:
root
,bin
, dandaemon
; danadm
,lp
,sync
,shutdown
,halt
,mail
,news
,uucp
,operator
,man
, dannobody
Account pengguna lain yang disebutkan di sini -
pulse
,avahi
,colord
, danDebian-exim
(untuk memilih salah satu dari file password py4on ini) - membawa kita ke pertanyaan berikutnya.Akun pengguna non-standar dibuat, dan dihancurkan, oleh "skrip pengelola" untuk berbagai paket, karena paket-paket itu diinstal dan dibersihkan. Akun pengguna akan dibuat oleh
postinst
skrip pengelola yang disebut paket , yang berjalangetent
untuk melihat apakah akun pengguna sudah ada, danuseradd
jika tidak. Secara teori itu akan dihapus olehpostrm
skrip pengelola yang disebut paket , berjalanuserdel
.Dalam praktiknya, akun pengguna untuk paket tidak dihapus. Wiki Fedora (qv) menjelaskan bahwa ini akan penuh dengan kesulitan. Lihat Bug Debian # 646175 untuk contoh pemikiran ini dalam tindakan, di mana diputuskan untuk tidak menghapus
rabbitmq
akun pengguna ketika paket dibersihkan, untuk menyelesaikan masalah dengan demon yang terus berjalan di bawah perlindungan akun itu.Di bawah Unix dan Linux, proses yang berjalan di bawah pengawasan superuser dapat mengubah akun penggunanya menjadi sesuatu yang lain dan terus menjalankan program yang sama, tetapi kebalikannya tidak diizinkan. (Seseorang harus menggunakan mekanisme set-UID.)
Sistem manajemen demon berjalan sebagai superuser. Data konfigurasinya menentukan bahwa demon tertentu dijalankan di bawah naungan akun pengguna tertentu:
rc
skrip di/etc/init.d
menggunakan alat bantu sepertistart-stop-daemon
dan--chuid
opsinya.run
panggilan naskahsetuidgid
,s6-setuidgid
,chpst
, ataurunuid
dengan nama akun pengguna. Ada contoh ini di /unix//a/179798/5132 yang mengaturnagios
akun pengguna.setuid
stanza dalam file pekerjaan, yang menentukan akun pengguna. Ini tidak terlalu berbutir halus, dan kadang-kadang orang ingin apa yang dijelaskan di /superuser//a/723333/38062 .User=
pengaturan dalam file unit layanan, yang menentukan akun pengguna.Ketika sistem manajemen demon memunculkan proses menjadi demon, mekanisme ini menjatuhkan hak pengguna super sehingga proses demon terus berjalan di bawah naungan akun pengguna yang tidak memiliki hak pribadi.
Ada penjelasan yang cukup panjang mengapa manajemen demon yang baik dilakukan dengan cara ini. Tetapi Anda tidak bertanya mengapa; hanya kapan, bagaimana, dan dari mana. ☺ Précis yang sangat singkat, oleh karena itu:
Sistem operasi Unix dan Linux melindungi proses yang berjalan di bawah naungan akun pengguna yang berbeda satu sama lain. Secara historis, jika seseorang dapat mengambil alih demon yang berlari sebagai superuser, seseorang dapat melakukan apa saja yang dia sukai. Di sisi lain, demon yang berjalan di bawah naungan akun yang tidak memiliki hak pribadi hanya dapat mengakses file, direktori, perangkat, dan proses yang dapat dilakukan oleh akun yang tidak memiliki hak tersebut. Sebuah sistem program demon yang tidak saling dipercaya semua berjalan di bawah naungan akun pengguna yang berbeda dan tidak dapat mengakses / mengontrol file / direktori / proses / perangkat satu sama lain (internal, tepercaya), sehingga jauh lebih sulit untuk di-crack.
Bacaan lebih lanjut
sumber
Di Linux ketika kami memasang layanan, ia membuat pengguna dengan nama layanannya atau mirip dengan itu sehingga tidak dapat mengakses file orang lain.
sumber