Apa perbedaan antara akun pengguna dan layanan?

16

Saya ingin tahu perbedaan antara akun pengguna dan layanan.

Saya tahu bahwa misalnya Jenkinsdiinstal ke ubuntu bukan pengguna, tetapi akun layanan .

  1. Apa gunanya akun layanan?
  2. Kapan kita membutuhkannya?
  3. Bagaimana saya bisa membuat akun layanan?
Rudziankoŭ
sumber

Jawaban:

18

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/nologinshell login (atau, kembali di masa lalu, /bin/false). Selain itu, akun layanan biasanya dikunci, yaitu tidak mungkin untuk masuk (untuk tradisional /etc/passwddan /etc/shadowini 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.

countermode
sumber
4

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:

  • Seorang pengguna manusia memiliki nama asli seperti "John Doe", sedangkan pengguna sistem memiliki nama deskriptif seperti "daemon Nasal" atau tidak ada sama sekali.
  • Seorang pengguna manusia memiliki shell login nyata (misalnya /bin/shatau /bin/bashatau /bin/csh. Beberapa pengguna sistem memiliki shell (hampir selalu /bin/sh), yang lain tidak, tergantung pada bagaimana mereka dimaksudkan untuk digunakan (misalnya su foomembutuhkan foountuk memiliki shell).
  • Pengguna manusia sering memiliki kata sandi - tetapi itu tidak selalu demikian, misalnya pengguna jarak jauh hanya mungkin memiliki kunci SSH. Perhatikan bahwa pada unices modern, kata sandinya tidak ada /etc/passwdtetapi di beberapa file lain seperti /etc/shadow.
  • Direktori home pengguna manusia biasanya di bawah /home(atau beberapa lokasi spesifik situs), sedangkan direktori home pengguna sistem biasanya tidak di bawah/home dan mungkin tidak ada (tetapi ada pengecualian).
  • Sebagian besar situs menetapkan rentang ID pengguna untuk pengguna sistem dan rentang terpisah untuk pengguna manusia. Pemesanan 100–65533 atau 500–65533 atau 1000–65533 adalah tipikal, dan sebagian besar distribusi diatur untuk mulai mengalokasikan ID pengguna nyata mulai 500 atau 1000.

Di situs tempat akun dibagikan di beberapa mesin, biasanya ada server pusat yang berisi daftar pengguna, dapat diakses melalui NIS atau LDAP . The passwdentri dalam /etc/nsswitch.confmenentukan di mana untuk menemukan informasi pengguna. Adalah umum untuk memiliki pengguna sistem di pengguna lokal /etc/passwddan 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, adduservs adduser --systematau useraddvs useradd -rdi Linux.

Gilles 'SO- berhenti menjadi jahat'
sumber
3
    1. akun layanan, alias akun teknis adalah akun yang dirancang hanya untuk digunakan oleh layanan / aplikasi, bukan oleh pengguna biasa.
    1. Pengembang aplikasi dan layanan menginginkan akun ini untuk membatasi hak dan hak istimewa proses terkait alih-alih menjalankan prosesnya sebagai root. Layanan sebagaimana dimulai oleh init, systemdatau 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.
    1. Anda tidak perlu tetapi hanya membuat akun tanpa kata sandi yang dapat digunakan dan dengan shell yang tidak berfungsi (mis. /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 sudomemungkinkan untuk mengatasinya.
Jlliagre
sumber
1

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, /rootakhirnya shell yang digunakan oleh akun /bin/bashuntuk 'masuk' sistem.

Anda dapat menggunakan /usr/sbin/nologinuntuk akun yang tidak Anda inginkan hak masuknya.

Kuruwan
sumber