Yönettiğiniz cihazların kurumsal politikalarınız ile uyumlu olup olmadığını kontrol etmek için çeşitli araçlar kullanıyor olabilirsiniz. Microsoft, Intune’un içinde dahili olarak Compliance Policy özelliğini sunuyor. Bir Compliance Policy tanımlaması ile yönettiğiniz Mac’lerin SIP’lerinin kapalı olup olmadığını, işletim sisteminin güncel olup olmadığını, Gatekeeper ayarlarının yapılmış olmasını ve hatta Filevault şifrelemesini kontrol edebilirsiniz. Bunun sonucu olarak cihazları Compliant (uyumlu) veya Non-Compliant (Uyumsuz) olarak işaretleyebilirsiniz.
Daha önce okumadıysanız Intune’da Compliance Policy kullanımını ele aldığımız Microsoft Intune’da macOS için Compliance Policy Kullanımı makalemize göz atabilirsiniz.
Intune’daki Compliance Policy seçenekleri arasından Non-Compliant olarak işaretlenen cihazlar için bazı yaptırımlar da uygulayabilmeniz mümkün. Kullanıcıyı ve IT ekibini bilgilendirmek, cihazı retire etmek vb gibi…
Ama kurumlar bu tür yaptırımlar uygulamak yerine, sadece bir cihazın Compliant olmasını kontrol ediyorlar. Ve bu bilgiyi başka kuralların kontrolü için kullanabiliyorlar. Örneğin NAC çözümleri ile ağ erişimi vermek için bir cihazın Intune ile yönetilmesini + cihazın Compliant olmasını kural setlerine dahil edebilirler. Böyle olunca da Non-Compliant cihazlarda kurumsal ağ erişiminin bulunmamasını sağlayabiliyorlar.

Cihazın Compliant olması ya da olmaması aslında sizin için yeterli olabilir. Ama yine de Compliance Policy olarak Intune’un size sunduğundan daha fazlasını kontrol etmek ve bunun için birtakım aksiyonlar almak istiyor olabilirsiniz.
Mevcut haliyle Intune’un dahili Compliance Policy‘leri şunları kontrol ediyor:
Require system integrity protection: System Integrity Protection’s açık olup olmaması
Minimum OS version: Kullanılabilecek en düşük macOS versiyonu
Maximum OS version: Kullanılabilecek en yüksek macOS versiyonu
Minimum OS build version: Kullanılabilecek en düşük macOS build versiyonu
Maximum OS build version: Kullanılabilecek en yüksek macOS build versiyonu
Require a password to unlock devices: Bir parola bulunup bulunmaması
Simple passwords: Basit parolaların kabul edilip edilmemesi
Minimum password length: Minimum parola uzunluğu
Password type: Parola türü (Alfanümerik veya sadece rakamlar)
Number of non-alphanumeric characters in password: Paroladaki Özel karakter adedi
Maximum minutes of inactivity before password is required: Cihazın kaç dakikalık inaktivite sonrasında parola sormaya başlayacağı bilgisi
Password expiration (days): Parola geçerlilik süresi
Number of previous passwords to prevent reuse: Kabul edilecek en son parola adedi
Require encryption of data storage on device: FileVault’un açık olup olmaması
Firewall: Cihaz üzerindeki Firewall’ın açık olup olmaması
Incoming connections: Cihaz üzerindeki Firewall ile gelen bağlantı taleplerinin açık olup olmaması
Stealth Mode: Cihaz üzerindeki Firewall’da gizlilik modunun açık olup olmaması
Allow apps downloaded from these locations: Gatekeeper ayarı. Yani hangi kaynaklardan uygulama yüklenebileceğine ilişkin tercihin ne olduğu

