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
STANDARD_RIGHTS_READ
SC_MANAGER_ENUMERATE_SERVICE
SC_MANAGER_QUERY_LOCK_STATUS
GENERIC_WRITE
STANDARD_RIGHTS_WRITE
SC_MANAGER_CREATE_SERVICE
SC_MANAGER_MODIFY_BOOT_CONFIG
GENERIC_EXECUTE
STANDARD_RIGHTS_EXECUTE
SC_MANAGER_CONNECT
SC_MANAGER_LOCK
GENERIC_ALL
SC_MANAGER_ALL_ACCESS

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
SC_MANAGER_CONNECT
Pengguna terautentikasi lokal (termasuk LocalService dan NetworkService)
SC_MANAGER_CONNECT
SC_MANAGER_ENUMERATE_SERVICE
SC_MANAGER_QUERY_LOCK_STATUS
STANDARD_RIGHTS_READ
LocalSystem
SC_MANAGER_CONNECT
SC_MANAGER_ENUMERATE_SERVICE
SC_MANAGER_MODIFY_BOOT_CONFIG
SC_MANAGER_QUERY_LOCK_STATUS
STANDARD_RIGHTS_READ
Administrator
SC_MANAGER_ALL_ACCESS

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
STANDARD_RIGHTS_READ
SERVICE_QUERY_CONFIG
SERVICE_QUERY_STATUS
SERVICE_INTERROGATE
SERVICE_ENUMERATE_DEPENDENTS
GENERIC_WRITE
STANDARD_RIGHTS_WRITE
SERVICE_CHANGE_CONFIG
GENERIC_EXECUTE
STANDARD_RIGHTS_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)
READ_CONTROL
SERVICE_ENUMERATE_DEPENDENTS
SERVICE_INTERROGATE
SERVICE_QUERY_CONFIG
SERVICE_QUERY_STATUS
SERVICE_USER_DEFINED_CONTROL
LocalSystem
READ_CONTROL
SERVICE_ENUMERATE_DEPENDENTS
SERVICE_INTERROGATE
SERVICE_PAUSE_CONTINUE
SERVICE_QUERY_CONFIG
SERVICE_QUERY_STATUS
SERVICE_START
SERVICE_STOP
SERVICE_USER_DEFINED_CONTROL
Administrator
DELETE
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.