Science and technology

Linux permissions 101 | Opensource.com

Understanding Linux permissions and the right way to management which customers have entry to information is a elementary ability for techniques administration.

This article will cowl customary Linux file techniques permissions, dig additional into particular permissions, and wrap up with an evidence of default permissions utilizing umask.

Understanding the ls command output

Before we will speak about the right way to modify permissions, we have to know the right way to view them. The ls command with the lengthy itemizing argument (-l) provides us a variety of details about a file.

$ ls -lAh
whole 20Ok
-rwxr-xr--+ 1 root root    zero Mar  four 19:39 file1
-rw-rw-rw-. 1 root root    zero Mar  four 19:39 file10
-rwxrwxr--+ 1 root root    zero Mar  four 19:39 file2
-rw-rw-rw-. 1 root root    zero Mar  four 19:39 file8
-rw-rw-rw-. 1 root root    zero Mar  four 19:39 file9
drwxrwxrwx. 2 root root four.0K Mar  four 20:04 testdir

To perceive what this implies, let’s break down the output concerning the permissions into particular person sections. It might be simpler to reference every part individually.

Take a take a look at every element of the ultimate line within the output above:

drwxrwxrwx. 2 root root four.0K Mar  four 20:04 testdir
Section 1 Section 2 Section three Section four Section 5 Section 6 Section 7
d rwx rwx rwx  . root root

Section 1 (on the left) reveals what sort of file it’s.

d Directory
Regular file
l A delicate hyperlink

The info page for ls has a full itemizing of the completely different file varieties.

Each file has three modes of entry:

  • the proprietor
  • the group
  • all others

Sections 2, three, and four seek advice from the consumer, group, and “other users” permissions. And every part can embody a mix of r (learn), w (write), and x (executable) permissions.

Each of the permissions can also be assigned a numerical worth, which is vital when speaking in regards to the octal illustration of permissions.

Permission Octal Value
Read four
Write 2
Execute 1

Section 5 particulars any different entry strategies, similar to SELinux or File Access Control List (FACL).

Method Character
No different methodology  –
SELinux  .
FACLs  +
Any mixture of strategies  +

Sections 6 and seven are the names of the proprietor and the group, respectively.

Using chown and chmod

The chown command

The chown (change possession) command is used to alter a file’s consumer and group possession.

To change each the consumer and group possession of the file foo to root, we will use these instructions:

$ chown root:root foo
$ chown root: foo

Running the command with the consumer adopted by a colon (:) units each the consumer and group possession.

To set solely the consumer possession of the file foo to the root consumer, enter:

$ chown root foo

To change solely the group possession of the file foo, precede the group with a colon:

$ chown :root foo

The chmod command

The chmod (change mode) command controls file permissions for the proprietor, group, and all different customers who’re neither the proprietor nor a part of the group related to the file.

The chmod command can set permissions in each octal (e.g., 755, 644, and many others.) and symbolic (e.g., u+rwx, g-rwx, o=rw) formatting.

Octal notation assigns four “points” to learn, 2 to write, and 1 to execute. If we need to assign the consumer learn permissions, we assign four to the primary slot, but when we need to add write permissions, we should add 2. If we need to add execute, then we add 1. We do that for every permission sort: proprietor, group, and others.

For instance, if we need to assign learn, write, and execute to the proprietor of the file, however solely learn and execute to group members and all different customers, we might use 755 in octal formatting. That’s all permission bits for the proprietor (four+2+1), however solely a four and 1 for the group and others (four+1).

The breakdown for that’s: four+2+1=7; four+1=5; and four+1=5.

If we needed to assign learn and write to the proprietor of the file however solely learn to members of the group and all different customers, we might use chmod as follows:

$ chmod 644 foo_file

In the examples under, we use symbolic notation in numerous groupings. Note the letters u, g, and o symbolize consumer, group, and different. We use u, g, and o along with +, , or = so as to add, take away, or set permission bits.

To add the execute bit to the possession permission set:

$ chmod u+x foo_file

To take away learn, write, and execute from members of the group:

$ chmod g-rwx foo_file

To set the possession for all different customers to learn and write:

$ chmod o=rw

The particular bits: Set UID, set GID, and sticky bits

In addition to the usual permissions, there are just a few particular permission bits which have some helpful advantages.

Set consumer ID (suid)

When suid is about on a file, an operation executes because the proprietor of the file, not the consumer operating the file. A good example of that is the passwd command. It wants the suid bit to be set in order that altering a password runs with root permissions.

$ ls -l /bin/passwd
-rwsr-xr-x. 1 root root 27832 Jun 10  2014 /bin/passwd

An instance of setting the suid bit could be:

$ chmod u+s /bin/foo_file_name

Set group ID (sgid)

The sgid bit is just like the suid bit within the sense that the operations are performed below the group possession of the listing as an alternative of the consumer operating the command.

An instance of utilizing sgid could be if a number of customers are understanding of the identical listing, and each file created within the listing must have the identical group permissions. The instance under creates a listing referred to as collab_dir, units the sgid bit, and adjustments the group possession to webdev.