Yukarıda sayılanlar, birçok kullanım için yeterli olabilir elbette. Ancak bu listenin dışında bir kuralı da cihazın Compliant olarak işaretlemesi için kullanmak isteyebilirsiniz. Bu durumda Custom Compliance Policy kullanımı size yardımcı olacaktır. Intune’da daha önce Windows ve Linux tarafı için bulunan Custom Compliance Policy kullanımı geçtiğimiz 2026 Temmuz ayından itibaren macOS için de açıldı.
CIS veya NIST‘in kural setinde bulunan ancak Intune’un dahili Compliance Policy‘leri arasında bulunmayan her detay, Custom Compliance Policy‘nin bir parçası olabilir. SSH erişiminin açık olması, belirli bir sertifikanın cihazda bulunup bulunmadığının kontrolü, herhangi bir yazılımın, örneğin AnyDesk’in cihazda yüklü bulunup bulunmadığının kontrolü, boş disk kapasitesi… Adını siz koyun.
Custom Compliance Policy nasıl kullanılır?
Custom Compliance Policy‘leri kullanabilmek için iki bileşene ihtiyacınız bulunuyor. Bir Script ve bir JSON belgesi.
1. Discovery Script: Belirlediğiniz kurallar için yönettiğiniz cihazlardaki durumu öğrenebilmek için Discovery Script’i kullanmalısınız.
2. Compliance Rules: Cihazlarda bulunan durumu öğrendikten sonra bunu olması gereken değerler ile karşılaştırabilmek için bu kural setini de bir JSON belgesi olarak Custom Compliance Policy içine yüklemelisiniz.

Örnek bir Discovery Script‘i aşağıdan inceleyebilirsiniz. Bu .sh belgesi, cihaz üzerindeki SSH erişiminin açık olup olmadığını, Screen Sharing servisinin açık olup olmadığını, Guest Account‘un aktif edilip edilmediğini, Automatic Login seçeneğinin aktif olup olmadığını, Firewall Stealth modunun açık olup olmadığını ve cihazın kaç gün boyunca açık durumda olduğunun bilgisini çekiyor. Aşağıdaki script’i kopyalayarak siz de deneme yapabilirsiniz.
#!/bin/bash
# Settings Blog Intune macOS Custom Compliance - Discovery script 1: System hardening
# Runs as root via the Intune management agent. Must print ONE line of JSON to stdout.
# SSH (Remote Login)
if launchctl print system/com.openssh.sshd >/dev/null 2>&1; then ssh=true; else ssh=false; fi
# Screen Sharing
if launchctl print system/com.apple.screensharing >/dev/null 2>&1; then screenshare=true; else screenshare=false; fi
# Guest account
guest=$(defaults read /Library/Preferences/com.apple.loginwindow GuestEnabled 2>/dev/null)
[[ "$guest" == "1" ]] && guest=true || guest=false
# Automatic login
if defaults read /Library/Preferences/com.apple.loginwindow autoLoginUser >/dev/null 2>&1; then autologin=true; else autologin=false; fi
# Firewall stealth mode
if /usr/libexec/ApplicationFirewall/socketfilterfw --getstealthmode 2>/dev/null | grep -Eqi "is on|enabled"; then stealth=true; else stealth=false; fi
# Uptime in days (catches devices that never reboot to apply updates)
boot=$(sysctl -n kern.boottime | awk -F'[ ,]' '{print $4}')
uptime_days=$(( ( $(date +%s) - boot ) / 86400 ))
echo "{\"SSHEnabled\":$ssh,\"ScreenSharingEnabled\":$screenshare,\"GuestAccountEnabled\":$guest,\"AutoLoginEnabled\":$autologin,\"FirewallStealthMode\":$stealth,\"UptimeDays\":$uptime_days}"
Discovery Script‘inizi kullanabilmek için önce Intune’a yüklemelisiniz. Ancak bu yükleme işini de yine Compliance Policy alanındaki Scripts sekmesinden yapmanız gerekiyor. Yanlışlıkla Devices / macOS / Scripts bölümüne gitmeyin.

