Jamf
Force-install the SURF browser extension on managed macOS devices using Jamf Pro configuration profiles. Chrome, Edge and Firefox are each covered.
Before you start
| Requirement | Detail |
|---|---|
| Jamf access | Administrator on the Jamf Pro console with rights to create and scope configuration profiles |
| Extension ID | The Chrome Web Store ID for the SURF extension. Replace the example ID below if your tenant uses a dedicated extension. |
Google Chrome
- In the Jamf Pro console, go to Computers β Configuration Profiles β New.
- Under General, name the profile, for example
Force Chrome Extension Install. - Add Custom Settings for Chrome: choose External Applications, and set the source to Custom Schema.
- In the Preference Domain field, enter
com.google.Chrome - Add the following as the custom schema:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>ExtensionInstallForcelist</key>
<array>
<string>dpmjncncaehmgjeficalpmlfaenmbeca;https://clients2.google.com/service/update2/crx</string>
</array>
</dict>
</plist>- Under Scope, assign the profile to the groups or computers that need the extension.
- Click Save. The extension installs in Chrome without user interaction.
Microsoft Edge
Edge supports ExtensionInstallForcelist in the same way as Chrome. Only the preference domain changes.
- Go to Computers β Configuration Profiles β New and name the profile, for example
Force Edge Extension Install. - Add Custom Settings: External Applications, source Custom Schema.
- In Preference Domain, enter
com.microsoft.Edge - Use the same plist as the Chrome section above.
- Scope the profile to the target devices and click Save.
Firefox
Firefox uses a different policy structure and installs from a signed .xpi rather than a Web Store ID.
Using a configuration profile
- Go to Computers β Configuration Profiles β New and name the profile, for example
Force Install Firefox Surf Security Extension. - Add Custom Settings: External Applications, source Custom Schema.
- In Preference Domain, enter
org.mozilla.firefox - Add the following schema:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>policies</key>
<dict>
<key>Extensions</key>
<dict>
<key>Install</key>
<array>
<string>https://addons.mozilla.org/firefox/downloads/file/4323804/surf_security-1.1.95.xpi</string>
</array>
<key>Locked</key>
<array>
<string>surf_security@extensions.mozilla.org</string>
</array>
</dict>
</dict>
</dict>
</plist>- Scope the profile and click Save. The extension ID is implied by the
.xpibeing installed.
Alternative: deploy policies.json
For environments that prefer a file drop over a profile.
- Download
policies.jsonfromhttps://packagesharing.s3.eu-west-2.amazonaws.com/policies.json - The file contains:
{
"policies": {
"Extensions": {
"Install": [
"https://addons.mozilla.org/firefox/downloads/file/4323804/surf_security-1.1.95.xpi"
],
"Locked": [
"edf765f10958956e44c1bf23065d48f6911de045@surf.security"
]
}
}
}- Place it at
Applications/Firefox.app/Contents/Resources/distribution/policies.json - If the
distributiondirectory does not exist, create it. Firefox reads policies from that folder by default. - Restart Firefox. The extension installs and cannot be removed by the user.
Troubleshooting
| Symptom | Check |
|---|---|
| Extension does not appear in Chrome or Edge | Preference domain mistyped, or the extension ID does not match the one in the Web Store |
| Profile applied but nothing installs | The profile is not scoped to the device. Check the Scope tab. |
| Firefox ignores the policy | policies.json is in the wrong location, or the distribution directory was not created |
| Extension installs but users can disable it | For Firefox, the Locked array is missing or holds the wrong extension identifier |
For anything not covered here, contact the SURF support team.
