Права файлов чтение запись выполнение как их изменить

Linux is a multi user OS which means that it supports multiple users at a time. As many people can access the system simultaneously and some resources are shared, Linux controls access through ownership and permissions. Linux file ownership In Linux, there are three types of owners: user, group, and others . Linux User A user is the default owner and creator of the file. So this user is called owner as well. Linux Group A user-group is a collection of users. Users that belonging to a group

Linux chmod and chown – How to Change File Permissions and Ownership in Linux

Linux is a multi user OS which means that it supports multiple users at a time.

As many people can access the system simultaneously and some resources are shared, Linux controls access through ownership and permissions.

In Linux, there are three types of owners: user, group, and others .

Linux User

A user is the default owner and creator of the file. So this user is called owner as well.

Linux Group

A user-group is a collection of users. Users that belonging to a group will have the same Linux group permissions to access a file/ folder.

You can use groups to assign permissions in a bulk instead of assigning them individually. A user can belong to more than one group as well.

Other

Any users that are not part of the user or group classes belong to this class.

Linux File Permissions

File permissions fall in three categories: read, write, and execute.

Read permission

For regular files, read permissions allow users to open and read the file only. Users can’t modify the file.

Similarly for directories, read permissions allow the listing of directory content without any modification in the directory.

Write permission

When files have write permissions, the user can modify (edit, delete) the file and save it.

For folders, write permissions enable a user to modify its contents (create, delete, and rename the files inside it), and modify the contents of files that the user has write permissions to.

Execute permission

For files, execute permissions allows the user to run an executable script. For directories, the user can access them, and access details about files in the directory.

Below is the symbolic representation of permissions to user, group, and others.

image-157

Symbolic representation of permissions

Note that we can find permissions of files and folders using long listing (ls -l) on a Linux terminal.

image-158

Output of long listing

In the output above, d represents a directory and- represents a regular file.

image-159

How to Change Permissions in Linux Using the chmod Command

Now that we know the basics of ownerships and permissions, let’s see how we can modify permissions using the chmod command.

Syntax of chmod:

chmod permissions filename

Where,

  • permissions can be read, write, execute or a combination of them.
  • filename is the name of the file for which the permissions need to change. This parameter can also be a list if files to change permissions in bulk.

We can change permissions using two modes:

  1. Symbolic mode: this method uses symbols like u, g, o to represent users, groups, and others. Permissions are represented as  r, w, x for read write and execute, respectively. You can modify permissions using +, — and =.
  2. Absolute mode: this method represents permissions as 3-digit octal numbers ranging from 0-7.

Now, let’s see them in detail.

How to Change Permissions using Symbolic Mode

The table below summarize the user representation:

User representation Description
u user/owner
g group
o other

We can use mathematical operators to add, remove, and assign permissions. The table below shows the summary:

Operator Description
+ Adds a permission to a file or directory
Removes the permission
= Sets the permission if not present before. Also overrides the permissions if set earlier.

Example:

Suppose, I have a script and I want to make it executable for owner of the file zaira.

Current file permissions are as follows:

image-161

Let’s split the permissions like this:

image-160

To add execution rights (x) to owner (u) using symbolic mode, we can use the command below:

chmod u+x mymotd.sh

Output:

Now, we can see that the execution permissions have been added for owner zaira.

image-162

Additional examples for changing permissions via symbolic method:

  • Removing read and write permission for group and others: chmod go-rw.
  • Removing read permissions for others: chmod o-r.
  • Assigning write permission to group and overriding existing permission: chmod g=w.

How to Change Permissions using Absolute Mode

Absolute mode uses numbers to represent permissions and mathematical operators to modify them.

The below table shows how we can assign relevant permissions:

Permission Provide permission
read add 4
write add 2
execute add 1

Permissions can be revoked using subtraction. The below table shows how you can remove relevant permissions.

Permission Revoke permission
read subtract 4
write subtract 2
execute subtract 1

Example:

  • Set read (add 4) for user, read (add 4) and execute (add 1) for group, and only execute (add 1) for others.

chmod 451 file-name

This is how we performed the calculation:

image-163

Note that this is the same as r--r-x--x.

  • Remove execution rights from other and group.

To remove execution from other and group, subtract 1 from the execute part of last 2 octets.

image-164

  • Assign read, write and execute to user, read and execute to group and only read to others.

This would be the same as rwxr-xr--.

image-165

How to Change Ownership using the chown Command

Next, we will learn how to change the ownership of a file. You can change the ownership of a file or folder using the chown command. In some cases, changing ownership requires sudo permissions.

Syntax of chown:

chown user filename

How to change user ownership with chown

Let’s transfer the ownership from user zaira to user news.

chown news mymotd.sh

image-167

Command to change ownership: sudo chown news mymotd.sh

Output:

image-168

How to change user and group ownership simultaneously

We can also use chown to change user and group simultaneously.

chown user:group filename

How to change directory ownership

You can change ownership recursively for contents in a directory. The example below changes the ownership of the /opt/script folder to allow user admin.

chown -R admin /opt/script

How to change group ownership

In case we only need to change the group owner, we can use chown by preceding the group name by a colon :

chown :admins /opt/script

Linux Permissions Guided Exercise

Up until now we have explored permissions, ownerships, and the methods to change them. Now we will reinforce our learning with a guided exercise.

