Keamanan Layanan dan Hak Akses
Model keamanan Windows memungkinkan Anda mengontrol akses ke manajer kontrol layanan (SCM) dan objek layanan. Bagian berikut ini menyediakan informasi terperinci:
Hak Akses untuk Manajer Kontrol Layanan
Berikut ini adalah hak akses khusus untuk SCM.
Akses ke kanan | Deskripsi |
---|---|
SC_MANAGER_ALL_ACCESS (0xF003F) | Termasuk STANDARD_RIGHTS_REQUIRED, selain semua hak akses dalam tabel ini. |
SC_MANAGER_CREATE_SERVICE (0x0002) | Diperlukan untuk memanggil fungsi CreateService untuk membuat objek layanan dan menambahkannya ke database. |
SC_MANAGER_CONNECT (0x0001) | Diperlukan untuk menyambungkan ke manajer kontrol layanan. |
SC_MANAGER_ENUMERATE_SERVICE (0x0004) | Diperlukan untuk memanggil fungsi EnumServicesStatus atau EnumServicesStatusEx untuk mencantumkan layanan yang ada di database. Diperlukan untuk memanggil fungsi NotifyServiceStatusChange untuk menerima pemberitahuan saat layanan apa pun dibuat atau dihapus. |
SC_MANAGER_LOCK (0x0008) | Diperlukan untuk memanggil fungsi LockServiceDatabase untuk memperoleh kunci pada database. |
SC_MANAGER_MODIFY_BOOT_CONFIG (0x0020) | Diperlukan untuk memanggil fungsi NotifyBootConfigStatus . |
SC_MANAGER_QUERY_LOCK_STATUS (0x0010) | Diperlukan untuk memanggil fungsi QueryServiceLockStatus untuk mengambil informasi status kunci untuk database. |
Berikut ini adalah hak akses generik untuk SCM.
Akses ke kanan | Deskripsi |
---|---|
GENERIC_READ |
SC_MANAGER_ENUMERATE_SERVICE SC_MANAGER_QUERY_LOCK_STATUS |
GENERIC_WRITE |
SC_MANAGER_CREATE_SERVICE SC_MANAGER_MODIFY_BOOT_CONFIG |
GENERIC_EXECUTE |
SC_MANAGER_CONNECT SC_MANAGER_LOCK |
GENERIC_ALL |
|
Proses dengan hak akses yang benar dapat membuka handel ke SCM yang dapat digunakan dalam fungsi OpenService, EnumServicesStatusEx, dan QueryServiceLockStatus . Hanya proses dengan hak istimewa Administrator yang dapat membuka handel ke SCM yang dapat digunakan oleh fungsi CreateService dan LockServiceDatabase .
Sistem membuat deskriptor keamanan untuk SCM. Untuk mendapatkan atau mengatur deskriptor keamanan untuk SCM, gunakan fungsi QueryServiceObjectSecurity dan SetServiceObjectSecurity dengan handel ke objek SCManager.
Windows Server 2003 dan Windows XP: Tidak seperti kebanyakan objek yang dapat diamankan lainnya, deskriptor keamanan untuk SCM tidak dapat dimodifikasi. Perilaku ini telah berubah pada Windows Server 2003 dengan Paket Layanan 1 (SP1).
Hak akses berikut diberikan.
Akun | Hak akses |
---|---|
Pengguna terautentikasi jarak jauh |
|
Pengguna terautentikasi lokal (termasuk LocalService dan NetworkService) |
SC_MANAGER_ENUMERATE_SERVICE SC_MANAGER_QUERY_LOCK_STATUS STANDARD_RIGHTS_READ |
LocalSystem |
SC_MANAGER_ENUMERATE_SERVICE SC_MANAGER_MODIFY_BOOT_CONFIG SC_MANAGER_QUERY_LOCK_STATUS STANDARD_RIGHTS_READ |
Administrator |
|
Perhatikan bahwa pengguna jarak jauh yang diautentikasi melalui jaringan tetapi tidak masuk secara interaktif dapat terhubung ke SCM tetapi tidak melakukan operasi yang memerlukan hak akses lainnya. Untuk melakukan operasi ini, pengguna harus masuk secara interaktif atau layanan harus menggunakan salah satu akun layanan.
Windows Server 2003 dan Windows XP: Pengguna terautentikasi jarak jauh diberikan hak akses SC_MANAGER_CONNECT, SC_MANAGER_ENUMERATE_SERVICE, SC_MANAGER_QUERY_LOCK_STATUS, dan STANDARD_RIGHTS_READ . Hak akses ini dibatasi seperti yang dijelaskan dalam tabel sebelumnya per Windows Server 2003 dengan SP1
Saat proses menggunakan fungsi OpenSCManager untuk membuka handel ke database layanan yang diinstal, proses dapat meminta hak akses. Sistem melakukan pemeriksaan keamanan terhadap deskriptor keamanan untuk SCM sebelum memberikan hak akses yang diminta.
Hak Akses untuk Layanan
Berikut ini adalah hak akses khusus untuk layanan.
Akses ke kanan | Deskripsi |
---|---|
SERVICE_ALL_ACCESS (0xF01FF) | Termasuk STANDARD_RIGHTS_REQUIRED selain semua hak akses dalam tabel ini. |
SERVICE_CHANGE_CONFIG (0x0002) | Diperlukan untuk memanggil fungsi ChangeServiceConfig atau ChangeServiceConfig2 untuk mengubah konfigurasi layanan. Karena ini memberi pemanggil hak untuk mengubah file yang dapat dieksekusi yang dijalankan sistem, itu harus diberikan hanya kepada administrator. |
SERVICE_ENUMERATE_DEPENDENTS (0x0008) | Diperlukan untuk memanggil fungsi EnumDependentServices untuk menghitung semua layanan tergantung pada layanan. |
SERVICE_INTERROGATE (0x0080) | Diperlukan untuk memanggil fungsi ControlService untuk meminta layanan untuk segera melaporkan statusnya. |
SERVICE_PAUSE_CONTINUE (0x0040) | Diperlukan untuk memanggil fungsi ControlService untuk menjeda atau melanjutkan layanan. |
SERVICE_QUERY_CONFIG (0x0001) | Diperlukan untuk memanggil fungsi QueryServiceConfig dan QueryServiceConfig2 untuk mengkueri konfigurasi layanan. |
SERVICE_QUERY_STATUS (0x0004) | Diperlukan untuk memanggil fungsi QueryServiceStatus atau QueryServiceStatusEx untuk bertanya kepada manajer kontrol layanan tentang status layanan. Diperlukan untuk memanggil fungsi NotifyServiceStatusChange untuk menerima pemberitahuan saat layanan berubah status. |
SERVICE_START (0x0010) | Diperlukan untuk memanggil fungsi StartService untuk memulai layanan. |
SERVICE_STOP (0x0020) | Diperlukan untuk memanggil fungsi ControlService untuk menghentikan layanan. |
SERVICE_USER_DEFINED_CONTROL(0x0100) | Diperlukan untuk memanggil fungsi ControlService untuk menentukan kode kontrol yang ditentukan pengguna. |
Berikut ini adalah hak akses standar untuk layanan.
Akses ke kanan | Deskripsi |
---|---|
ACCESS_SYSTEM_SECURITY | Diperlukan untuk memanggil fungsi QueryServiceObjectSecurity atau SetServiceObjectSecurity untuk mengakses SACL. Cara yang tepat untuk mendapatkan akses ini adalah dengan mengaktifkan hak istimewaSE_SECURITY_NAME dalam token akses penelepon saat ini, buka handel untuk akses ACCESS_SYSTEM_SECURITY, lalu nonaktifkan hak istimewa. |
DELETE (0x10000) | Diperlukan untuk memanggil fungsi DeleteService untuk menghapus layanan. |
READ_CONTROL (0x20000) | Diperlukan untuk memanggil fungsi QueryServiceObjectSecurity untuk mengkueri pendeskripsi keamanan objek layanan. |
WRITE_DAC (0x40000) | Diperlukan untuk memanggil fungsi SetServiceObjectSecurity untuk memodifikasi anggota Dacl dari deskriptor keamanan objek layanan. |
WRITE_OWNER (0x80000) | Diperlukan untuk memanggil fungsi SetServiceObjectSecurity untuk memodifikasi anggota Pemilik dan Grup dari deskriptor keamanan objek layanan. |
Berikut ini adalah hak akses generik untuk layanan.
Akses ke kanan | Deskripsi |
---|---|
GENERIC_READ |
SERVICE_QUERY_CONFIG SERVICE_QUERY_STATUS SERVICE_INTERROGATE SERVICE_ENUMERATE_DEPENDENTS |
GENERIC_WRITE |
SERVICE_CHANGE_CONFIG |
GENERIC_EXECUTE |
SERVICE_START SERVICE_STOP SERVICE_PAUSE_CONTINUE SERVICE_USER_DEFINED_CONTROL |
SCM membuat deskriptor keamanan objek layanan saat layanan diinstal oleh fungsi CreateService . Pendeskripsi keamanan default objek layanan memberikan akses berikut.
Akun | Hak akses |
---|---|
Pengguna terautentikasi jarak jauh | Tidak diberikan secara default. Windows Server 2003 dengan SP1: SERVICE_USER_DEFINED_CONTROL Windows Server 2003 dan Windows XP: Hak akses untuk pengguna terautentikasi jarak jauh sama dengan untuk pengguna terautentikasi lokal. |
Pengguna terautentikasi lokal (termasuk LocalService dan NetworkService) |
SERVICE_ENUMERATE_DEPENDENTS SERVICE_INTERROGATE SERVICE_QUERY_CONFIG SERVICE_QUERY_STATUS SERVICE_USER_DEFINED_CONTROL |
LocalSystem |
SERVICE_ENUMERATE_DEPENDENTS SERVICE_INTERROGATE SERVICE_PAUSE_CONTINUE SERVICE_QUERY_CONFIG SERVICE_QUERY_STATUS SERVICE_START SERVICE_STOP SERVICE_USER_DEFINED_CONTROL |
Administrator |
READ_CONTROL SERVICE_ALL_ACCESS WRITE_DAC WRITE_OWNER |
Untuk melakukan operasi apa pun, pengguna harus masuk secara interaktif atau layanan harus menggunakan salah satu akun layanan.
Untuk mendapatkan atau mengatur deskriptor keamanan untuk objek layanan, gunakan fungsi QueryServiceObjectSecurity dan SetServiceObjectSecurity . Untuk informasi selengkapnya, lihat Memodifikasi DACL untuk Layanan.
Ketika proses menggunakan fungsi OpenService , sistem memeriksa hak akses yang diminta terhadap deskriptor keamanan untuk objek layanan.
Memberikan hak akses tertentu kepada pengguna yang tidak tepercaya (seperti SERVICE_CHANGE_CONFIG atau SERVICE_STOP) dapat memungkinkan mereka untuk mengganggu eksekusi layanan Anda, dan mungkin memungkinkan mereka untuk menjalankan aplikasi di bawah akun LocalSystem.
Ketika fungsi EnumServicesStatusEx dipanggil, jika pemanggil tidak memiliki hak akses SERVICE_QUERY_STATUS ke layanan, layanan dihilangkan secara diam-diam dari daftar layanan yang dikembalikan ke klien.