$ mkdir collab_dir
$ chmod g+s collab_dir
$ chown :webdev collab_dir

Now any file created within the listing could have the group possession of webdev as an alternative of the consumer who created the file.

$ cd collab_dir
$ contact file-sgid
$ ls -lah file-sgid
-rw-r--r--. 1 root webdev zero Jun 12 06:04 file-sgid

The “sticky” bit

The sticky bit denotes that solely the proprietor of a file can delete the file, even when group permissions would in any other case permit it. This setting often makes essentially the most sense on a typical or collaborative listing similar to /tmp. In the instance under, the t within the execute column of the all others permission set signifies that the sticky bit has been utilized.

$ ls -ld /tmp
drwxrwxrwt. eight root root 4096 Jun 12 06:07 /tmp/

Keep in thoughts this doesn’t stop any individual from enhancing the file; it simply retains them from deleting the contents of a listing.

We set the sticky bit with:

$ chmod o+t foo_dir

On your individual, strive setting the sticky bit on a listing and provides it full group permissions in order that a number of customers can learn, write and execute on the listing as a result of they’re in the identical group.

From there, create information as every consumer after which attempt to delete them as the opposite.

If every part is configured appropriately, one consumer shouldn’t be in a position to delete customers from the opposite consumer.

Note that every of those bits can be set in octal format with SUID=four, SGID=2, and Sticky=1.

$ chmod 4744
$ chmod 2644
$ chmod 1755

Uppercase or lowercase?

If you might be setting the particular bits and see an uppercase S or T as an alternative of lowercase (as we have seen till this level), it’s as a result of the underlying execute bit isn’t current. To show, the next instance creates a file with the sticky bit set. We can then add/take away the execute bit to show the case change.

$ contact file cap-ST-demo
$ chmod 1755 cap-ST-demo
$ ls -l cap-ST-demo
-rwxr-xr-t. 1 root root zero Jun 12 06:16 cap-ST-demo

$ chmod o-x cap-X-demo
$ ls -l cap-X-demo
-rwxr-xr-T. 1 root root zero Jun 12 06:16 cap-ST-demo

Setting the execute bit conditionally

To this level, we have set the execute bit utilizing a lowercase x, which units it with out asking any questions. We have another choice: utilizing an uppercase X as an alternative of lowercase will set the execute bit solely whether it is already current someplace within the permission group. This could be a troublesome idea to elucidate, however the demo under will assist illustrate it. Notice right here that after attempting so as to add the execute bit to the group privileges, it’s not utilized.

$ contact cap-X-file
$ ls -l cap-X-file
-rw-r--r--. 1 root root zero Jun 12 06:31 cap-X-file
$ chmod g+X cap-X-file
$ ls -l cap-X-file
-rw-r--r--. 1 root root zero Jun 12 06:31 cap-X-file

In this comparable instance, we add the execute bit first to the group permissions utilizing the lowercase x after which use the uppercase X so as to add permissions for all different customers. This time, the uppercase X units the permissions.

$ contact cap-X-file
$ ls -l cap-X-file
-rw-r--r--. 1 root root zero Jun 12 06:31 cap-X-file
$ chmod g+x cap-X-file
$ ls -l cap-X-file
-rw-r-xr--. 1 root root zero Jun 12 06:31 cap-X-file
$ chmod g+x cap-X-file
$ chmod o+X cap-X-file
ls -l cap-X-file
-rw-r-xr-x. 1 root root zero Jun 12 06:31 cap-X-file

Understanding umask

The umask masks (or “blocks off”) bits from the default permission set with a purpose to outline permissions for a file or listing. For instance, a 2 within the umask output signifies it’s blocking the write bit from a file, no less than by default.

Using the umask command with none arguments permits us to see the present umask setting. There are 4 columns: the primary is reserved for the particular suid, sgid, or sticky bit, and the remaining three symbolize the proprietor, group, and different permissions.


To perceive what this implies, we will execute umask with a -S (as proven under) to get the results of masking the bits. For occasion, due to the 2 worth within the third column, the write bit is masked off from the group and different sections; solely learn and execute could be assigned for these.

$ umask -S
u=rwx,g=rx,o=rx

To see what the default permission set is for information and directories, let’s set our umask to all zeros. This signifies that we’re not masking off any bits after we create a file.

$ umask 000
$ umask -S
u=rwx,g=rwx,o=rwx

$ contact file-umask-000
$ ls -l file-umask-000
-rw-rw-rw-. 1 root root zero Jul 17 22:03 file-umask-000

Now after we create a file, we see the default permissions are learn (four) and write (2) for all sections, which might equate to 666 in octal illustration.

We can do the identical for a listing and see its default permissions are 777. We want the execute bit on directories so we will traverse by means of them.

$ mkdir dir-umask-000
$ ls -ld dir-umask-000
drwxrwxrwx. 2 root root 4096 Jul 17 22:03 dir-umask-000/

Conclusion

There are many different methods an administrator can management entry to information on a system. These permissions are fundamental to Linux, and we will construct upon these elementary elements. If your work takes you into FACLs or SELinux, you will note that in addition they construct upon these first guidelines of file entry.

Most Popular

To Top