Skip to content

Commit 961afe8

Browse files
committed
doc: update feature comparison table in README for clarity and accuracy
1 parent 9b9696a commit 961afe8

File tree

1 file changed

+19
-12
lines changed

1 file changed

+19
-12
lines changed

README.md

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -121,18 +121,25 @@ However you won't find out exact same options as sudo, you can use the `--role`
121121

122122
## Why do you need this tool ?
123123

124-
| | setcap | sudo | sr |
125-
|-------------------------------------|--------|------------------|----|
126-
| Change user | | ✅ but mandatory ||
127-
| Change groups | | ✅ but mandatory ||
128-
| Manage environment variables | |||
129-
| Strict command matching | | ✅ with wildcards | ✅ with PCRE and glob |
130-
| Interoperable configuration/policy | | ✅ only with LDAP | ✅ with JSON |
131-
| Set capabilities || | ✅ with Ambient set |
132-
| Prevent direct privilege escalation | | | ✅ with Bounding set |
133-
| Do not trust authorized users by default | | ||
134-
| Evolvable configuration/policy | | | ✅ with JSON |
135-
| Scalable access control | | | ✅ with RBAC |
124+
| Feature | setcap?? | doas | sudo | sudo-rs | sr |
125+
|------------------------------------------|-------------------|------------|--------------------------------|--------------------------------|----------------------------------------------|
126+
| **Change user/groups** | N/A | ✅ mandatory | ✅ mandatory | ✅ mandatory | ✅✅ mandatory and optional |
127+
| **Manage environment variables** | N/A | ✅ partially |complete | ✅ partially |complete |
128+
| **Specific command matching** | N/A | ✅ Strict-only | ✅ Strict & wildcards | ✅ Strict & wildcards | ✅ Strict & glob and PCRE |
129+
| **Centralized policy** ||| ✅ LDAP-based |||
130+
| **Secure signal forwarding** | N/A |||||
131+
| **Authentication management** || ✅ PAM | ✅✅ PAM, Kerberos, etc. | ✅ PAM | ✅ PAM |
132+
| **Logging features** || ✅ syslog | ✅✅ syslog, logsrvd, etc. | ✅ syslog | ✅ syslog |
133+
| **Plugin API** | N/A || complete || ⚠️ incomplete |
134+
| **Set capabilities** | ⚠️ on files only |||| ✅ Ambient-based |
135+
| **Prevent direct privilege escalation** ||||| ✅✅ “Bounding set” based |
136+
| **Untrust authorized users** ||||| ✅✅ using Immutable file flag |
137+
| **Evolvable configuration/policy** || ⚠️ custom | ⚠️ custom | ⚠️ custom | ✅ JSON-based |
138+
| **Scalable access control model** | N/A | ❌ ACL | ❌ ACL | ❌ ACL | ✅ RBAC |
139+
| **Just-in-time features** | N/A |||||
140+
| **Multi-person control** | N/A |||||
141+
| **SELinux policy management** | N/A |||||
142+
136143

137144
Traditional Linux system administration relies on a single powerful user, the superuser (root), who holds all system privileges. This model does not adhere to the principle of least privilege, as any program executed with superuser rights gains far more privileges than necessary. For example, `tcpdump`, a tool for sniffing network packets, only needs network capabilities. However, when run as the superuser, tcpdump gains all system privileges, including the ability to reboot the system. This excessive privilege can be exploited by attackers to compromise the entire system if tcpdump has vulnerabilities or their developers performs a supply chain attack.
138145

0 commit comments

Comments
 (0)