# 90DaysOfDevOps:Day#6

Linux is a multi-user operating system with multiple users accessing the same system. System administrators are responsible for preventing a user from accessing another user’s confidential files. For these reasons, Linux divides authorization into two levels, Ownership and Permission.

## **File Ownership**

Each file and directory has three kinds of owners.

* **User:** A “user” is the owner of the file. If you create a new file, then you become the owner of the file.
    
* **Group:** Every user is a part of the specific “group.” A group contains multiple users, all of whom will have the same access permissions to the file.
    
* **Other:** All users and groups in the system are considered as “others.”
    

Owners are denoted with the following symbols:

* u = user owner
    
* g = group owner
    
* o = other
    
* a = all (user + group + other)
    

## **Change the Ownership with chown**

To display the ownership of the file *index.html* in */var/www/html* directory, run the following command:

Plain Text

```plaintext
ls -l /var/www/html/index.html
```

You should get the following output:

Plain Text

```plaintext
-rw-r--r-- 1 www-data www-data 11510 Feb  3 20:25 /var/www/html/index.html
```

As you can see, the group and user owner of the file is www-data.

A basic syntax to change the ownership of the file is shown below:

Plain Text

```plaintext
chown owner:group filename
```

To change the owner of the file *index.html* to root  and group to root, run the following command:

Plain Text

```plaintext
chown root:root /var/www/html/index.html
```

You can use the -R option with the *chown* command to change the ownership of the directory recursively.

For example, to change the ownership of the directory */var/www/html* to www-data **as the user** and www-data **as the group**, run the following command:

Plain Text

```plaintext
chown -R www-data:www-data /var/www/html/
```

This will change the ownership of all files and directories located inside */var/www/html/.*

## **File Permissions**

Each file and directory has three types of permission:

* **Read:** You can view and read the content of the file, but can not edit or modify the file. You can list the content of the directory with “read” permission.
    
* **Write:** You can read and edit the content of the file. You can also rename and remove the file. You can add, remove, and rename files in the directory with “read” permission.
    
* **Execute:** You can execute the file.
    

Permissions are defined using **octal permissions**. These are nine characters created in three sets of three characters:

Plain Text

```plaintext
---    ---    ---
rwx    rwx    rwx
user   group  other
```

Each letter denotes a particular permission:

* **r:** Read permission
    
* **w:** Write permission
    
* **x:** Execute permission
    
* **–:** No permission set
    

Permissions are also represented in numeric form as shown below:

* **r** (read) = 4
    
* **w** (write) = 2
    
* **x** (execute) = 1
    
* **–** (no permission) = 0
    
* **rwx** = 4+2+1 = 7
    
* **rw** = 4+2 = 6
    

You can also use mathematical operators to add and remove permissions.

* **+:** Add the permissions.
    
* **\-:** Remove the permissions.
    
* **\=:** Overriding existing permissions.
    

## **Change the Permissions with chmod**

*Chmod* stands for **change mode**, and it is a basic syntax used to change the permissions of the file:

Plain Text

```plaintext
chmod permissions filename
```

To check the permissions of the file, run the following command:

Plain Text

```plaintext
ls -l /var/www/html/index.html
```

Output:

Plain Text

```plaintext
-rw-r--r-- 1 www-data www-data 11510 Feb  3 20:25 /var/www/html/index.html
```

As you can see, the owner of the file has *read/write* permissions, the group has *read* permission and the other has *read* permission.

To add *execute* permissions to the user, run the following command:

Plain Text

```plaintext
chmod u+x /var/www/html/index.html
```

Now, verify the permissions with the following command:

Plain Text

```plaintext
ls -l /var/www/html/index.html
```

Output:

Plain Text

```plaintext
-rwxr--r-- 1 www-data www-data 11510 Feb  3 20:25 /var/www/html/index.html
```

To add write permissions to group and others, run the following command:

Plain Text

```plaintext
chmod g+w,o+w /var/www/html/index.html
```

Now, verify the permissions with the following command:

Plain Text

```plaintext
ls -l /var/www/html/index.html
```

Output:

Plain Text

```plaintext
-rwxrw-rw- 1 www-data www-data 11510 Feb  3 20:25 /var/www/html/index.html
```

To remove the write permissions from others, run the following command:

Plain Text

```plaintext
chmod o-w /var/www/html/index.html
```

Now, verify the permissions with the following command:

Plain Text

```plaintext
ls -l /var/www/html/index.html
```

Output:

Plain Text

```plaintext
-rwxrw-r-- 1 www-data www-data 11510 Feb  3 20:25 /var/www/html/index.html
```

You can also set the permissions using the **octal value**. You can use the following values for each permission:

**777 =** rwxrwxrwx

**765 =** rwxrw-r-x

**654 =** rw-r-xr–

For example, change the permissions of the file so that the user can *read/write and execute*, the group can *read* and *execute* and the others can only *read* the file.

Plain Text

```plaintext
chmod u=rwx,g=rx,o=r /var/www/html/index.html
```

Or

Plain Text

```plaintext
chmod 754 /var/www/html/index.html
```

....
