Perbedaan antara akun 'Sistem Lokal' dan akun 'Layanan Jaringan'?

386

Saya telah menulis layanan Windows yang memunculkan proses terpisah. Proses ini menciptakan objek COM. Jika layanan berjalan di bawah akun 'Sistem Lokal' semuanya bekerja dengan baik, tetapi jika layanan berjalan di bawah akun 'Layanan Jaringan', proses eksternal dimulai tetapi gagal untuk membuat objek COM. Kesalahan yang dikembalikan dari pembuatan objek COM bukanlah kesalahan COM standar (saya pikir itu khusus untuk objek COM yang sedang dibuat).

Jadi, bagaimana saya menentukan perbedaan kedua akun, 'Sistem Lokal' dan 'Layanan Jaringan'? Akun bawaan ini tampak sangat misterius dan tampaknya tidak ada yang tahu banyak tentang mereka.

jmatthias
sumber

Jawaban:

701

Karena ada begitu banyak kebingungan tentang fungsionalitas akun layanan standar, saya akan mencoba memberikan lari cepat ke bawah.

Pertama akun aktual:

  • Akun LocalService (lebih disukai)

    Akun layanan terbatas yang sangat mirip dengan Layanan Jaringan dan dimaksudkan untuk menjalankan layanan standar istimewa. Namun, tidak seperti Layanan Jaringan yang mengakses jaringan sebagai pengguna Anonim .

    • Nama: NT AUTHORITY\LocalService
    • akun tidak memiliki kata sandi (informasi kata sandi yang Anda berikan diabaikan)
    • HKCU mewakili akun pengguna LocalService
    • memiliki hak minimal di komputer lokal
    • menyajikan kredensial anonim di jaringan
    • SID : S-1-5-19
    • memiliki profil sendiri di bawah kunci registri HKEY_USERS ( HKEY_USERS\S-1-5-19)

     

  • Akun NetworkService

    Akun layanan terbatas yang dimaksudkan untuk menjalankan layanan istimewa standar. Akun ini jauh lebih terbatas daripada Sistem Lokal (atau bahkan Administrator) tetapi masih memiliki hak untuk mengakses jaringan sebagai mesin (lihat peringatan di atas).

    • NT AUTHORITY\NetworkService
    • akun tidak memiliki kata sandi (informasi kata sandi yang Anda berikan diabaikan)
    • HKCU mewakili akun pengguna NetworkService
    • memiliki hak minimal di komputer lokal
    • menyajikan kredensial komputer (mis. MANGO$) ke server jarak jauh
    • SID : S-1-5-20
    • memiliki profil sendiri di bawah kunci registri HKEY_USERS ( HKEY_USERS\S-1-5-20)
    • Jika mencoba menjadwalkan tugas dengan menggunakannya, masuk NETWORK SERVICEke dialog Pilih Pengguna atau Grup

     

  • Akun LocalSystem (berbahaya, jangan gunakan!)

    Akun yang sepenuhnya tepercaya, lebih dari akun administrator. Tidak ada pada satu kotak yang tidak dapat dilakukan akun ini, dan memiliki hak untuk mengakses jaringan sebagai mesin (ini membutuhkan Direktori Aktif dan memberikan izin akun mesin untuk sesuatu)

    • Nama: .\LocalSystem(bisa juga menggunakan LocalSystematau ComputerName\LocalSystem)
    • akun tidak memiliki kata sandi (informasi kata sandi yang Anda berikan diabaikan)
    • SID : S-1-5-18
    • tidak memiliki profil sendiri ( HKCUmewakili pengguna default )
    • memiliki hak istimewa yang luas di komputer lokal
    • menyajikan kredensial komputer (mis. MANGO$) ke server jarak jauh

     

Di atas ketika berbicara tentang mengakses jaringan, ini semata-mata mengacu pada SPNEGO (Negosiasi), NTLM dan Kerberos dan bukan ke mekanisme otentikasi lainnya. Misalnya, pemrosesan berjalan karena LocalServicemasih dapat mengakses internet.

