File system permissions: Wikis




From Wikipedia, the free encyclopedia



Differences between operating systems


DOS variants (including MS-DOS, Windows 95, Windows 98, and Windows Me) do not have permissions. There is a "read-only" attribute that can be set or unset on a file by any user or program.






Solaris ACL support depends on the filesystem being used - older UFS filesystem supports POSIX.1e ACLs, while ZFS supports only NFSv4 ACLs.[3]


FreeBSD supports POSIX.1e ACLs on UFS and NFSv4 ACLs on ZFS.. There is experimental support for NFSv4 ACLs for UFS.[5]

IBM z/OS implements file security via RACF (Resource Access Control Facility )[6]

Traditional Unix permissions

Permissions on Unix-like systems are managed in three distinct classes. These classes are known as user, group, and others. In effect, Unix permissions are a simplified form of access control lists (ACLs).

When a new file is created on a Unix-like system, its permissions are determined from the umask of the process that created it.



Files and directories are assigned a group, which define the file's group class. Distinct permissions apply to members of the file's group members. The owner need not be a member of the file's group.




There are three specific permissions on Unix-like systems that apply to each class:

  • The execute permission, which grants the ability to execute a file. This permission must be set for executable binaries (for example, a compiled c++ program) or shell scripts (for example, a Perl program) in order to allow the operating system to run them. When set for a directory, this permission grants the ability to traverse its tree in order to access files or subdirectories, but not see files inside the directory (unless read is set).

The effect of setting the permissions on a directory (rather than a file) is "one of the most frequently misunderstood file permission issues" (Hatch 2003).

When a permission is not set, the rights it would grant are denied. Unlike ACL-based systems, permissions on a Unix-like system are not inherited. Files created within a directory will not necessarily have the same permissions as that directory. The permissions to be assigned are determined using umasks.

Notation of traditional Unix permissions

Symbolic notation

There are many ways by which Unix permission schemes are represented. The most common form is symbolic notation.

Three groups of three
first what the owner can do
second what the group members can do
third what other users can do
The triplet
first r: readable.
second w: writable.
third x: executable.
s or t: executable and setuid/setgid/sticky.
S or T: setuid/setgid or sticky, but not executable.

Each class of permissions is represented by three characters. The first set of characters represents the user class. The second set represents the group class. The third and final set of three characters represents the others class.

Each of the three characters represent the read, write, and execute permissions respectively:

  • r if the read bit is set, - if it is not.
  • w if the write bit is set, - if it is not.
  • x if the execute bit is set, - if it is not.

The following are some examples of symbolic notation:

  • -rwxr-xr-x for a regular file whose user class has full permissions and whose group and others classes have only the read and execute permissions.
  • crw-rw-r-- for a character special file whose user and group classes have the read and write permissions and whose others class has only the read permission.
  • dr-x------ for a directory whose user class has read and execute permissions and whose group and others classes have no permissions.

Octal notation

Another common method for representing Unix permissions is octal notation. Octal notation consists of a three- or four-digit base-8 value.

With three-digit octal notation, each numeral represents a different component of the permission set: user class, group class, and "others" class respectively.

Each of these digits is the sum of its component bits (see also Binary numeral system). As a result, specific bits add to the sum as it is represented by a numeral:



These are the examples from the Symbolic notation section given in octal notation:

  • "-rwxr-xr-x" would be represented as 755 in three-digit octal.
  • "-rw-rw-r--" would be represented as 664 in three-digit octal.
  • "-r-x------" would be represented as 500 in three-digit octal.

Here is a summary of the meanings for individual octal digit values:

0 --- no permission
1 --x execute 
2 -w- write 
3 -wx write and execute
4 r-- read
5 r-x read and execute
6 rw- read and write
7 rwx read, write and execute

Note the similarity to binary counting (starting at the right and going left):

0: 000 
1: 001 
2: 010 
3: 011 
4: 100 
5: 101 
6: 110 
7: 111 

Octal digit values can be added together to make Symbolic Notations:
(4=r)+(1=x) == (5=r-x)
(4=r)+(2=w) == (6=rw-)
(4=r)+(2=w)+(1=x) == (7=rwx)

Here is a summary showing which octal digits affect permissions for user, group, and other:

  • UGO = User, Group, Other
  • 777 = "-rwxrwxrwx" = rwx for all
  • 754 = "-rwxr-xr--" = rwx for owner, r-x for group, r-- for other
  • 124 = "--x-w-r--" = x for owner, w for group, r for other

User private group

Some systems create a new group – a "user private group" – for each new user. The "user private group" scheme can be preferred for a variety of reasons[7][8][9] including using a umask of 002 and not having every "user" able to write to newly created files.

See also


External links

Got something to say? Make a comment.
Your name
Your email address