Goal: To create groups and assign relevant permissions to its members. Verify access by accessing it from unauthorized users.

Task: Create a group called dev-team and add two members (John and Bob) to it. Create a folder /home/dev-team and change ownership to group dev-team. Verify that both users in the dev-team group have read and write access to the folder.

Create another group project-manager and add a user Fatima to it. Verify if the folder /home/dev-team is accessible by Fatima.

Visualization of the problem

We can visualize the problem like this:

Notes_220426_040131_1

Step 1: Switch to root user.
Switch to root user so that we have the rights to create new users and groups.

Show hint

Use the sudo command with flag i.

If you have the root password, you can login using that as well.

Show solution

Enter sudo -i to switch to the root user.

Enter whoami to find out if you are the root user:

step1-1

If you do not have root access, use the commands with appending sudo.


Step 2: Create a group dev-team

Show hint

Use the groupadd command.

Syntax: groupadd group-name

Show solution

Enter groupadd dev-team to create the dev-team group

Verify: cat /etc/group | grep dev-team


Step 3: Create two new users John and Bob and add them to the dev-team group

Show hint

Use command useradd.

useradd creates a new user and adds to the specified group.

Syntax: useradd -G groupname username

Where -G specifies the group.

Show solution

useradd -G dev-team John

useradd -G dev-team Bob

Verify: cat /etc/group | grep dev-team

step3-1


Step 4: Provide passwords for users John and Bob

Show hint

Use command passwd

passwd creates a password for users.

Syntax: passwd username

Show solution

passwd John

passwd Bob


Step 5: Create a directory in /home and name it dev-team

Show hint

Use command mkdir

mkdir creates a directory.

Syntax: mkdir directory-name

Show solution

mkdir /home/dev-team

Verify:

correction


Step 6: Change the group ownership of the folder dev-team to group dev-team

Show hint

Use command chown

Syntax: chown :group-name folder

Show solution

chown :dev-team /home/dev-team/

step6


Step 7: Make sure the permissions of folder dev-team allow group members to create and delete files.

Show hint

Use command chmod

Write permissions allow users and groups to create and delete files.

Syntax: chmod permissions folder

Show solution

chmod g+w /home/dev-team/

step7


Step 8: Ensure that ‘others’ don’t have any access to the files of dev-team folder.

Show hint

Use command chmod

Remove read, write, execute permissions from ‘others’ if they exist.

Syntax: chmod permissions folder

Show solution

chmod o-rx dev-team

correction2


Step 9: Exit the root session and switch to John

Show hint

Use command exit to logout of the root user.

Use su to switch users.

Syntax: su - user

To confirm current user, use command whoami.

Show solution

exit

su - John

Verify with command whoami.


Step 10: Navigate to folder: /home/dev-team

Show hint

Use command cd to switch folders.

Syntax: cd /path/to/folder

Confirm current path with pwd.

Show solution

cd /home/dev-team


Step 11: Create an empty file in the folder: /home/dev-team

Show hint

Use command touch to create an empty file.

Syntax: touch filename

Show solution

touch john-file.txt

Verify: ls -lrt

john


Step 12: Change the group ownership of the created file to dev-team and verify.

Show hint

Use command chown to change ownership.

Syntax: chown :group file-name

Show solution

chown :dev-team john-file.txt

Once group ownership is modified, all members of the group can access this file.

Verify ls -lrt

step10


Step 13: Exit the shell and switch to user Bob

Show hint

Use command exit to exit the terminal.

Use su to switch users.

Syntax: su - user

To confirm current user, use command whoami.

Show solution

exit

su - Bob

Verify the current user with command whoami.


Step 14: Navigate to the path /home/dev-team

Show hint

Use command cd to switch folders.

Syntax: cd /path/to/folder

Confirm current path with pwd.

Show solution

cd /home/dev-team


Step 15: Find out Bob's privileges to access john-file.txt

Show hint

Use command ls -l for long listing.

Syntax: ls -l | grep file-name

Does group have rw- permissions?

Show solution

ls -l | grep john-file.txt

step13


Step 16: Modify the file john-file.txt while logged in as Bob

Show hint

Use command echo to add some text to the file.

Syntax: echo "Some text" >>file-name

This would redirect the quoted text to end of the file.

Show solution

echo "This is Bob's comment" > john-file.txt

If all the permissions are correctly set, Bob would be allowed to edit and save this file. Otherwise you would get an error like this: Permission denied.

Verify cat john-file.txt

bob-comment


Step 17: Create another group project-manager and assign a member Fatima to it

Show hint

Use command groupadd to add a new group.

Syntax: groupadd group-name

Create a new user with command useradd.

Use flag -G to assign a user to it.

Show solution

groupadd project-manager
useradd -G project-manager Fatima
passwd Fatima

Step 18: Navigate to folder /home/dev-team and verify if Fatima can access it

Show hint

Use cd to navigate to /home/dev-team.

Show solution

cd /home/dev-team.

We get this error:

fatima

This is because, others don’t have any access to the folder dev-team.

If we recall, below are the rights of the dev-team folder.

recall

Wrapping up

Permissions and ownerships are useful concepts for enforcing security across multi-user operating systems. I hope you were able to learn about changing permissions and ownerships in depth.

What’s your favorite thing you learned from this tutorial? Let me know on Twitter!

