Access Control Lists (ACLs) in Operating Systems - Time & Space Complexity
When working with Access Control Lists (ACLs), it is important to understand how the time to check permissions grows as the list gets longer.
We want to know how the system's work changes when more entries are added to the ACL.
Analyze the time complexity of the following code snippet.
function checkPermission(user, resource, acl) {
for (const entry of acl) {
if (entry.user == user && entry.resource == resource) {
return entry.permission;
}
}
return 'no access';
}
This code checks if a user has permission to access a resource by scanning through the ACL entries one by one.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Looping through each ACL entry to find a matching user and resource.
- How many times: Up to once for each entry in the ACL list, until a match is found or the list ends.
As the number of ACL entries grows, the time to check permissions grows roughly in direct proportion.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | Up to 10 checks |
| 100 | Up to 100 checks |
| 1000 | Up to 1000 checks |
Pattern observation: The number of checks grows linearly as the ACL list grows.
Time Complexity: O(n)
This means the time to check permissions increases directly with the number of ACL entries.
[X] Wrong: "Checking permissions is always fast and constant time regardless of ACL size."
[OK] Correct: Because the code must look through each ACL entry until it finds a match, the time depends on how many entries there are.
Understanding how permission checks scale with ACL size helps you design systems that remain efficient as they grow.
"What if the ACL was stored in a hash table instead of a list? How would the time complexity change?"
Practice
Solution
Step 1: Understand what ACLs control
ACLs list permissions for users or groups on files or resources.Step 2: Identify the main function
The main function is to specify who can do what on a resource.Final Answer:
To specify which users or groups have permissions on a file or resource -> Option DQuick Check:
ACL = user/group permissions [OK]
- Confusing ACL with file content storage
- Thinking ACL manages hardware
- Assuming ACL monitors network
Solution
Step 1: Identify the correct ACL entry format
ACL entries usually specify type (user/group), name, and permissions.Step 2: Match permissions to read and write only
Read and write permissions are 'rw', execute is 'x'. So 'rw' matches read and write.Final Answer:
user:alice:rw -> Option BQuick Check:
user + alice + rw = correct ACL entry [OK]
- Using 'group' instead of 'user' for a user entry
- Adding execute permission when not needed
- Listing only read permission when write is required
user:alice:rwxgroup:staff:r-xother::r--What permissions does a user named 'bob' who belongs to the 'staff' group have?
Solution
Step 1: Identify bob's group membership
Bob belongs to the 'staff' group, so group permissions apply.Step 2: Check group permissions in ACL
Group 'staff' has 'r-x' which means read and execute, no write.Final Answer:
Read and execute only -> Option AQuick Check:
Group 'staff' = r-x = read + execute [OK]
- Assuming user permissions apply to bob
- Including write permission incorrectly
- Using 'other' permissions instead of group
user:bob:r but Bob reports he cannot write to the file. What is the most likely cause?Solution
Step 1: Analyze the ACL entry permissions
The entry 'user:bob:r' grants only read permission, no write.Step 2: Understand why Bob cannot write
Without write permission, Bob cannot modify the file.Final Answer:
The ACL entry only grants read permission, not write -> Option CQuick Check:
Read-only permission blocks writing [OK]
- Assuming ownership affects ACL permissions directly
- Thinking syntax error causes permission denial
- Ignoring the actual permissions granted
Solution
Step 1: Identify the correct ACL entry type
Since 'developers' is a group, the entry must start with 'group:developers'.Step 2: Set permissions to read and write only
Read and write permissions are 'rw-', where '-' means no execute.Step 3: Confirm no execute permission is given
group:developers:rw- uses 'rw-' which excludes execute permission.Final Answer:
group:developers:rw- -> Option AQuick Check:
Group + rw- = read/write, no execute [OK]
- Using 'user' instead of 'group' for group permissions
- Including execute permission by mistake
- Setting only read permission when write is needed
Ready to prove it?
Pass the test and this pattern moves unknown