Discovery Script‘inizi yükledikten sonra kural setinizi içeren JSON belgenizi yüklemeniz gerekiyor. Bunu doğrudan Custom Compliance Policy düzenleme ekranından yapabilirsiniz. Yukarıdaki Discovery Script ile eşleşecek örnek bir JSON belgesini aşağıdan inceleyebilirsiniz.
{
"Rules": [
{
"SettingName": "SSHEnabled",
"Operator": "IsEquals",
"DataType": "Boolean",
"Operand": false,
"MoreInfoUrl": "https://settings.blog",
"RemediationStrings": [
{ "Language": "en_US", "Title": "Remote Login (SSH) is enabled", "Description": "Turn off Remote Login in System Settings > General > Sharing." }
]
},
{
"SettingName": "ScreenSharingEnabled",
"Operator": "IsEquals",
"DataType": "Boolean",
"Operand": false,
"MoreInfoUrl": "https://settings.blog",
"RemediationStrings": [
{ "Language": "en_US", "Title": "Screen Sharing is enabled", "Description": "Turn off Screen Sharing in System Settings > General > Sharing." }
]
},
{
"SettingName": "GuestAccountEnabled",
"Operator": "IsEquals",
"DataType": "Boolean",
"Operand": false,
"MoreInfoUrl": "https://settings.blog",
"RemediationStrings": [
{ "Language": "en_US", "Title": "Guest account is enabled", "Description": "Disable the Guest User in System Settings > Users & Groups." }
]
},
{
"SettingName": "AutoLoginEnabled",
"Operator": "IsEquals",
"DataType": "Boolean",
"Operand": false,
"MoreInfoUrl": "https://settings.blog",
"RemediationStrings": [
{ "Language": "en_US", "Title": "Automatic login is enabled", "Description": "Set automatic login to Off in System Settings > Users & Groups." }
]
},
{
"SettingName": "FirewallStealthMode",
"Operator": "IsEquals",
"DataType": "Boolean",
"Operand": true,
"MoreInfoUrl": "https://settings.blog",
"RemediationStrings": [
{ "Language": "en_US", "Title": "Firewall stealth mode is off", "Description": "Enable stealth mode in System Settings > Network > Firewall > Options." }
]
},
{
"SettingName": "UptimeDays",
"Operator": "LessEquals",
"DataType": "Int64",
"Operand": 14,
"MoreInfoUrl": "https://settings.blog",
"RemediationStrings": [
{ "Language": "en_US", "Title": "Restart required", "Description": "Your Mac has not been restarted for more than 14 days. Please restart it." }
]
}
]
}
Discovery Script ve Rules JSON belgelerinizi yükledikten sonra aşağıdaki gibi bir ekran görürsünüz. Buradan da anlayacağınız gibi JSON belgemiz SSH’ın, Ekran paylaşımının, Konuk kullanıcı erişiminin ve Auto login özelliğinin kapalı olmasını; Firewall Stealth modunun açık olmasını ve cihazın açık olma süresinin 14 günden az olmasını dikte ediyor.

Peki gönderdikten sonrası?
Custom tarafı da içeren genel Compliance Policy‘yi kullanıcılarınıza Assign ettikten sonra cihazlarınızda uyumluluk dışı bir nokta bulunuyorsa cihazlar Non-Compliant olarak işaretlenecektir.
Herhangi bir cihazın kendi detay sayfasında Device Compliance başlığı altına bakacak olursanız gönderdiğiniz Compliance Policy‘nin hangi başlıklardan geçip hangi başlıklardan kaldığı bilgisini görebilirsiniz. Aşağıdaki ekran görüntüsünde kontrol edilen cihaz, Auto Login, Firewall Stealth Mode ve Full disk şifreleme başlıklarından uyumsuz olarak işaretlenmiş olarak görünüyor. Bu kriterler yerine getirildikten sonra tekrar Compliant olarak işaretlenecektir.


Bir Cevap Yazın