You can also read my other posts here.

Thanks to Tom Mondloch for his help with the guided exercise.



Learn to code for free. freeCodeCamp’s open source curriculum has helped more than 40,000 people get jobs as developers. Get started

Linux chmod and chown – How to Change File Permissions and Ownership in Linux

Linux is a multi user OS which means that it supports multiple users at a time.

As many people can access the system simultaneously and some resources are shared, Linux controls access through ownership and permissions.

In Linux, there are three types of owners: user, group, and others .

Linux User

A user is the default owner and creator of the file. So this user is called owner as well.

Linux Group

A user-group is a collection of users. Users that belonging to a group will have the same Linux group permissions to access a file/ folder.

You can use groups to assign permissions in a bulk instead of assigning them individually. A user can belong to more than one group as well.

Other

Any users that are not part of the user or group classes belong to this class.

Linux File Permissions

File permissions fall in three categories: read, write, and execute.

Read permission

For regular files, read permissions allow users to open and read the file only. Users can’t modify the file.

Similarly for directories, read permissions allow the listing of directory content without any modification in the directory.

Write permission

When files have write permissions, the user can modify (edit, delete) the file and save it.

For folders, write permissions enable a user to modify its contents (create, delete, and rename the files inside it), and modify the contents of files that the user has write permissions to.

Execute permission

For files, execute permissions allows the user to run an executable script. For directories, the user can access them, and access details about files in the directory.

Below is the symbolic representation of permissions to user, group, and others.

image-157

Symbolic representation of permissions

Note that we can find permissions of files and folders using long listing (ls -l) on a Linux terminal.

image-158

Output of long listing

In the output above, d represents a directory and- represents a regular file.

image-159

How to Change Permissions in Linux Using the chmod Command

Now that we know the basics of ownerships and permissions, let’s see how we can modify permissions using the chmod command.

Syntax of chmod:

chmod permissions filename

Where,

  • permissions can be read, write, execute or a combination of them.
  • filename is the name of the file for which the permissions need to change. This parameter can also be a list if files to change permissions in bulk.

We can change permissions using two modes:

  1. Symbolic mode: this method uses symbols like u, g, o to represent users, groups, and others. Permissions are represented as  r, w, x for read write and execute, respectively. You can modify permissions using +, — and =.
  2. Absolute mode: this method represents permissions as 3-digit octal numbers ranging from 0-7.

Now, let’s see them in detail.

How to Change Permissions using Symbolic Mode

The table below summarize the user representation:

User representation Description
u user/owner
g group
o other

We can use mathematical operators to add, remove, and assign permissions. The table below shows the summary:

Operator Description
+ Adds a permission to a file or directory
Removes the permission
= Sets the permission if not present before. Also overrides the permissions if set earlier.

Example:

Suppose, I have a script and I want to make it executable for owner of the file zaira.

Current file permissions are as follows:

image-161

Let’s split the permissions like this:

image-160

To add execution rights (x) to owner (u) using symbolic mode, we can use the command below:

chmod u+x mymotd.sh

Output:

Now, we can see that the execution permissions have been added for owner zaira.

image-162

Additional examples for changing permissions via symbolic method:

  • Removing read and write permission for group and others: chmod go-rw.
  • Removing read permissions for others: chmod o-r.
  • Assigning write permission to group and overriding existing permission: chmod g=w.

How to Change Permissions using Absolute Mode

Absolute mode uses numbers to represent permissions and mathematical operators to modify them.

The below table shows how we can assign relevant permissions:

Permission Provide permission
read add 4
write add 2
execute add 1

Permissions can be revoked using subtraction. The below table shows how you can remove relevant permissions.

Permission Revoke permission
read subtract 4
write subtract 2
execute subtract 1

Example:

  • Set read (add 4) for user, read (add 4) and execute (add 1) for group, and only execute (add 1) for others.

chmod 451 file-name

This is how we performed the calculation:

image-163

Note that this is the same as r--r-x--x.

  • Remove execution rights from other and group.

To remove execution from other and group, subtract 1 from the execute part of last 2 octets.

image-164

  • Assign read, write and execute to user, read and execute to group and only read to others.

This would be the same as rwxr-xr--.

image-165

How to Change Ownership using the chown Command

Next, we will learn how to change the ownership of a file. You can change the ownership of a file or folder using the chown command. In some cases, changing ownership requires sudo permissions.

Syntax of chown:

chown user filename

How to change user ownership with chown

Let’s transfer the ownership from user zaira to user news.

chown news mymotd.sh

image-167

Command to change ownership: sudo chown news mymotd.sh

Output:

image-168

How to change user and group ownership simultaneously

We can also use chown to change user and group simultaneously.

chown user:group filename

How to change directory ownership

You can change ownership recursively for contents in a directory. The example below changes the ownership of the /opt/script folder to allow user admin.

chown -R admin /opt/script

How to change group ownership

In case we only need to change the group owner, we can use chown by preceding the group name by a colon :

chown :admins /opt/script

Linux Permissions Guided Exercise

Up until now we have explored permissions, ownerships, and the methods to change them. Now we will reinforce our learning with a guided exercise.

Goal: To create groups and assign relevant permissions to its members. Verify access by accessing it from unauthorized users.

Task: Create a group called dev-team and add two members (John and Bob) to it. Create a folder /home/dev-team and change ownership to group dev-team. Verify that both users in the dev-team group have read and write access to the folder.

