Incomputer security, anaccess-control list (ACL) is a list of permissions[a] associated with asystem resource (object or facility). An ACL specifies whichusers orsystem processes are granted access to resources, as well as what operations are allowed on given resources.[1] Each entry in a typical ACL specifies a subject and an operation. For instance,
Many kinds of operating systems implement ACLs or have a historical implementation; the first implementation of ACLs was in thefilesystem ofMultics in 1965.[2][3]
Afilesystem ACL is adata structure (usually a table) containing entries that specify individual user orgroup rights to specific system objects such as programs,processes, or files. These entries are known as access-control entries (ACEs) in the MicrosoftWindows NT,[4]OpenVMS, andUnix-likeoperating systems such asLinux,macOS, andSolaris. Each accessible object contains an identifier to its ACL. The privileges or permissions determine specific access rights, such as whether a user can read from, write to, orexecute an object. In some implementations, an ACE can control whether or not a user, or group of users, may alter the ACL on an object.
One of the first operating systems to provide filesystem ACLs was Multics.PRIMOS featured ACLs at least as early as 1984.[5]
In the 1990s the ACL androle-based access control (RBAC) models were extensively tested[by whom?] and used to administer file permissions.
POSIX 1003.1e/1003.2c working group made an effort to standardize ACLs, resulting in what is now known as "POSIX.1e ACL" or simply "POSIX ACL".[6] The POSIX.1e/POSIX.2c drafts were withdrawn in 1997 due to participants losing interest for funding the project and turning to more powerful alternatives such as NFSv4 ACL.[7] As of December 2019[update], no live sources of the draft could be found on the Internet, but it can still be found in theInternet Archive.[8]
Most of the Unix and Unix-like operating systems (e.g.Linux since 2.5.46 or November 2002,[9]FreeBSD, or Solaris) support POSIX.1e ACLs (not necessarily draft 17). ACLs are usually stored in the extended attributes of a file on these systems.
NFSv4 ACLs are much more powerful than POSIX draft ACLs. Unlike draft POSIX ACLs, NFSv4 ACLs are defined by an actually published standard, as part of theNetwork File System.
NFSv4 ACLs are supported by many Unix and Unix-like operating systems. Examples includeAIX,FreeBSD,[10]Mac OS X beginning with version 10.4 ("Tiger"), or Solaris withZFS filesystem,[11] support NFSv4 ACLs, which are part of the NFSv4 standard. There are two experimental implementations of NFSv4 ACLs for Linux: NFSv4 ACLs support forExt3 filesystem[12] and the more recentRichacls, which brings NFSv4 ACLs support forExt4 filesystem.[13] As with POSIX ACLs, NFSv4 ACLs are usually stored as extended attributes on Unix-like systems.
NFSv4 ACLs are organized nearly identically to the Windows NT ACLs used inNTFS.[14] NFSv4.1 ACLs are a superset of both NT ACLs and POSIX draft ACLs.[15]Samba supports saving the NT ACLs of SMB-shared files in many ways, one of which is as NFSv4-encoded ACLs.[16]
Microsoft'sActive Directory service implements anLDAP server that stores and disseminates configuration information about users and computers in a domain.[17] Active Directory extends the LDAP specification by adding the same type of access-control list mechanism as Windows NT uses for the NTFS filesystem. Windows 2000 then extended the syntax for access-control entries such that they could not only grant or deny access to entire LDAP objects, but also to individual attributes within these objects.[18]
On some types of proprietary computer hardware (in particular,routers andswitches), an access-control list provides rules that are applied toport numbers orIP addresses that are available on ahost or otherlayer 3, each with a list of hosts and/or networks permitted to use the service. Although it is additionally possible to configure access-control lists based on networkdomain names, this is a questionable idea because individualTCP,UDP, andICMP headers do not contain domain names. Consequently, the device enforcing the access-control list must separatelyresolve names to numeric addresses. This presents an additionalattack surface for an attacker who is seeking to compromise security of the system which the access-control list is protecting. Both individualservers androuters can have network ACLs. Access-control lists can generally be configured to control both inbound and outbound traffic, and in this context they are similar tofirewalls. Like firewalls, ACLs could be subject to security regulations and standards such asPCI DSS.
ACL algorithms have been ported toSQL and torelational database systems. Many "modern" (2000s and 2010s) SQL-based systems, likeenterprise resource planning andcontent management systems, have used ACL models in their administration modules.
In 2024, schema-indexed ACL models emerged as a lightweight alternative to traditional JSON-based permission storage. One notable proposal introduced the idea of storing only the indexes of allowed operations, rather than full permission trees. This technique, later formalized asSCode ACL, allows compact encoding of access rights (e.g., `"0 2 5"`) based on a predefined flattened schema, making it particularly efficient for use in stateless systems such as JWT tokens or session cookies. The approach gained early traction in developer communities for its minimalism and performance, and has since been adopted in both small-scale and production-grade systems.[citation needed]
The main alternative to the ACL model is the role-based access-control (RBAC) model. A "minimal RBAC model",RBACm, can be compared with an ACL mechanism,ACLg, where only groups are permitted as entries in the ACL. Barkley (1997)[19] showed thatRBACm andACLg are equivalent.
In modern SQL implementations, ACLs also manage groups and inheritance in a hierarchy of groups. So "modern ACLs" can express all that RBAC express and are notably powerful (compared to "old ACLs") in their ability to express access-control policy in terms of the way in which administrators view organizations.
For data interchange, and for "high-level comparisons", ACL data can be translated toXACML.[20]
The new version of Gnet-II (revision 3.0) has added a line-security mechanism which is implemented under the Primos ACL subsystem.
EA (Extended Attributes) and ACL (Access Control Lists) functionality is now available for ext3 file systems. In addition, ACL functionality is available for NFS.