Masalah umum dengan menjalankan sebagai standar di luar kotak akun adalah bahwa jika Anda memodifikasi salah satu izin default, Anda memperluas serangkaian hal-hal yang semuanya berjalan seperti yang dapat dilakukan oleh akun itu. Jadi, jika Anda memberikan DBO ke basis data, layanan Anda tidak hanya dapat berjalan sebagai Layanan Lokal atau Layanan Jaringan yang mengakses basis data itu, tetapi segala sesuatu yang lain berjalan sebagaimana akun-akun itu juga dapat. Jika setiap pengembang melakukan ini, komputer akan memiliki akun layanan yang memiliki izin untuk melakukan apa saja secara praktis (lebih khusus superset dari semua hak istimewa tambahan yang berbeda yang diberikan ke akun itu).

Itu selalu lebih disukai dari perspektif keamanan untuk berjalan sebagai akun layanan Anda sendiri yang memiliki izin yang Anda butuhkan untuk melakukan apa yang dilakukan layanan Anda dan tidak ada yang lain. Namun, biaya dari pendekatan ini adalah menyiapkan akun layanan Anda, dan mengelola kata sandi. Ini adalah tindakan penyeimbang yang harus dikelola oleh setiap aplikasi.

Dalam kasus khusus Anda, masalah yang mungkin Anda lihat adalah bahwa aktivasi DCOM atau COM + terbatas pada serangkaian akun tertentu. Di Windows XP SP2, Windows Server 2003, dan di atas izin Aktivasi dibatasi secara signifikan. Anda harus menggunakan snapin Layanan Komponen MMC untuk memeriksa objek COM spesifik Anda dan melihat izin aktivasi. Jika Anda tidak mengakses apa pun di jaringan sebagai akun mesin, Anda harus secara serius mempertimbangkan untuk menggunakan Layanan Lokal (bukan Sistem Lokal yang pada dasarnya adalah sistem operasi).


Di Windows Server 2003 Anda tidak dapat menjalankan tugas yang dijadwalkan sebagai

  • NT_AUTHORITY\LocalService (alias akun Layanan Lokal), atau
  • NT AUTHORITY\NetworkService (alias akun Layanan Jaringan).

Kemampuan itu hanya ditambahkan dengan Penjadwal Tugas 2.0 , yang hanya ada di Windows Vista / Windows Server 2008 dan yang lebih baru.

Layanan berjalan saat NetworkServicemenyajikan kredensial mesin di jaringan. Ini berarti bahwa jika komputer Anda dipanggil mango, itu akan hadir sebagai akun mesin MANGO$ :

masukkan deskripsi gambar di sini

Peter Oehlert
sumber
7
Saya berpikir bahwa Akun Layanan Terkelola menghapus beberapa kesulitan dalam mengatur akun dan mengelola kata sandi (atau lebih tepatnya meneruskannya ke admin atau delegasi domain.)
Carl G
1
Hai, terima kasih atas penjelasannya. Saya punya satu pertanyaan - menggunakan akun sistem / layanan jaringan lokal apakah mungkin untuk menambah / menghapus entri ke kontainer di direktori aktif (asalkan kontainer di direktori aktif telah memberikan izin penuh ke komputer yang menjalankan layanan windows ini). Harap dicatat bahwa semuanya berfungsi, ketika saya menjalankan layanan sebagai salah satu pengguna domain, tetapi tidak sebagai layanan sistem / jaringan lokal (untuk detail stackoverflow.com/questions/20943436/... ) Salam
Dreamer
1
Ya, seharusnya begitu. Saya akan menjawab pertanyaan Anda secara langsung karena pertanyaan ini lebih abstrak dan itu adalah implementasi khusus.
Peter Oehlert
7
Perhatikan bahwa "anonim" pengguna tidak hanya, bukan anggota "pengguna yang diautentikasi", itu bukan anggota "semua orang" di Windows. Pada jaringan Windows, 'anonim' hanya memiliki akses ke sumber daya yang secara eksplisit diberikan kepada 'anonim' - secara default, tidak ada.
david
1
@HakamFostok Saya tidak punya banyak referensi. Jika saya ingat dengan benar, Dan Brown membahasnya dalam bukunya Programming Windows Security. Ada banyak bantuan di jendela dan dokumen MSDN tapi saya tidak punya referensi khusus. Buku Jeff Richter tentang pemrograman windows, serta Inside Windows (3rd atau 4th Ed) karya Soloman & Russinovich juga memiliki beberapa.
Peter Oehlert