Create another group project-manager and add a user Fatima to it. Verify if the folder /home/dev-team is accessible by Fatima.

Visualization of the problem

We can visualize the problem like this:

Notes_220426_040131_1

Step 1: Switch to root user.
Switch to root user so that we have the rights to create new users and groups.

Show hint

Use the sudo command with flag i.

If you have the root password, you can login using that as well.

Show solution

Enter sudo -i to switch to the root user.

Enter whoami to find out if you are the root user:

step1-1

If you do not have root access, use the commands with appending sudo.


Step 2: Create a group dev-team

Show hint

Use the groupadd command.

Syntax: groupadd group-name

Show solution

Enter groupadd dev-team to create the dev-team group

Verify: cat /etc/group | grep dev-team


Step 3: Create two new users John and Bob and add them to the dev-team group

Show hint

Use command useradd.

useradd creates a new user and adds to the specified group.

Syntax: useradd -G groupname username

Where -G specifies the group.

Show solution

useradd -G dev-team John

useradd -G dev-team Bob

Verify: cat /etc/group | grep dev-team

step3-1


Step 4: Provide passwords for users John and Bob

Show hint

Use command passwd

passwd creates a password for users.

Syntax: passwd username

Show solution

passwd John

passwd Bob


Step 5: Create a directory in /home and name it dev-team

Show hint

Use command mkdir

mkdir creates a directory.

Syntax: mkdir directory-name

Show solution

mkdir /home/dev-team

Verify:

correction


Step 6: Change the group ownership of the folder dev-team to group dev-team

Show hint

Use command chown

Syntax: chown :group-name folder

Show solution

chown :dev-team /home/dev-team/

step6


Step 7: Make sure the permissions of folder dev-team allow group members to create and delete files.

Show hint

Use command chmod

Write permissions allow users and groups to create and delete files.

Syntax: chmod permissions folder

Show solution

chmod g+w /home/dev-team/

step7


Step 8: Ensure that ‘others’ don’t have any access to the files of dev-team folder.

Show hint

Use command chmod

Remove read, write, execute permissions from ‘others’ if they exist.

Syntax: chmod permissions folder

Show solution

chmod o-rx dev-team

correction2


Step 9: Exit the root session and switch to John

Show hint

Use command exit to logout of the root user.

Use su to switch users.

Syntax: su - user

To confirm current user, use command whoami.

Show solution

exit

su - John

Verify with command whoami.


Step 10: Navigate to folder: /home/dev-team

Show hint

Use command cd to switch folders.

Syntax: cd /path/to/folder

Confirm current path with pwd.

Show solution

cd /home/dev-team


Step 11: Create an empty file in the folder: /home/dev-team

Show hint

Use command touch to create an empty file.

Syntax: touch filename

Show solution

touch john-file.txt

Verify: ls -lrt

john


Step 12: Change the group ownership of the created file to dev-team and verify.

Show hint

Use command chown to change ownership.

Syntax: chown :group file-name

Show solution

chown :dev-team john-file.txt

Once group ownership is modified, all members of the group can access this file.

Verify ls -lrt

step10


Step 13: Exit the shell and switch to user Bob

Show hint

Use command exit to exit the terminal.

Use su to switch users.

Syntax: su - user

To confirm current user, use command whoami.

Show solution

exit

su - Bob

Verify the current user with command whoami.


Step 14: Navigate to the path /home/dev-team

Show hint

Use command cd to switch folders.

Syntax: cd /path/to/folder

Confirm current path with pwd.

Show solution

cd /home/dev-team


Step 15: Find out Bob's privileges to access john-file.txt

Show hint

Use command ls -l for long listing.

Syntax: ls -l | grep file-name

Does group have rw- permissions?

Show solution

ls -l | grep john-file.txt

step13


Step 16: Modify the file john-file.txt while logged in as Bob

Show hint

Use command echo to add some text to the file.

Syntax: echo "Some text" >>file-name

This would redirect the quoted text to end of the file.

Show solution

echo "This is Bob's comment" > john-file.txt

If all the permissions are correctly set, Bob would be allowed to edit and save this file. Otherwise you would get an error like this: Permission denied.

Verify cat john-file.txt

bob-comment


Step 17: Create another group project-manager and assign a member Fatima to it

Show hint

Use command groupadd to add a new group.

Syntax: groupadd group-name

Create a new user with command useradd.

Use flag -G to assign a user to it.

Show solution

groupadd project-manager
useradd -G project-manager Fatima
passwd Fatima

Step 18: Navigate to folder /home/dev-team and verify if Fatima can access it

Show hint

Use cd to navigate to /home/dev-team.

Show solution

cd /home/dev-team.

We get this error:

fatima

This is because, others don’t have any access to the folder dev-team.

If we recall, below are the rights of the dev-team folder.

recall

Wrapping up

Permissions and ownerships are useful concepts for enforcing security across multi-user operating systems. I hope you were able to learn about changing permissions and ownerships in depth.

What’s your favorite thing you learned from this tutorial? Let me know on Twitter!

You can also read my other posts here.

Thanks to Tom Mondloch for his help with the guided exercise.



Learn to code for free. freeCodeCamp’s open source curriculum has helped more than 40,000 people get jobs as developers. Get started

