Saya ingin tahu perbedaan antara akun pengguna dan layanan.
Saya tahu bahwa misalnya Jenkins
diinstal ke ubuntu bukan pengguna, tetapi akun layanan .
- Apa gunanya akun layanan?
- Kapan kita membutuhkannya?
- Bagaimana saya bisa membuat akun layanan?
Saya ingin tahu perbedaan antara akun pengguna dan layanan.
Saya tahu bahwa misalnya Jenkins
diinstal ke ubuntu bukan pengguna, tetapi akun layanan .
Jawaban:
Akun pengguna digunakan oleh pengguna nyata, akun layanan digunakan oleh layanan sistem seperti server web, agen pengiriman surat, basis data dll. Berdasarkan konvensi, dan hanya dengan konvensi, akun layanan memiliki ID pengguna dalam kisaran rendah, mis. <1000 atau lebih . Kecuali untuk UID 0, akun layanan tidak memiliki hak khusus. Akun layanan dapat - dan biasanya memiliki - memiliki sumber daya spesifik, bahkan file khusus perangkat, tetapi mereka tidak memiliki hak istimewa seperti pengguna super.
Akun layanan dapat dibuat seperti akun pengguna biasa (misalnya menggunakan useradd
). Namun, akun layanan biasanya dibuat dan dikonfigurasikan oleh manajer paket saat pemasangan perangkat lunak layanan. Jadi, bahkan sebagai administrator Anda harus jarang terlibat langsung dengan pembuatan akun layanan.
Untuk alasan yang baik: Berbeda dengan akun pengguna, akun layanan sering tidak memiliki shell login yang "tepat", yaitu mereka memiliki /usr/sbin/nologin
shell login (atau, kembali di masa lalu, /bin/false
). Selain itu, akun layanan biasanya dikunci, yaitu tidak mungkin untuk masuk (untuk tradisional /etc/passwd
dan /etc/shadow
ini dapat dicapai dengan mengatur hash kata sandi untuk nilai-nilai sewenang-wenang seperti *
atau x
). Ini untuk memperkeras akun layanan terhadap penyalahgunaan ( pertahanan mendalam ).
Memiliki akun masing-masing layanan untuk setiap layanan memiliki dua tujuan utama: Ini adalah langkah pengamanan untuk mengurangi dampak jika terjadi insiden dengan satu layanan ( pengkotak-kotakan ), dan menyederhanakan administrasi karena menjadi lebih mudah untuk melacak sumber daya apa yang termasuk dalam layanan yang mana . Lihat ini atau ini jawaban pada pertanyaan terkait untuk lebih jelasnya.
Awalnya, pengguna dimaksudkan untuk berkorespondensi dengan manusia yang menggunakan sistem, karenanya namanya. Setiap proses berjalan sebagai pengguna tertentu, dan setiap file dimiliki oleh pengguna tertentu. Pengguna khusus, yang disebut root, digunakan untuk hal-hal yang bukan milik pengguna manusia tertentu, yaitu sistem operasi itu sendiri. Karena root berhubungan dengan sistem operasi itu sendiri, root memiliki semua hak istimewa.
Segera orang menemukan bahwa itu nyaman untuk membuat banyak pengguna sistem, tanpa hak istimewa yang luas. Ini memungkinkan isolasi berbagai layanan yang berjalan pada mesin, sehingga mereka tidak menginjak jari kaki satu sama lain. Akun layanan (atau "akun sistem", kedua istilah ini adalah sinonim) adalah yang sesuai dengan layanan yang berjalan pada sistem, bukan kepada seseorang yang menggunakan sistem. Anda biasanya memiliki akun layanan untuk setiap tugas yang berjalan pada sistem yang memiliki serangkaian hak istimewa sendiri (misalnya file sendiri, port jaringan sendiri, dll.).
Tidak ada definisi formal dari akun manusia vs sistem / layanan. Kernel tidak peduli (selain memberikan banyak hak istimewa kepada pengguna dengan UID 0). Sebagian besar perintah administrasi juga tidak peduli. Beberapa perbedaan tipikal adalah:
/bin/sh
atau /bin/bash
atau /bin/csh
. Beberapa pengguna sistem memiliki shell (hampir selalu /bin/sh
), yang lain tidak, tergantung pada bagaimana mereka dimaksudkan untuk digunakan (misalnya su foo
membutuhkan foo
untuk memiliki shell)./etc/passwd
tetapi di beberapa file lain seperti /etc/shadow
./home
(atau beberapa lokasi spesifik situs), sedangkan direktori home pengguna sistem biasanya tidak di bawah/home
dan mungkin tidak ada (tetapi ada pengecualian).Di situs tempat akun dibagikan di beberapa mesin, biasanya ada server pusat yang berisi daftar pengguna, dapat diakses melalui NIS atau LDAP . The passwd
entri dalam /etc/nsswitch.conf
menentukan di mana untuk menemukan informasi pengguna. Adalah umum untuk memiliki pengguna sistem di pengguna lokal /etc/passwd
dan nyata dari basis data jaringan, tetapi kadang-kadang ada pengguna sistem dalam basis data jaringan (untuk menegakkan UID yang konsisten, yang memfasilitasi replikasi server dan data), dan kadang-kadang ada pengguna manusia di file lokal (untuk membiarkan mereka masuk bahkan ketika jaringan disembunyikan).
Akun yang dapat diakses manusia yang menyamar sebagai pengguna sistem biasanya tidak memiliki nama asli, tetapi memiliki shell login, dan kumpulan kata sandi atau kunci SSH, sementara memiliki ID pengguna dalam rentang sistem. Bahkan, itu akan menjadi penyamaran yang lebih baik untuk menggunakan akun sistem aktual yang penghapusannya akan menyebabkan beberapa layanan berhenti bekerja. Tetapi Anda tidak dapat memiliki aturan keras dan cepat untuk mendeteksi potensi serangan: menurut definisi, penyerang tidak mengikuti aturan.
Akun layanan dan akun manusia dikelola oleh perintah yang sama dan dicatat dalam file yang sama. Perintah pembuatan akun mungkin memiliki opsi untuk menetapkan default yang wajar untuk pengguna layanan manusia vs, misalnya untuk memilih ID pengguna dalam kisaran yang tepat, dan untuk meminta kata sandi untuk manusia dan menonaktifkan otentikasi kata sandi untuk suatu layanan. Misalnya, adduser
vs adduser --system
atau useradd
vs useradd -r
di Linux.
init
, systemd
atau serupa, yang dijalankan sebagai root, dengan cepat menurunkan versi ke akun layanan untuk membatasi risiko. Bergantung pada OS yang digunakan, akun aplikasi mungkin diberikan lebih banyak hak istimewa daripada akun biasa, misalnya hak untuk mengikat ke port TCP istimewa, atau sebaliknya memiliki hak istimewa mereka berkurang dibandingkan dengan pengguna biasa, misalnya menolak proses layanan untuk hubungi fork
/ exec
. Dalam kasus seperti itu, tidak perlu untuk menurunkan layanan ke akun layanan, mereka dapat memulai dengan itu./bin/false
) Dan itu tidak akan dapat digunakan oleh pengguna biasa, yaitu tidak akan ada cara untuk login secara lokal atau jarak jauh (mis. melalui ssh
) menggunakan nama akun. Seperti kebanyakan batasan, menggunakan akun root atau sudo
memungkinkan untuk mengatasinya.Akun layanan mungkin tidak memiliki kemampuan untuk menggunakan shell misalnya. Ini digunakan untuk menjalankan layanan (daemon) dengan cakupan dan hak istimewa terbatas. Pendapat saya adalah Anda dapat membuatnya sebagai pengguna biasa, hanya berhati-hati dengan hak dan keanggotaan grup. Namun, sebagian besar waktu Anda tidak melakukannya karena program secara otomatis membuatnya selama instalasi. Lihatlah/etc/passwd
root:x:0:0:root:/root:/bin/bash
0 adalah UID, ini mencirikan hierarki akun di ruang pengguna, root ada di atas semua orang, lalu Anda memiliki keanggotaan grup :root
, direktori home, /root
akhirnya shell yang digunakan oleh akun /bin/bash
untuk 'masuk' sistem.
Anda dapat menggunakan /usr/sbin/nologin
untuk akun yang tidak Anda inginkan hak masuknya.