Mengapa ada banyak akun? Saya satu-satunya pengguna

13

Saya menjalankan sistem desktop Ubuntu 12.04. Sejauh ini saya hanya menginstal beberapa program (saya memiliki hak sudo).

  1. 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?

  2. 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?

Jake
sumber
3
Pikirkan dengan cara lain: ketika komputer pertama kali boot Anda belum login, dan program harus berjalan sebagai seseorang . Mereka semua dapat berjalan sebagai root, tetapi itu tidak aman, karena sebagian besar dari program ini hanya bertanggung jawab untuk sebagian kecil dari operasi komputer. Setelah Anda masuk, sebagian besar program yang Anda jalankan langsung akan dijalankan seperti Anda.
dimo414
Pada akhirnya, ini adalah hack. Yang banyak digunakan, tetapi retas. Distribusi UNIX menyalahgunakan konsep "pengguna" untuk menangani model keamanan yang lama dan tidak lengkap.
Federico Poloni

Jawaban:

24

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.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
7

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/passwdfile Raspberry Pi saya di bawah ini untuk referensi Anda; Anda akan melihat pengguna ntopdi bagian bawah file ini, dibuat oleh program ntop(pemantauan jaringan). Demikian pula sshd, gnatspelaporan bug , dll.

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh
proxy:x:13:13:proxy:/bin:/bin/sh
www-data:x:33:33:www-data:/var/www:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh
list:x:38:38:Mailing List Manager:/var/list:/bin/sh
irc:x:39:39:ircd:/var/run/ircd:/bin/sh
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
libuuid:x:100:101::/var/lib/libuuid:/bin/sh
pi:x:1000:1000:,,,:/home/pi:/bin/bash
sshd:x:101:65534::/var/run/sshd:/usr/sbin/nologin
ntp:x:102:104::/home/ntp:/bin/false
statd:x:103:65534::/var/lib/nfs:/bin/false
messagebus:x:104:106::/var/run/dbus:/bin/false
usbmux:x:105:46:usbmux daemon,,,:/home/usbmux:/bin/false
lightdm:x:106:109:Light Display Manager:/var/lib/lightdm:/bin/false
smmta:x:107:110:Mail Transfer Agent,,,:/var/lib/sendmail:/bin/false
smmsp:x:108:111:Mail Submission Program,,,:/var/lib/sendmail:/bin/false
Debian-exim:x:109:113::/var/spool/exim4:/bin/false
ntop:x:110:115::/var/lib/ntop:/bin/false
toxefa
sumber
ketika saya menginstal program baru di ubuntu, apakah itu membuat pengguna baru? Jika tidak, bagaimana bisa begitu banyak program berjalan dengan UID berbeda dari saya? Maksud saya, bagaimana program ini dijalankan dengan UID diff?
Jake
Anda dapat menjalankan dpkg --get-selections | grep -v deinstalldan 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 acak test_fileyang berisi sesuatu yang tidak berbahaya ( echo "Test"). Kemudian sudo chmod 755 test_file(jadi itu dapat dibaca dan dieksekusi oleh siapa saja dan dapat dibaca, dapat ditulis dan dieksekusi oleh pemilik) kemudian sudo chown nobodyyang akan menugaskannya kepada pengguna nobody. Kemudian jalankan. 'Program' test_filehanya berjalan dengan UID nobody.
toxefa
2
@ py4on Tidak cukup ... itu berlari dari file dengan nobodyUID, tetapi berlari dengan UID Anda; Anda harus menjadikannya file SUID untuk melakukan itu, tetapi bit SUID dijatuhkan jika file dijalankan dengan penerjemah.
Bersepeda
Ok karena saya tidak dapat mengedit komentar saya di atas tetapi dpkgbitnya masih berguna (mudah-mudahan) tolong abaikan bagian tentang menjalankannya sendiri! Baik pergi dengan SUID atau masuk sebagai pengguna yang berbeda agar masuk akal
toxefa
3

Kapan para pengguna ini dibuat?

Dalam 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:

  • yang diperlukan pengguna standar account, root, bin, dan daemon; dan
  • yang opsional standar account pengguna adm, lp, sync, shutdown, halt, mail, news, uucp, operator, man, dannobody

Account pengguna lain yang disebutkan di sini - pulse, avahi, colord, dan Debian-exim(untuk memilih salah satu dari file password py4on ini) - membawa kita ke pertanyaan berikutnya.

Bagaimana ini terkait dengan program baru yang diinstal?

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 postinstskrip pengelola yang disebut paket , yang berjalan getentuntuk melihat apakah akun pengguna sudah ada, dan useraddjika tidak. Secara teori itu akan dihapus oleh postrmskrip pengelola yang disebut paket , berjalan userdel.

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 rabbitmqakun pengguna ketika paket dibersihkan, untuk menyelesaikan masalah dengan demon yang terus berjalan di bawah perlindungan akun itu.

Bagaimana program-program ini dimulai dengan UID yang berbeda?

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:

  • Dengan Sistem 5 rcskrip di /etc/init.dmenggunakan alat bantu seperti start-stop-daemondan --chuidopsinya.
  • Dengan manajer layanan daemontools keluarga, yang runpanggilan naskah setuidgid, s6-setuidgid, chpst, atau runuiddengan nama akun pengguna. Ada contoh ini di /unix//a/179798/5132 yang mengatur nagiosakun pengguna.
  • Dengan pemula ada setuidstanza 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 .
  • Dengan systemd ada 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

JdeBP
sumber
1

Di Linux ketika kami memasang layanan, ia membuat pengguna dengan nama layanannya atau mirip dengan itu sehingga tidak dapat mengakses file orang lain.

PRS
sumber
1
Ini adalah konvensi, tetapi sama sekali tidak diperlukan dan tentu saja tidak universal. Bahkan, itu benar-benar tidak yang umum lagi ...
HalosGhost
1
@HalosGhost Uh? Tidak, itu adalah konvensi yang sangat umum, masih kuat. Jawaban ini tidak lengkap tetapi sepenuhnya benar.
Gilles 'SANGAT berhenti menjadi jahat'
1
@ Gilles, saya tidak mengatakan (atau bahkan menyiratkan) bahwa itu tidak benar. Tetapi sebagian besar sudah ketinggalan zaman. Sebagian besar layanan hari ini (dengan munculnya systemd) hanyalah file layanan. Nah, itu bukan untuk mengatakan bahwa akun pengguna per layanan tidak ada lagi; pasti mereka lakukan. Tetapi, misalnya, hanya ada 24 akun di seluruh sistem saya di mana saya memiliki lebih banyak layanan.
HalosGhost
@Gilles Saya memiliki situasi yang sama dengan HalosGhost - lebih banyak layanan daripada akun. Jadi apakah itu berarti bahwa mereka semua dijalankan sebagai root?
Lonix