Права доступа к файлам и каталогам

Категории пользователей по отношению к файлу

GNU/Linux как любая Unix-подобная операционная система является многопользовательской. Это значит, что в системе могут работать одновременно или по-очереди несколько или множество пользователей. У каждого из них должно быть собственное файловое пространство, доступ к которому других пользователей ограничен.

Отсюда вытекает, что у любого файла в Linux должны быть специальные атрибуты – права на доступ. Эти атрибуты должны сообщать, кто имеет право работать с файлом.

Выделяют три категории пользователей, которым могут предоставляться права на файл:

  • Сам владелец (u – user) объекта – конкретный пользователь, чье имя числится в атрибутах файла как имя владельца этого файла. Обычно если пользователь создает файл, то он автоматически записывается как его владелец.

  • Группа (g – group), к которой принадлежит владелец файла. Когда в Linux создается пользователь, то для него создается одноименная группа. Однако средствами администрирования системы можно объединять пользователей в различные группы. При этом конкретный пользователь может входить в состав нескольких групп. Группы позволяют предоставлять права доступа к ресурсам сразу нескольким людям, но при этом ограниченному кругу лиц.

  • Все остальные (o – other) – это все те, кто не является владельцем файла и не принадлежит к группе владельца файла. То есть любой посторонний пользователь.

Права на файл могут изменять только владелец этого файла и суперпользователь.

Чтение, запись, выполнение

Чтение, запись, выполнение – это то, что можно делать с существующим файлом, возможные действия над ним. У каждой категории пользователей (владельца, группы, остальных) должны быть свои права на каждое вышеупомянутое действие.

Право на чтение (r – read) означает, что файл можно просматривать. Например, открыть файл и, если он текстовый, прочитать содержащийся в нем текст. Если это файл изображения, то можно посмотреть изображение. Наличие права только на чтение не позволяет изменять файл. То есть нельзя будет исправить текст или подрисовать что-то к картинке.

Право на запись (w – write) позволяет изменять файл, то есть дописывать в него информацию или заменять ее другой.

Право на исполнение (x – execution) имеет смысл не для всех файлов, хотя может быть установлено для любого. Это право позволяет исполнять файл как программу, при этом в файле должны быть записаны инструкции для процессора, то есть файл должен быть исполняемой программой.

Буквенная запись прав доступа

Поскольку есть три категории пользователей (владелец, группа, остальные) и три действия над файлом (чтение, запись, исполнение), то получается, что в атрибутах файла должно быть девять записей о правах, указывающих на то, кто и что может делать с файлом.

Первые три записи – это права владельца, вторые три записи – права группы, последняя тройка – права на файл для всех остальных. Если обозначить каждое право соответствующей буквой, и все права всем предоставляются, то получится такая запись:

rwxrwxrwx

Мы уже видели нечто подобно в выводе команды ls -l. В первом столбце, после символа типа файла указываются права доступа к файлу в буквенной нотации.

Если какое-либо право не предоставляется той или иной категории, то вместо буквы ставится знак минус. Например, на скрине выше файл text.txt все могут читать, но изменять – только владелец.

Запись прав доступа с помощью чисел

Записывать права доступа можно не только с помощью букв. Если положительное значение права (когда доступ есть) обозначать единицей, а отрицательное (доступа нет) – нулем, то получим такую картину для файла, который могут все читать, но изменять только владелец:

110100100

Именно с помощью нулей и единиц хранятся данные в памяти компьютера, в том числе атрибуты доступа. Под права выделяются 9 бит в атрибутах файла, каждый бит хранит ноль или единицу.

Однако запись из девяти символов достаточно длинная. Чтобы ее сократить, используют преобразование двоичных чисел в восьмеричные. Триады нулей и единиц двоичной системы как раз составляют значения от 0 до 7 в восьмеричной системе счисления. Поэтому права доступа трех категорий (владельца, группы, остальных) можно выразить как три независимых друг от друга числа от 0 до 7-ми.

Не все числа имеют смысл. Трудно представить файл, который можно изменять, но нельзя прочитать. Часто используемые числа, которые полезно запомнить: 4 – только чтение, 5 – чтение и выполнение, 6 – чтение и запись, 7 – все права.

Права доступа к каталогам

Каталог в Linux – это особый тип файла, смысловым содержанием которого является список других файлов.

Каталоги имеют те же биты прав, что и остальные файлы. Однако то, что эти права означают, в случае каталогов накладывает определенную специфику.

Право на чтение в случае каталога означает лишь возможность узнавать список содержащихся в нем файлов. При этом что-то узнать о свойствах файлов (размере, датах, правах) не получится.

Право на исполнение в случае каталога означает, что в него можно заходить, просматривать и изменять содержимое файлов, если на них есть разрешения, узнавать свойства файлов.

Однако право на выполнение для каталога не дает права изменять имена файлов в этом каталоге. Ведь таким образом мы меняли бы данные самого каталога, а для этого нужно право на изменение самого каталога.

Если для каталога установлено только право на исполнение, то его содержимое просматривать нельзя. Можно лишь выполнять поиск файлов и обращаться к известным файлам.

На скрине создается каталог и в нем файл. С помощью команды chmod (рассматривается в следующем уроке) у каталога убираются права на чтение и запись для всех. После этого мы не можем просматривать его содержимое с помощью команды ls. Однако можем обращаться к находящемуся в нем файлу. Также можно перейти в каталог, то есть сделать его текущим (на скрине не показано).

