IT Support & Help Desk Fundamentals Module 6 – macOS and Linux client administration
macOS security: FileVault, SIP, permissions
Read FileVault, SIP, Gatekeeper and firewall status, fix camera, microphone and screen-share permissions, and see what device management can and cannot grant.
What you will learn
- Check FileVault, System Integrity Protection, Gatekeeper and firewall status from Terminal and System Settings
- Fix camera, microphone and screen recording permission problems for meeting apps
- Explain what device management can and cannot grant on a user's behalf
- Explain Lockdown Mode, Find My and Activation Lock in support terms
Before you start
What you’ll learn · Before you start
What you will learn
- Check FileVault, System Integrity Protection, Gatekeeper and firewall status from Terminal and System Settings
- Fix camera, microphone and screen recording permission problems for meeting apps
- Explain what device management can and cannot grant on a user's behalf
- Explain Lockdown Mode, Find My and Activation Lock in support terms
Before you start
On this page
Ten minutes before a client call, a user’s meeting app shows a black square where their screen should be, and the camera light stays off. Neither is a broken Mac: macOS asks the person at the Mac before any app may use the camera, the microphone or the screen, and one switch in Privacy & Security, or one reset of one decision, fixes most of these calls. The same Mac reports four protections, and reading them takes four commands.
You will read whether FileVault, System Integrity Protection, Gatekeeper and the firewall protect a Mac, follow a camera request through the privacy database, work the screen-sharing ticket layer by layer, tell what device management may grant from what only the user can, and explain Lockdown Mode, Find My and Activation Lock to a user.
Four readings say whether a Mac is protected
Four protections cover a Mac against four different losses, and each answers one command:
| Protection | What it stops | Read it, and the good answer |
|---|---|---|
| FileVault: Apple's full-disk encryption for the Mac startup disk. The login password opens the disk at start-up, and a recovery key or an institutional key can open it if that password is lost. More in “BitLocker and FileVault recovery keys” | a lost Mac’s disk being read | fdesetup status: FileVault is On. |
| System Integrity Protection: The macOS protection, SIP, that keeps critical system files read-only through kernel permissions users cannot override. It is on by default, csrutil status reports it, and some of its commands work only from Recovery. | changes to critical system files | csrutil status: enabled. |
| Gatekeeper: The macOS check that runs when downloaded software first opens: it must come from an identified developer, be notarised by Apple and be unaltered, and the user confirms the first open. More in “macOS apps, Gatekeeper and software updates” | unchecked downloaded software | spctl --status: assessments enabled |
| application firewall: The firewall built into macOS, in System Settings, Network, Firewall, which blocks unwanted incoming connections to the Mac; socketfilterfw --getglobalstate reports whether it is on. | unwanted incoming connections | socketfilterfw --getglobalstate: enabled |
Apple’s deployment guide says FileVault makes a lost or stolen Mac’s contents unreadable without valid credentials.
System Integrity Protection, SIP, uses kernel permissions to keep critical system files read-only; Apple builds it on
mandatory access controls, which, unlike ordinary permissions, users cannot override. It has been on by default since
OS X 10.11, and its manual says some csrutil commands work only from Recovery. Gatekeeper checks downloaded software, as apps, Gatekeeper and updates
shows. The application firewall, in System Settings, Network, Firewall, blocks unwanted connections from other
networks; its options include Block all incoming connections, and socketfilterfw, in /usr/libexec/ApplicationFirewall/,
also reports stealth mode: A firewall option of macOS that stops the Mac answering probing requests such as ping, while it still answers authorised apps. with --getstealthmode.
The session reads three of the four on the Mac used for this lesson:
from session import run
# Three of the four protection readings, from the Mac used for this lesson: FileVault, System Integrity Protection and
# Gatekeeper. Each command only reports; none changes a setting.
run(
"""
fdesetup status
csrutil status
spctl --status
"""
) Output
$ fdesetup status FileVault is On. $ csrutil status System Integrity Protection status: enabled. $ spctl --status assessments enabled
Recorded with Python 3.14.8 on macOS 26 arm64. To run it yourself: mise exec python@3.14.8 -- python3 status_session.py
All three are on: FileVault is On, SIP is enabled, and Gatekeeper’s assessments are enabled. Where FileVault’s recovery key is kept is a ticket of its own, in BitLocker and FileVault recovery keys. A posture check turns the four readings into gaps. The program below checks two samples, written in the layout macOS prints them: a Mac with gaps, and the same Mac after the fixes:
"""The check a technician runs on a Mac's four protection readings. Two samples, written in the layout macOS prints
them (fdesetup status, csrutil status, spctl --status and socketfilterfw --getglobalstate): one Mac with gaps, and the
same Mac after the fixes. The check must find every gap in the first and none in the second."""
GOOD = {
"FileVault": lambda text: text.startswith("FileVault is On"),
"System Integrity Protection": lambda text: text.endswith("status: enabled."),
"Gatekeeper": lambda text: text == "assessments enabled",
"Application firewall": lambda text: text.startswith("Firewall is enabled"),
}
WEAK = {
"FileVault": "FileVault is Off.",
"System Integrity Protection": "System Integrity Protection status: enabled.",
"Gatekeeper": "assessments disabled",
"Application firewall": "Firewall is disabled. (State = 0)",
}
FIXED = {
"FileVault": "FileVault is On.",
"System Integrity Protection": "System Integrity Protection status: enabled.",
"Gatekeeper": "assessments enabled",
"Application firewall": "Firewall is enabled. (State = 1)",
}
def gaps(readings):
"""The protections whose reading is missing or not the good one, in a fixed order."""
return [name for name, ok in GOOD.items() if not ok(readings.get(name, "").strip())]
for label, readings in (("before", WEAK), ("after", FIXED)):
found = gaps(readings)
print(f"{label}: {len(found)} gap(s)")
for name in GOOD:
print(f" {'GAP' if name in found else 'ok '} {name}: {readings[name]}")
assert gaps(WEAK) == ["FileVault", "Gatekeeper", "Application firewall"]
assert gaps(FIXED) == []
print("the check fails on the weak sample and passes on the fixed one") Output
before: 3 gap(s) GAP FileVault: FileVault is Off. ok System Integrity Protection: System Integrity Protection status: enabled. GAP Gatekeeper: assessments disabled GAP Application firewall: Firewall is disabled. (State = 0) after: 0 gap(s) ok FileVault: FileVault is On. ok System Integrity Protection: System Integrity Protection status: enabled. ok Gatekeeper: assessments enabled ok Application firewall: Firewall is enabled. (State = 1) the check fails on the weak sample and passes on the fixed one
Recorded with Python 3.14.8 on macOS 26 arm64. To run it yourself: mise exec python@3.14.8 -- python3 posture.py
Runs on this device, in your browser. The first run downloads Python (about 13.5 MB), which is kept for the next runs.
Your run, in this browser
The weak sample has three gaps, FileVault, Gatekeeper and the firewall, and the fixed one none, so the check fails where it should and passes where it should. Run it the same way before and after a change, and the ticket records both.
A protection is never the fix
Turning off SIP, Gatekeeper, FileVault or the firewall to make an app or a tool work removes the protection for everything else on the Mac. The fix is a version of the app that works with them, or a narrow exception the organisation’s device management sets for one app.
The privacy settings decide what each app may reach
Apps reach the camera, the microphone, the screen and the user’s files only with the user’s consent. In System Settings, Privacy & Security lists each kind of access: Camera, Microphone, Screen & System Audio Recording, Files & Folders for the Desktop, Documents and Downloads folders, and Accessibility, which lets an app control the Mac. Each list shows the apps that have asked, with a switch for each. Apple adds that FaceTime, Photo Booth and other apps that come with the Mac have camera access without asking, and that a green light glows beside the camera while it is on.
The answers are kept in the Mac’s privacy database, which man tccutil describes as the store of the decisions the
user has made about whether apps may access personal data. Apple’s device management names its payload for it
com.apple.TCC, which is why technicians call the database TCC: The name technicians use for the macOS privacy database, after the com.apple.TCC payload that manages it: the store of each user's decisions about which apps may reach the camera, the microphone, the screen and personal files.. Follow one first request:
The drawing shows the whole scene; its 6 steps are listed below.
Every step as text
- The app asks. A meeting app the user installed wants the camera for the first time. Apps that come with macOS, such as FaceTime and Photo Booth, already have access; this one does not.
- No decision stored yet. macOS looks in its privacy database, which keeps the decisions the user has made about which apps may reach personal data. There is none for this app and the camera.
- The user is asked. macOS shows the request to the person at the Mac, who allows it or not. For the camera, device management cannot answer it for them: it can only deny access.
- The answer is kept. The answer goes into the privacy database, and the app appears in Privacy & Security, Camera, with its switch on or off. The user can change it there at any time.
- The camera starts. The app gets the camera, and the green light beside it glows while it is on. The light goes off when every app that can use the camera has quit.
- Asked again only after a reset. From now on macOS answers from the database without asking. tccutil reset Camera with the app's bundle ID clears that one decision, so the app asks again at its next start.
The request goes to the person at the Mac, and the answer is remembered. tccutil reset with a service and an app’s
bundle ID: The reverse-DNS name, such as com.example.notes, that identifies one app throughout macOS. It uses only letters, digits, hyphens and periods, and an app's caches, preferences file and support folder are named after it. More in “macOS essentials: Settings, Finder, accounts” clears that one decision, so the app asks again; without a bundle ID it
clears the service for every app, which is rarely what a ticket needs. Accessibility deserves the most care: Apple
warns that an app given access to control the Mac can also reach contacts, calendars and other information.
Checkpoint
Check: The four protection readings · Privacy permissions and the privacy database
A meeting app that cannot share its screen
Back to the black square. The app needs Screen & System Audio Recording, the user decides it, and a web meeting adds a second layer, because the browser and the meeting site each need their own permission. Work the layers in order:
The drawing shows the whole scene; its 6 steps are listed below.
Every step as text
- Name the layer. The user clicks Share and the others in the meeting see nothing, or an error says the app cannot record the screen. Ask which app they use: an installed app or a meeting site in a browser.
- Check the switch. In System Settings, Privacy & Security, Screen & System Audio Recording, find the app and turn its switch on; an app missing from the list is added with +. The user decides, at their own Mac.
- A setting someone else owns. A standard user cannot change the switch without an administrator, unless the organisation's profile lets standard users set it, and a profile can also deny the app outright. Both belong to the team that manages the Mac.
- Start the app again. If sharing still fails with the switch on, quit the app completely and open it again, so it starts with the new permission, and try a test share before the next meeting.
- Two layers in a browser. A meeting in a browser needs both: the browser itself in Screen & System Audio Recording, and the meeting site allowed in the browser's own website settings.
- Reset one decision. When the switch looks right and nothing works, tccutil reset with the screen recording service and the app's bundle ID clears that one decision, so the app asks again. Never reset every app at once.
Three habits shorten these calls. Ask first whether the meeting runs in an app or a browser, because the browser is then the app that needs the permission. Test the device before the meeting rather than during it: MySmartCoPilot’s webcam test and mic test check whether the browser receives the camera and the microphone, and the screen recorder whether it can capture the screen, which separates a browser permission from a macOS one. And when a switch is on and nothing works, reset that one decision rather than every app’s.
Resetting every app's privacy decisions
Wrong: tccutil reset All to fix one meeting app, which makes every app on the Mac ask again for everything. Right:
reset only the service that fails, for only that app’s bundle ID, then quit and reopen the app.
Checkpoint
Check: The screen-sharing ticket
Device management can deny some permissions but not grant them
Organisations manage privacy settings through a Privacy Preferences Policy Control payload: A device management profile setting that can allow apps some kinds of access in advance, such as folders or Accessibility, but can only deny the camera, the microphone and screen recording.. Apple’s reference says only a device management service can install it, and it describes most of the payload’s settings as allowing an app: Accessibility, the Desktop, Documents and Downloads folders, and System Policy All Files, which covers data such as Mail, Messages, Safari and Time Machine backups. For three it says the opposite:
| Setting in the payload | What device management can do |
|---|---|
| Accessibility | allow specified apps to control the Mac |
| Desktop, Documents, Downloads folders | allow specified apps into those folders |
| System Policy All Files | allow access to data such as Mail and backups |
| Camera | deny specified apps the camera |
| Microphone | deny specified apps the microphone |
| Screen recording | deny an app screen capture, or let a standard user allow it |
So on a managed Mac the user still answers the camera, microphone and screen recording requests themselves, and the organisation can take that access away. For screen recording, Apple’s payload examples show one more setting: it lets a standard user, who is not an administrator, turn an app’s switch on for themselves. That is the line a support desk explains: “IT can block this app’s camera, but only you can turn it on.”
Key idea
Camera, microphone and screen recording are the user’s to grant, even on a managed Mac; device management can deny them, and can allow other kinds of access in advance.
Checkpoint
Check: What device management can grant
Lockdown Mode, Find My and Activation Lock in support terms
Lockdown Mode: An optional, extreme protection on Apple devices for the very few people who may be personally targeted by sophisticated attacks. It limits apps, websites and features, and blocks configuration profiles and device enrolment. is, in Apple’s words, an optional, extreme protection for the very few people who might be personally targeted by the most sophisticated digital threats. A Mac with it on does not work as usual: most message attachments are blocked, some web technologies are blocked, incoming FaceTime calls are blocked unless the user called that person in the past 30 days, and configuration profiles cannot be installed nor the Mac enrolled in device management. That last point explains a ticket: a Mac that refuses enrolment may simply be in Lockdown Mode. It is turned on in Privacy & Security, Lockdown Mode, Turn On, then Turn On & Restart, and an exclusion for a website, app or contact reduces its protection.
Three features in this area reach the help desk, each for a different reason:
| Feature | Who it is for | What a technician meets |
|---|---|---|
| Lockdown Mode | the very few who may be personally targeted | no configuration profiles or enrolment while it is on |
| Find My | the Mac’s owner | Activation Lock stays on as long as Find My does |
| Activation Lock | the owner of a lost or stolen Mac | the owner’s password or passcode before an erase or reuse |
Find My and Activation Lock go together. Turning on Find My enables Activation Lock: A Mac feature that follows Find My: while it is on, the owner's Apple Account password or the device passcode is required before anyone can turn Find My off, erase the Mac, or reactivate and use it. More in “Install, reinstall and erase macOS”, and from then on nobody can switch Find My off, wipe the Mac or set it up again without the owner’s Apple Account password or the Mac’s passcode. That protects a lost Mac, and it is why a Mac changing hands must leave the old owner’s Find My first; the handover steps are in install, reinstall and erase macOS.
Checkpoint
Check: Lockdown Mode, Find My and Activation Lock
Practise: list a Mac’s protection gaps
The posture check above compared readings with good ones. Write the version a help desk runs over many Macs: it returns each reading that is not good with the reason, off, not read or unrecognised, in a fixed order, so a script can sort a fleet’s results. Its sample tests cover a protected Mac, a Mac with everything off and readings that are missing or say something else. The self-check after it covers every section.
Exercise · Easy · Python
List the gaps in a Mac's four protection readings
Write mac_posture_gaps(readings) so that it lists what is wrong with a Mac's four protection readings. readings is a dict whose keys are "filevault", "sip", "gatekeeper" and "firewall", and whose values are the text each status command printed, with any spaces or line breaks around it.
Return a list of (key, reason) tuples, in the order filevault, sip, gatekeeper, firewall, for every reading that is not the good one:
| Key | Good reading | Off reading | | --- | --- | --- | | filevault | starts with FileVault is On | starts with FileVault is Off | | sip | ends with status: enabled. | ends with status: disabled. | | gatekeeper | exactly assessments enabled | exactly assessments disabled | | firewall | starts with Firewall is enabled | starts with Firewall is disabled |
The reason is "off" for an off reading, "not read" when the key is missing or its text is empty, and "unrecognised" for any other text: a check that cannot read a value says so instead of guessing. A Mac whose four readings are good returns [].
Starter code · mac_posture.py
def mac_posture_gaps(readings):
"""Return (key, reason) tuples for each protection reading that is not the good one."""
return [] The sample tests · test_mac_posture.py
from mac_posture import mac_posture_gaps
GOOD = {
"filevault": "FileVault is On.\n",
"sip": "System Integrity Protection status: enabled.",
"gatekeeper": "assessments enabled\n",
"firewall": "Firewall is enabled. (State = 1)",
}
def with_value(key, value):
readings = dict(GOOD)
readings[key] = value
return readings
def test_a_protected_mac_has_no_gaps():
assert mac_posture_gaps(GOOD) == []
def test_every_protection_off():
readings = {
"filevault": "FileVault is Off.",
"sip": "System Integrity Protection status: disabled.",
"gatekeeper": "assessments disabled",
"firewall": "Firewall is disabled. (State = 0)",
}
assert mac_posture_gaps(readings) == [
("filevault", "off"), ("sip", "off"), ("gatekeeper", "off"), ("firewall", "off"),
]
def test_one_gap_in_the_middle():
assert mac_posture_gaps(with_value("gatekeeper", "assessments disabled")) == [("gatekeeper", "off")]
def test_a_missing_or_empty_reading_is_not_read():
readings = dict(GOOD)
del readings["firewall"]
assert mac_posture_gaps(readings) == [("firewall", "not read")]
assert mac_posture_gaps(with_value("sip", " \n")) == [("sip", "not read")]
def test_other_text_is_unrecognised():
assert mac_posture_gaps(with_value("filevault", "Error: could not read the status")) == [("filevault", "unrecognised")]
def test_the_order_is_fixed():
readings = {"firewall": "Firewall is disabled. (State = 0)", "filevault": "FileVault is Off.",
"sip": GOOD["sip"], "gatekeeper": GOOD["gatekeeper"]}
assert mac_posture_gaps(readings) == [("filevault", "off"), ("firewall", "off")] A hint
Keep a small table per key: a test for the good reading and one for the off reading, such as lambda t: t.startswith("FileVault is On"). Walk the four keys in order, strip each value, and pick the reason from the first test that does not hold.
Results of the sample tests
| Test | Result | Details |
|---|
What your code printed
The sample tests run on this device, in your browser (Pyodide): nothing is sent to mysmartcopilot.com. The first run downloads Python (about 13.5 MB), which is kept for the next runs. A check in your browser is feedback for you, not proof that the code is right for every input.
Practice that adapts to you
Practise this lesson
11 questions about 5 ideas of this lesson. Each answer is explained at once, and what you get right is kept in this browser.
Interview questions
Warm-up (fresher): what does System Integrity Protection protect, in a sentence a user would understand?
It keeps the files macOS depends on from being changed while the Mac is running. Apple describes it as kernel
permissions that limit writing to critical system files, built on mandatory access controls that users cannot
override, which helps stop malicious code from modifying the system. It has been
on by default since OS X 10.11, csrutil status shows it, and some of its commands only work from Recovery. For a
user the practical meaning is: it is why an old guide that tells you to copy a file into a system folder fails, and
the answer is never to switch it off but to follow a method that works with it.
Two harder tickets follow: 30 users who cannot share their screens after a meeting-app update, and a manager who asks for FileVault or Gatekeeper to be switched off because a tool will not run. Write the first question you would ask in each, then compare it with the opening step on its page:
Model answers open with any pass: ₹79 for 1 week ($2.99), one payment that never renews.
-
Mid to senior
A department manager asks you to switch off Gatekeeper and FileVault on their team's Macs, because a reporting tool they bought will not open. What do you do?
Flashcards · 6 cards
Recall it, then check
Say the answer to yourself before you look: recalling it is what makes it stick.
-
Which four commands read whether a Mac is protected?
fdesetup status for FileVault, csrutil status for SIP, spctl --status for Gatekeeper and socketfilterfw --getglobalstate, from /usr/libexec/ApplicationFirewall, for the firewall.
-
What does System Integrity Protection protect, in words a user would follow?
It stops the files macOS depends on from being changed while the Mac is running, using kernel permissions that users cannot override. It is on by default.
-
Who lets a Mac app reach the camera or a folder, and how is that decision cleared?
The person at the Mac, in Privacy & Security. The privacy database keeps each decision until tccutil reset clears it for one service and one app.
-
A meeting app cannot share the screen on a Mac. What does it need?
Screen & System Audio Recording access and a restart of the app; in a browser, also the browser's permission and the site's permission.
-
Can device management give a Mac app the camera, the microphone or screen recording?
No. A management payload can allow many kinds of access in advance, but for those three it can only deny them, so the user grants them.
-
What do Lockdown Mode and Find My mean for a support technician?
Lockdown Mode is an extreme protection that also blocks configuration profiles and enrolment. Find My turns on Activation Lock, which needs the owner's Apple Account password to lift.
Key takeaways
fdesetup status,csrutil status,spctl --statusandsocketfilterfw --getglobalstateread FileVault, SIP, Gatekeeper and the firewall, and a posture check turns the four readings into gaps.- Privacy & Security lists each kind of access per app, the person at the Mac grants it, and the privacy database keeps
each decision until
tccutil resetclears it for one service and one app. - A meeting app that cannot share the screen needs Screen & System Audio Recording, a restart of the app, and in a browser also the browser’s and the site’s permission.
- A device management payload can allow many kinds of access, but for the camera, the microphone and screen recording it can only deny, so the user grants those themselves.
- Lockdown Mode is an extreme protection that also blocks configuration profiles and enrolment, and Find My turns on Activation Lock, which needs the owner’s Apple Account password to lift.
Terms in this lesson
- application firewall
- The firewall built into macOS, in System Settings, Network, Firewall, which blocks unwanted incoming connections to the Mac; socketfilterfw --getglobalstate reports whether it is on.
- Lockdown Mode
- An optional, extreme protection on Apple devices for the very few people who may be personally targeted by sophisticated attacks. It limits apps, websites and features, and blocks configuration profiles and device enrolment.
- Privacy Preferences Policy Control payload
- A device management profile setting that can allow apps some kinds of access in advance, such as folders or Accessibility, but can only deny the camera, the microphone and screen recording.
- stealth mode
- A firewall option of macOS that stops the Mac answering probing requests such as ping, while it still answers authorised apps.
- System Integrity Protection
- The macOS protection, SIP, that keeps critical system files read-only through kernel permissions users cannot override. It is on by default, csrutil status reports it, and some of its commands work only from Recovery.
- TCC
- The name technicians use for the macOS privacy database, after the com.apple.TCC payload that manages it: the store of each user's decisions about which apps may reach the camera, the microphone, the screen and personal files.
References
- Intro to FileVault (Apple)
- System Integrity Protection (Apple)
- Change Firewall settings on Mac (Apple)
- Firewall security in macOS (Apple)
- Control access to the camera on Mac (Apple)
- Control access to screen and system audio recording on Mac (Apple)
- Control access to files and folders on Mac (Apple)
- Allow accessibility apps to access your Mac (Apple)
- Privacy Preferences Policy Control device management payload settings (Apple)
- Privacy Preferences Policy Control custom payload examples (Apple)
- About Lockdown Mode (Apple)
- Activation Lock for Mac (Apple)
- Apple Platform Security (Apple)
Related tools
Report a problem with this lesson
Kept only in this browser. Your Learn progress