Если каталог можно изменять (право на запись), то можно изменять состав файлов в нем, то есть можно удалять, переименовывать файлы, создавать новые. Причем все это возможно даже с файлами, доступ к которым запрещен для данной категории. Это создает дополнительную опасность, которая «лечится» вводом для каталогов дополнительного t-бита. При его наличии пользователь может выполнять файловые операции только со своими файлами.

Отметим пару вытекающих из вышесказанного особенностей:

  • Доступ к конкретному файлу зависит от наличия доступа на исполнение к каталогам на протяжении всего пути.

  • Изменять существующие файлы можно, не имея доступа на запись в каталог, достаточно иметь доступ на запись самого файла.

Курс с ответами к заданиям и дополнительными уроками

в PDF

Поговорив о пользователях и группах, самое время вспомнить про права доступа, которые для них настраиваются. Общая схема прав одинакова и для файлов, и для папок. Вы уже видели, как система отображает права доступа, в выводе команды ls -l, которая показывает содержимое директории:

Первые 10 символов содержат информацию о правах к файлу или каталогу. 

rw-

права пользователя-владельца

r--

права пользователей группы-владельца

r--

права всех остальных пользователей

Далее идёт имя пользователя-владельца и группы -владельца.

root

файл принадлежит пользователю root

root

файл принадлежит группе root

Исходя из этого, иерархия доступа на уровне пользователей разбивается следующим образом: права пользователя-владельца, права участников группы-владельца и права всех остальных. 

Соответственно, для каждой категории указывается, какие операции с файлом ей доступны: чтение (r), запись (w) или выполнение (x) — для исполняемых файлов. Для директорий параметры те же, но обозначают немного другое: просмотр директории (r), создание папок / файлов (w) внутри директории, переход в директорию (x).

Каждый из этих уровней доступа можно выразить в восьмеричной системе с помощью числового значения: 4 (r), 2 (w), 1 (x). Вот так мы и получаем общую схему прав:

a — любые пользователи
u — права пользователя g — права группы o — права всех остальных
r w x r w x r w x
4 2 1 4 2 1 4 2 1

Для отображения уровня прав помимо формата rwxrwxrwx используется упомянутый восьмеричный формат. Для этого достаточно сложить все уровни прав по категориям: 

rwxrwxrwx = (4+2+1), (4+2+1), (4+2+1) = 777

Теперь можно перейти к инструментам, которые позволяют управлять правами на файлы и директории.

Смена владельца файла или директории

Для смены владельца доступны два инструмента. Первый — chown, позволяет изменить пользователя и группу файла или папки:

chown [новый пользователь]:[новая группа] [файл или папка]

Если не указывать группу, изменится только пользователь-владелец. Если не указывать пользователя (:[новая группа]), изменится только группа-владелец. 

При изменении прав на директории можно использовать параметр -R. Он рекурсивно изменит владельца всех вложенных директорий и файлов. Представим, что нам нужно предоставить права на папку new-user для одноимённого пользователя и его группы. Команда для этого будет выглядеть так:

chown -R new-user:new-group /home/users/new-user

Второй инструмент — chgrp. В отличие от первого, меняет только группу-владельца:

chgrp [группа] [файл или папка]

Как и chown, может работать рекурсивно с помощью ключа -R.

Смена прав доступа к файлу или директории

Для работы непосредственно с правами используется команда chmod:

chmod [настройки прав] [файл или папка]

При работе с директориями опция -R позволит изменить права на все вложенные файлы и папки.

Настройки прав в chmod можно определять двумя способами:

  1. Указав категорию (u — пользователь-владелец, g — группа-владелец, o — другие пользователи, a — все пользователи), модификатор (+, - , =) и, соответственно, нужные права (r, w, x). 

    Например, представим, что у нас есть файл example.txt с максимальным уровнем прав для всех категорий пользователей: 

    Допустим, мы не хотим, чтобы кто-то в принципе мог запускать этот файл на выполнение. В таком случае нам нужно убрать параметр «x» из прав всех категорий пользователей сразу. Это можно сделать так: 

    chmod a-x example.txt

    Представим, что потом мы решили вернуть владельцу права на запуск файла. То есть нам нужно добавить параметр «x» в категорию пользователя-владельца:

    chmod u+x example.txt

    Если вдруг мы захотим изменить весь набор параметров для отдельной категории разом, это будет выглядеть следующим образом:

    chmod u=rwx example.txt
  2. Указав права в виде числового значения. Возможно, это не так прозрачно, но зато быстрее. В качестве параметра нам нужно передать это самое цифровое выражение уровня прав:

    chmod 777 example.txt 

    В примере мы назначили максимальный уровень доступа всем категориям пользователей.

    Соответственно, для изменения уровня прав отдельной категории пользователей нужно изменить только это числовое значение. Например, запретим исполнение файла для всех пользователей:

    chmod 666 example.txt

    А потом вернём, но только пользователю-владельцу:

    chmod 766 example.txt

Бывает, что нам нужно изменить права только на все папки или только на все файлы в определённой директории. Часто с этим можно столкнуться при настройке прав на файлы сайтов. Вот вам пара однострочников на этот случай: 

  • Смена прав на 755 для всех папок внутри /var/www/sites/example.com:

    find /var/www/sites/example.com/ -type d -exec chmod 755 {} ;
  • Смена прав на 644 для всех файлов внутри /var/www/sites/example.com:

    find /var/www/sites/example.com/ -type f -exec chmod 644 {} ;

Изменение атрибутов файлов

Помимо прав доступа и владельца каждый файл может иметь ряд атрибутов, определяемых на уровне файловой системы. Атрибуты показывают, какие операции могут или не могут проводиться с файлом в принципе, независимо от того, кто им владеет.

Посмотреть атрибуты файлов в текущей директории можно с помощью команды lsattr. Если запустить её без аргументов, она выведет атрибуты всех файлов в текущей директории. Если указать путь к файлу или папке, она перечислит свойства указанного файла или списка файлов в указанной папке соответственно:

lsattr example.txt

Первые 20 символов в строке предназначены для отображения атрибутов файла.

Список атрибутов может отличаться в зависимости от файловой системы. Вот список основных:

i

«godmode» — файл становится неуязвим для любых изменений. Его нельзя удалить, переименовать, изменить содержимое, создать символьную ссылку на него.

a

в файл с таким атрибутом можно только добавлять новые данные. Старое содержимое изменить или удалить не получится. Это пригодится для защиты от вредоносных вставок или замен в файлах, куда постоянно записываются данные — например, в логах. Доступ к изменению старого содержимого по умолчанию есть только у суперпользователя root.

s

активирует безвозвратное удаление файла. В том смысле, что после удаления файл нельзя будет восстановить с носителя — при удалении все использовавшиеся для хранения файла блоки на диске перезаписываются нулями.

u

активирует «обратимое» удаление файлов. Это значит, что при удалении файла с этим атрибутом его содержимое можно восстановить.

с

сжатый файл. Все данные, записываемые в файл, автоматически сжимаются, а данные, извлекаемые из файла — возвращаются в исходное состояние.

d

настраивает для файла исключение при использовании утилиты dump. То есть файл не будет включен в архив при создании резервной копии этим способом.

e

показывает, что файл в качестве указателей использует экстенты.

j

в журналируемых файловых системах (ext3, ext4) указывает на то, что при сохранении файла он сначала будет записан в журнал ФС, и только потом — на диск.

A

указывает, что при работе с файлом система не будет обновлять информацию о времени доступа к нему.

D

атрибут для директорий. Указывает, что все изменения в папке синхронно записываются на диск, минуя кэш.

S

указывает, что все изменения в файле с этим атрибутом записываются синхронно на диск, минуя кэш.

Изменить атрибуты файла позволяет команда chattr:

chattr [модификатор][изменяемые атрибуты] [целевой файл или папка]

То есть, если нам нужно защитить какой-то важный файл от посягательств, можно использовать такую команду:

chattr +i example.txt

Проверяем — посягательства не работают.

Если же нам нужно вернуть файл в нормальное состояние, нужно выполнить обратную операцию: 

chattr -i example.txt

Для просмотра более подробной информации о файловых атрибутах, их ограничениях и правилах применения используйте команду:

man chattr

В операционной системе Linux есть много отличных функций безопасности, но она из самых важных — это система прав доступа к файлам. Linux, как последователь идеологии ядра Linux в отличие от Windows, изначально проектировался как многопользовательская система, поэтому права доступа к файлам в linux продуманы очень хорошо.

И это очень важно, потому что локальный доступ к файлам для всех программ и всех пользователей позволил бы вирусам без проблем уничтожить систему. Но новым пользователям могут показаться очень сложными новые права на файлы в linux, которые очень сильно отличаются от того, что мы привыкли видеть в Windows. В этой статье мы попытаемся разобраться в том как работают права файлов в linux, а также как их изменять и устанавливать.

Изначально каждый файл имел три параметра доступа. Вот они:

  • Чтение — разрешает получать содержимое файла, но на запись нет. Для каталога позволяет получить список файлов и каталогов, расположенных в нем;
  • Запись — разрешает записывать новые данные в файл или изменять существующие, а также позволяет создавать и изменять файлы и каталоги;
  • Выполнение — вы не можете выполнить программу, если у нее нет флага выполнения. Этот атрибут устанавливается для всех программ и скриптов, именно с помощью него система может понять, что этот файл нужно запускать как программу.

Но все эти права были бы бессмысленными, если бы применялись сразу для всех пользователей. Поэтому каждый файл имеет три категории пользователей, для которых можно устанавливать различные сочетания прав доступа:

  • Владелец — набор прав для владельца файла, пользователя, который его создал или сейчас установлен его владельцем. Обычно владелец имеет все права, чтение, запись и выполнение.
  • Группа — любая группа пользователей, существующая в системе и привязанная к файлу. Но это может быть только одна группа и обычно это группа владельца, хотя для файла можно назначить и другую группу.
  • Остальные — все пользователи, кроме владельца и пользователей, входящих в группу файла.

Именно с помощью этих наборов полномочий устанавливаются права файлов в linux. Каждый пользователь может получить полный доступ только к файлам, владельцем которых он является или к тем, доступ к которым ему разрешен. Только пользователь Root может работать со всеми файлами независимо от их набора их полномочий.

Но со временем такой системы стало не хватать и было добавлено еще несколько флагов, которые позволяют делать файлы не изменяемыми или же выполнять от имени суперпользователя, их мы рассмотрим ниже:

Специальные права доступа к файлам в Linux

Для того, чтобы позволить обычным пользователям выполнять программы от имени суперпользователя без знания его пароля была придумана такая вещь, как SUID и SGID биты. Рассмотрим эти полномочия подробнее.

  • SUID — если этот бит установлен, то при выполнении программы, id пользователя, от которого она запущена заменяется на id владельца файла. Фактически, это позволяет обычным пользователям запускать программы от имени суперпользователя;
  • SGID — этот флаг работает аналогичным образом, только разница в том, что пользователь считается членом группы, с которой связан файл, а не групп, к которым он действительно принадлежит. Если SGID флаг установлен на каталог, все файлы, созданные в нем, будут связаны с группой каталога, а не пользователя. Такое поведение используется для организации общих папок;
  • Sticky-bit — этот бит тоже используется для создания общих папок. Если он установлен, то пользователи могут только создавать, читать и выполнять файлы, но не могут удалять файлы, принадлежащие другим пользователям.

Теперь давайте рассмотрим как посмотреть и изменить права на файлы в Linux.

Как посмотреть права доступа к файлам в Linux

Конечно, вы можете посмотреть права доступа к файлам в Linux с помощью файлового менеджера. Все они поддерживают эту функцию, но так вы получите неполную информацию. Для максимально подробной информации обо всех флагах, в том числе специальных, нужно использовать команду ls с параметром -l. Все файлы из каталога будут выведены в виде списка, и там будут показаны все атрибуты и биты.

Чтобы узнать права на файл linux выполните такую команду, в папке где находится этот файл:

ls -l

perm

За права файлов в linux тут отвечают черточки. Первая это тип файла, который рассмотрен в отдельной статье. Дальше же идут группы прав сначала для владельца, для группы и для всех остальных. Всего девять черточек на права и одна на тип.

Рассмотрим подробнее, что значат условные значения флагов прав:

  • — нет прав, совсем;
  • —x — разрешено только выполнение файла, как программы но не изменение и не чтение;
  • -w- — разрешена только запись и изменение файла;
  • -wx — разрешено изменение и выполнение, но в случае с каталогом, вы не можете посмотреть его содержимое;
  • r— — права только на чтение;
  • r-x — только чтение и выполнение, без права на запись;
  • rw- — права на чтение и запись, но без выполнения;
  • rwx — все права;
  • —s — установлен SUID или SGID бит, первый отображается в поле для владельца, второй для группы;
  • —t — установлен sticky-bit, а значит пользователи не могут удалить этот файл.

В нашем примере, файл test1 имеет типичные разрешения для программ, владелец может все, группа только чтение и выполнение, а все остальные — только выполнение. Для test2 дополнительно установлен флаг SUID и SGID. А для папки test3 установлен Sticky-bit. Файл test4 доступный всем. Теперь вы знаете как посмотреть права на файл linux.

Как изменить права файла в Linux

Чтобы изменить права на файл в linux вы можете использовать утилиту chmod. Она позволяет менять все флаги, включая специальные. Рассмотрим ее синтаксис:

$ chmod опции категориядействиефлаг файл

Опции сейчас нас интересовать не будут, разве что только одна. С помощью опции -R вы можете заставить программу применять изменения ко всем файлам и каталогам рекурсивно.

Категория указывает для какой группы пользователей нужно применять права, как вы помните доступно только три категории:

  • u — владелец файла;
  • g — группа файла;
  • o — другие пользователи.

Действие может быть одно из двух, либо добавить — знак «+», либо убрать — знак — «-«. Что касается самих прав доступа, то они аналогичны выводу утилиты ls: r — чтение, w — запись, x — выполнение, s — suid/sgid, в зависимости от категории, для которой вы его устанавливаете, t — устанавливает sticky-bit. Например, всем пользователям полный доступ к файлу test5:

chmod ugo+rwx test5

Или заберем все права у группы и остальных пользователей:

chmod go-rwx test5

Дадим группе право на чтение и выполнение:

chmod g+rx test5

Остальным пользователям только чтение:

chmod o+r test5

Для файла test6 установим SUID:

chmod u+s test6

А для test7 — SGID:

chmod g+s test7

Посмотрим что получилось:

ls -l

perm1

Как видите, изменить права на файл в Linux очень просто. К тому же вы можете изменить основные права с помощью файлового менеджера.

Выводы

Вот и все, теперь вы знаете не только что такое права доступа к файлам в Linux, но и как их посмотреть, и даже как их изменить. Это очень важная тема, в которой действительно стоит разобраться новичкам, чтобы использовать свою систему более полноценно. Если у вас остались вопросы, спрашивайте в комментариях!

На завершение хочу предложить неплохое видео про права доступа в Linux:

Creative Commons License

Статья распространяется под лицензией Creative Commons ShareAlike 4.0 при копировании материала ссылка на источник обязательна .

Понравилась статья? Поделить с друзьями:
  • Правильное правописание ошибка
  • Пр38 ваз ошибка
  • Почему экран монитора стал большим как исправить
  • Правильно расположите последовательность команд программ print ошибка некорректные данные
  • Ппдгр ошибка проверки версии спро1 базовое соединение закрыто непредвиденная ошибка при приеме