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

Tag/tag.png

Candidate for Deletion
This article may not be appropriate for this wiki, and may be deleted. More info…

Содержание

Contents

  1. Права доступа в системе Linux
  2. Команда chmod

    1. Символьная форма прав доступа
    2. Числовая форма прав доступа
    3. Примеры
  3. Команда chown
  4. Команда chgroup

Права доступа в системе Linux

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

Права доступа подразделяются на три типа:

  • чтение (read)

  • запись (write)

  • выполнение (execute)

Разрешение на чтение позволяет пользователю читать содержимое файлов, а в случае каталогов — просматривать перечень имен файлов в каталоге (используя, например, команду ls). Разрешение на запись позволяет пользователю писать в файл, изменять его или удалять. Для каталогов это дает право cоздавать в каталоге новые файлы и каталоги, или удалять файлы в этом каталоге. Наконец, разрешение на выполнение позволяет пользователю выполнять файлы (как бинарные программы, так и командные файлы). Если на файле стоит атрибут Execute, то независимо от его расширения он считается программой, которую можно запустить. (Вот почему в *nix не принято ставить исполняемым файлам расширения по типу DOS’овских *.com, *.exe, *.bat. Вообще в Unix/Linux нет такого жесткого понятия расширение файла, как в Dos/Windows, и система сама определяет тип файлов независимо от их расширения, но это — уже другая история…). Так же атрибут выполнения может стоять у shell-скриптов, CGI-скриптов, и у всего, что можно хоть как-то запустить. Разрешение на выполнение применительно к каталогам означает возможность выполнять команды вроде cd.

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

  • владельцы — у каждого файла в Linux’e есть один владелец.

  • группы — с каждым файлом связана группа пользователей этого файла.

  • остальные пользователи.

Владельцем файла становится юзер, который создал этот файл. Короче говоря, для файла все юзеры делятся на 3 типа: хозяин, или владелец, юзеры, состоящие в одной группе с владельцем, и все остальные юзеры. Для каждого типа — свои права. Учтите, что директории и все системные устройства в UNIX являются обычными файлами. Тот же самый /dev/fd0 — это не сам Floppy disk, а всего лишь файл, связанный с флопповодом. Поэтому, если root запретил юзеру доступ к этому файлу, тот не сможет использовать флопповод (так же обстоят дела с модемами, хардами и т.п.). Владельцем всех системных файлов является root. Он же имеет право забирать файлы у одного юзера и передавать их другому (менять владельца).

Команда chmod

Изменить права доступа к файлу может либо его владелец, либо сам root. Делается это командой chmod. Существует две формы представления прав доступа: символьная и цифровая.

Символьная форма прав доступа

Если войти в любой каталог, где есть файлы, и набрать ls -l, то появится список всех файлов в этом каталоге и права доступа в символьной форме. Строка прав доступа состоит из 10 символов. Первый символ указывает на тип файла: d — директория, — обычный файл. Три последующих — права доступа владельца к этому файлу. Если первый символ из этих трех — r, владелец имеет право читать этот файл, а если , то не имеет. Следующие 2 символа — w — писать и x — запускать. Если вместо них стоит , значит, владелец этого права не имеет. Еще 3 символа — права доступа группы, еще три — права всех остальных пользователей.

Примеры:

drwxrwxrwx — директория, к которой все имеют любые права доступа.

-rwxr—r— — обычный файл, владелец может делать все, а остальные — только читать.

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

Важно заметить, что права доступа, которые имеет файл, зависят также от прав доступа к каталогу, в котором этот файл находится. Например, даже если файл имеет -rwxrwxrwx, другие пользователи не смогут до него добраться, если у них не будет прав на чтение и выполнение каталога, в котором находится файл. Например, если юзер захочет ограничить доступ ко всем своим файлам, он может просто изменить права доступа своего домашнего каталога /home/user на drwx——. Таким образом, никто другой не будет иметь доступ в его каталог, а следовательно посторонним будут недоступны и все файлы. Так что, пользователь может не заботиться об индивидуальной защите своих файлов. Другими словами, чтобы иметь доступ к файлу, вы должны иметь доступ ко всем каталогам, лежащим на пути от корня к этому файлу, а также разрешение на доступ собственно к этому файлу. Обычно пользователи UNIX весьма открыты всеми своими файлами. По умолчанию файлам устанавливается защита -rw-r—r—, которая позволяет другим пользователям читать файлы, но ни коим образом их не менять. Каталогам обычно устанавливаются права доступа drwxr-xr-x, что позволяет другим пользователям ходить с правами экскурсантов по вашим каталогам, но ничего в них не трогать и не записывать.

Но многие пользователи хотят держать других подальше от своих файлов. Установив права доступа файла -rw——-, вы никому не покажете этот файл и не дадите записать в него. Также хорошо закрывает файлы защита соответствующего каталога drwx——.

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

chmod {a,u,g,o}{+,-}{r,w,x} <filenames>

Кратко, вы выбираете из all (все), user (пользователь), group (группа) или other (другие). Далее указываете, либо вы добавляете права (+), либо лишаете прав (). И наконец, вы указываете один или несколько режимов: read, write или execute.

Числовая форма прав доступа

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

  • 400 — владелец имеет право на чтение
  • 200 — владелец имеет право на запись
  • 100 — владелец имеет право на выполнение
  • 40 — группа имеет право на чтение
  • 20 — группа имеет право на запись
  • 10 — группа имеет право на выполнение
  • 4 — остальные имеют право на чтение
  • 2 — остальные имеют право на запись
  • 1 — остальные имеют право на выполнение

Теперь осталось только просуммировать числа, соответствующие тем правам доступа, которые мы хотим поставить файлу.

Примеры

Символьная форма

chmod a+r stuff

Дает всем пользователям право читать файл stuff.

chmod +r stuff

То же самое, что и ранее (a — по умолчанию).

chmod og-x stuff

Лишает права на выполнение всех, кроме владельца.

chmod u+rwx stuff

Разрешает владельцу все (read, write и execute).

chmod o-rwx stuff

Запрещает все (read, write и execute) пользователям категории другие (other).

=== Числовая форма===

400+200+100+40+4=744

chmod 744 stuff

владелец может делать все, а остальные — только читать.

400+40+4=444

chmod 444 stuff

все имеют право только на чтение.

400+100+10+1=611

chmod 611 stuff

владелец может читать и выполнять, остальные — только выполнять.

400+200+100+40+10+4+1=755

chmod 755 script

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

Команда chown

Изменение владельца файла осуществляется командой chown, например:

sudo chown <имя нового владельца> <имя файла>

Для передачи каталога надо вводить:

sudo chown -R <имя нового владельца> <имя каталога>

Команда chgroup

Изменение группы, которой принадлежит файл.

sudo chown <название новой группы> <имя файла>

Для передачи каталога надо вводить:

sudo chown -R <название новой группы> <имя каталога>

Valery V. Kachurov

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

Команда chmod в Linux
Команда chmod, команда chown и команда chgrp.

Оглавление

  • Команда chmod
    • Изменение прав доступа командой chmod
      • Запись прав доступа числом
      • Запись прав доступа символами
      • Рекурсивное изменение прав доступа
      • Видео-обзор команды chmod
    • Команда chown — изменение владельца и группы
    • Команда chgrp — изменение группы
  • Резюме

Команда chmod

Команда chmod предназначена для изменения прав доступа файлов и директорий в Linux. Название команды произошло от словосочетания «change mode».

Синтаксис команды chmod следующий:

chmod разрешения имя_файла

Разрешения можно задавать двумя способами:

  • Числом
  • Символами

Изменение прав доступа командой chmod

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

Пример:

chmod 764 myfile

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

  • Первая цифра используется для указания прав доступа для пользователя.
  • Вторая цифра для группы.
  • Третья для всех остальных.

В таблице ниже приводятся все возможные комбинации разрешений rwx и соответсвующие им числа (которые используются в команде chmod):

Число Разрешения Символьное обозначение
0 разрешения отсутствуют
1 x — запуск —x
2 w — изменение -w-
3 x+w — запуск+изменение -wx
4 r — чтение r—
5 r+x — чтение+запуск r-x
6 r+w — чтение+изменение rw-
7 r+w+x — чтение+изменение+запуск rwx

Рассмотрим использование команды chmod с записью прав доступа числом на примере. Установим для файла права доступа 764:

chmod 764 myfile

Это означает (см. таблицу выше), что для файла myfile мы устанавливаем права доступа 764, которые означают:

  • 7 — права для владельца-пользователя. Владелец файла может читать, изменять и запускать файл (r+w+x).
  • 6 — права для группы. Пользователи, которые принадлежат группе могут читать и изменять файл (r+w).
  • 4 — права для всех остальных. Все остальные могут только читать файл (r).

Если записать 764 с помощью символов (см. таблицу), то мы получим: «rwxrw-r-».

Команда chmod

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

Числовое
обозначение
«rwx»-обозначение Описание
400 -r——— Владелец файла может только читать файл. Для всех остальных все действия с файлом запрещены.
644 -rw-r—r— Все пользователи могут читать файл. Владелец может изменять файл.
660 -rw-rw—- Владелец и группа могут читать и изменять файл. Для всех остальных все действия с файлом запрещены.
664 -rw-rw-r— Все могут читать файл. Владелец и группа могут изменять.
666 -rw-rw-rw- Все могут читать и изменять файл.
700 -rwx—— Владелец может читать, изменять и запускать файл. Для всех остальных все действия с файлом запрещены.
744 -rwxr—r— Все могут читать файл. Владелец может также изменять и запускать файл.
755 -rwxr-xr-x Все могут читать и запускать файл. Владелец может также изменять файл.
777 -rwxrwxrwx Все пользователи могут читать, изменять и редактировать файл.

Запись прав доступа символами

Примеры:

chmod +x myfile1
chmod g=rw myfile2
chmod u-w myfile3

Как вы можете видеть, в данном формате права доступа задаются символами rwx, но в синтаксисе используются и другие вспомогательные символы, например, математические операции «+» и «» и такие символы как, например, «g» или «u».

Общий синтаксис можно записать примерно так:

chmod (владелец)(математическая операция)(разрешения) имя_файла

Обозначения для владельцев файла следующие:

Обозначение Описание
u Владелец-пользователь.
g Группа.
o Все остальные.
a Вообще все.

Математические операции означают следующее:

Оператор Описание
+ Добавляет к текущим правам доступа новое разрешение.
Удаляет из текущих прав доступа определенное разрешение.
= Устанавливает полностью новые разрешения (предыдущие перезаписываются новыми).

В одной команде можно перечислять владельцев и их разрешения через запятую (см. пример ниже).

Рассмотрим примеры:

  • chmod +x myfile1

    В данном случае мы не используем обозначения для владельцев, а значит разрешения устанавливаются для всех пользователей. «+x» означает — установить разрешение на запуск (x) файла для всех пользователей. Это эквивалентно выполнению команды: chmod a+x myfile1.

  • chmod g=rw myfile2

    Здесь используется обозначение g и символ равенства «=». Это означает, что для группы мы устанавливаем права доступа на чтение и запись файла (rw).

  • chmod u-w myfile3

    Для владельца файла (u) мы удаляем разрешение на изменение (w) файла.

  • chmod ug+x myfile2

    Разрешаем владельцу (u) и группе (g) запускать файл (x).

  • chmod u+x,g-w,o-r myfile3

    Это как раз тот случай, когда мы перечисляем владельцев через запятую и устанавливаем для них разрешения. Для владельца файла (u) мы разрешаем запуск файла, для группы (g) мы запрещаем изменять файл, для всех остальных (o) мы запрещаем читать файл.

Рекурсивное изменение прав доступа

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

chmod -R 644 Mydir

И еще один момент. Если пользователь не является владельцем файла, но ему нужно изменить права доступа у данного файла, то команду chmod необходимо выполнять с использованием sudo, например:

sudo chmod 644 file

Видео-обзор команды chmod

Команда chown — изменение владельца и группы

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

Для изменения владельца файла используется следующий синтаксис:

chown новый_владелец имя_файла

Например, установим для файла myfile нового владельца vasya:

chown vasya myfile

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

chown новый_владелец:новая_группа имя_файла

Например, установим для файла myfile нового владельца vasya и группу sambashare:

chown vasya:sambashare myfile

Команда chgrp — изменение группы

Есть еще одна команда — chgrp. Она позволяет изменить только группу. Например:

chgrp sambashare myfile

Резюме

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

Разрешения задаются для владельца, группы и для всех остальных.

Есть три вида разрешений — r — чтение, w — изменение, x — запуск.

Чтобы изменить разрешения у файла используется команда chmod.

Чтобы изменить владельца или группу используется команда chown.

Чтобы изменить группу используется chgrp.

Состояние перевода: На этой странице представлен перевод статьи File permissions and attributes. Дата последней синхронизации: 10 февраля 2022. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

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

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

Просмотр разрешений

Чтобы посмотреть разрешения (или права файла), используйте команду ls с опцией -l для просмотра содержимого каталога, например:

$ ls -l /путь/к/каталогу
итого 128
-rw-rw-r-- 1 archie users  5120 апр 27 08:28 customers.ods
-rw-r--r-- 1 archie users  3339 апр 27 08:28 todo
-rwxr-xr-x 1 archie users  2048 май  6 12:56 myscript.sh
drwxr-xr-x 6 archie users  4096 июл  5 17:37 Документы
drwxr-xr-x 2 archie users  4096 июл  5 13:45 Загрузки
drwxr-xr-x 2 archie users  4096 июл  5 21:03 Рабочий стол

Здесь мы должны сосредоточиться на первом столбце. Например, обратив внимания на значение drwxrwxrwx+, каждый символ которого объясняется в следующих таблицах:

d rwx rwx rwx +
Обозначет тип файла, технически не относится к разрешениям. Смотрите типы файлов (UNIX) для ознакомления со всеми возможными значениями. Разрешения, которые имеет владелец к файлу (объяснения ниже). Разрешения, которые имеет группа к файлу (объяснения ниже). Разрешения, которые имеют все остальные пользователи к файлу (объяснения ниже). Одиночный символ, который указывает на применение альтернативного метода доступа. Пробел указывает на отсутствие альтернативного метода доступа. Символ . обозначает файл с контекстом безопасности, но без другого альтернативного метода доступа. Файл с любой другой комбинацией альтернативных методов доступа помечается символом +, например в случае Access Control Lists (Русский).

Каждая из трёх триад разрешений (rwx в примере выше) может состоять из следующих символов:

Символ Влияние на файлы Влияние на директории
Разрешение на чтение (первый символ) - Файл не может быть прочитан. Содержимое каталога не может быть показано.
r Файл можно прочитать. Содержимое каталога может быть показано.
Разрешение на запись (второй символ) - Файл не может быть изменён. Содержимое каталога не может быть изменено.
w Файл может быть изменён. Содержимое каталога может быть изменено (создание новых файлов или папок; переименовывание и удаление существующих файлов или папок); дополнительно требуется разрешение на выполнение, в противном случае, это разрешение не действует.
Разрешение на выполнение (третий символ) - Файл не может быть выполнен. Каталог не может быть доступен с помощью cd.
x Файл может быть выполнен. Доступ к каталогу можно получить с помощью cd. Это единственный бит, который на практике можно считать «наследуемым» от каталогов-предков; фактически, если какой-либо каталог в пути не имеет установленного бита x, конечный файл или каталог также оказывается недоступен независимо от его разрешений; подробнее смотрите path_resolution(7).
s Показывает установленный suid бит: в триаде пользователя — setuid; в триаде группы — setgid; в триаде остальных не встречается; также подразумевает, что установлен бит x.
S То же, что и s, но бит x не установлен; редко встречается у обычных файлов, бесполезен для каталогов.
t Sticky bit; встречается только в триаде остальных; также подразумевает, что установлен бит x.
T То же, что и t, но бит x не установлен; редко встречается у обычных файлов.

Смотрите info Coreutils -n "Mode Structure" и chmod(1) для более подробной информации.

Совет: Также можно посмотреть разрешения с помощью команды namei -l путь.

Примеры

Давайте посмотрим несколько примеров для лучшего понимания:

drwx------ 6 archie users  4096 июл  5 17:37 Документы

Archie имеет полный доступ к каталогу Документы. Он может просматривать, создавать, переименовывать и удалять любые файлы в Документах, независимо от прав доступа к файлам. Его возможность получить доступ к файлам зависит от разрешений самого файла.

dr-x------ 6 archie users  4096 июл  5 17:37 Документы

Archie имеет полный доступ, за исключением создания, переименовывания и удаления файлов. Он может просматривать список файлов и (если позволяют разрешения к файлам) может получить доступ к существующему файлу в Документах.

d-wx------ 6 archie users  4096 июл  5 17:37 Документы

Archie не может выполнить ls в Документах, но если он знает имя существующего файла, то он может просмотреть, переименовать и удалить или (если позволяют разрешения) получить доступ к нему. Также он может создавать новые файлы.

d--x------ 6 archie users  4096 июл  5 17:37 Документы

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

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

Давайте посмотрим на другой пример, на этот раз файл, а не каталог:

-rw-r--r-- 1 archie users  5120 июн 27 08:28 foobar

Здесь мы видим первой буквой не d, а -. Таким образом мы знаем, что это файл, а не директория. Благодаря разрешению rw- владелец может читать и писать, но не выполнять. Может показаться странным, что у владельца нет всех трёх разрешений, но разрешение x не требуется, так как это файл текста/данных, который может быть прочитан текстовым редактором, например Gedit, EMACS или программным обеспечением подобно R, а не исполнятся самим файлом (если он содержит что-то вроде программного кода на Python, то тогда подобное вполне возможно). Для группы установлены права доступа r--, поэтому у группы есть возможность читать файл, но не записывать и не редактировать его — фактически это установка чего-либо только для чтения. Мы видим, что подобные разрешения применимы и ко всем остальным пользователям.

Изменение разрешений

chmod это команда в Linux и других Unix-подобных операционных системах, которая позволяет изменять права доступа к файлам или каталогам.

Текстовый метод

Для изменения прав доступа — или режима доступа — к файлу используйте команду chmod в терминале. Ниже приведена общая структура команды:

chmod кто=разрешения имя_файла

Где кто — любая из нескольких букв, каждая из которых обозначает, кому дано разрешение. Они следующие:

  • u (user): пользователь, который является владельцем файла.
  • g (group): группа пользователей, которой принадлежит этот файл.
  • o (other): другие пользователи, то есть все остальные.
  • a (all): все сразу; используйте вместо ugo.

Права доступа обозначаются так же, как описано в разделе #Просмотр разрешений (r, w и x).

Теперь посмотрите на некоторые примеры использования этой команды. Предположим, вы захотели сильно защитить каталог Документы и отказать всем, кроме себя, в разрешении на чтение, запись и выполнение (или, в данном случае, поиск/просмотр) внутри него:

До: drwxr-xr-x 6 archie users 4096 июл 5 17:37 Документы

$ chmod g= Документы
$ chmod o= Документы

После: drwx------ 6 archie users 4096 июл 6 17:32 Документы

Здесь, поскольку вы хотите отказать в разрешениях, вы не ставите никаких букв после =, где будут введены разрешения. Из этого видно, что только разрешения владельца — это rwx, а все остальные разрешения — это -.

Это можно восстановить с помощью:

До: drwx------ 6 archie users 4096 июл 6 17:32 Документы

$ chmod g=rx Документы
$ chmod o=rx Документы

После: drwxr-xr-x 6 archie users 4096 июл 6 17:32 Документы

В следующем примере вы предоставляете права на чтение и выполнение группе и другим пользователям, поэтому вы ставите следующие буквы для этих прав (r и x) после =, не оставляя пробелов.

Вы можете упростить это поместив более одной буквы кто в одну и ту же команду, например:

$ chmod go=rx Документы

Примечание: Не имеет значения, в каком порядке вы ставите буквы кто или буквы разрешений в команде chmod: команды chmod go=rx file и chmod og=xr file делают одно и то же.

Рассмотрим ещё один пример: предположим, вы хотите изменить файл foobar так, чтобы у вас были разрешения на чтение и запись, а коллеги из группы users, которые могут совместно работать с файлом foobar, также могли читать и записывать файл, а все остальные пользователи могли только читать его:

До: -rw-r--r-- 1 archie users 5120 июн 27 08:28 foobar

$ chmod g=rw foobar

После: -rw-rw-r-- 1 archie users 5120 июн 27 08:28 foobar

Это точно такой же пример, как и первый, но с файлом, а не каталогом, и вы предоставляете разрешение на запись (просто для того, чтобы привести пример предоставления каждого разрешения).

Сокращения для текстового метода

Команда chmod позволяет добавлять и вычитать разрешения из существующих, используя + или - вместо =. Это отличается от описанных выше команд, которые по сути переписывают разрешения (например, чтобы изменить разрешения с r-- на rw-, вам всё равно нужно указать r и w после = в вызове команды chmod. Если вы пропустите r, то = перезапишет разрешения и таким образом удалит разрешение r. Использование + и - позволяет избежать этого, добавляя или отнимая текущий набор разрешений).

Давайте попробуем применить + и - на предыдущем примере добавления разрешений на запись в группу:

До: -rw-r--r-- 1 archie users 5120 июн 27 08:28 foobar

$ chmod g+w foobar

После: -rw-rw-r-- 1 archie users 5120 июн 27 08:28 foobar

Ещё пример, который запрещает запись абсолютно всем (a):

До: -rw-rw-r-- 1 archie users 5120 июн 27 08:28 foobar

$ chmod a-w foobar

После: -r--r--r-- 1 archie users 5120 июн 27 08:28 foobar

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

$ chmod -R a+rX ./data/

Копирование разрешений

С помощью chmod можно взять разрешения у одного класса, например владельца, и выставить те же разрешения группе или даже всем. Для этого вместо r, w или x после = поставьте нужную вам букву кто. Например:

До: -rw-r--r-- 1 archie users 5120 июн 27 08:28 foobar

$ chmod g=u foobar

После: -rw-rw-r-- 1 archie users 5120 июн 27 08:28 foobar

Эта команда по сути означает «изменить разрешения группы (g=), чтобы они были такими же, как у владельца (=u)». Обратите внимание, что вы не можете скопировать одновременно несколько разрешений или добавить новые, то есть такая команда:

$ chmod g=wu foobar

выдаст ошибку.

Числовой метод

Команда chmod позволяет задавать разрешения в виде чисел.

Использование чисел — это ещё один метод, который позволяет редактировать разрешения одновременно для владельца, группы и остальных, а также биты setuid, setgid и sticky. Основная структура такова:

$ chmod xxx путь

где xxx это три цифры, каждое их которых может иметь значение от 0 до 7. Первая цифра задаёт разрешения для владельца, вторая — для группы, а третья — для всех остальных.

Права r, w и x соответствуют следующим числам:

r=4
w=2
x=1

Чтобы объединить нужные права в одно трёхзначное число, нужно суммировать соответствующие значения. Например, если вы хотите предоставить владельцу каталога права на чтение, запись и выполнение, а группе и всем остальным — только права на чтение и выполнение, то числовые значения будут выглядеть следующим образом:

  • Владелец: rwx=4+2+1=7
  • Группа: r-x=4+0+1=5
  • Остальные: r-x=4+0+1=5
$ chmod 755 путь

Это эквивалентно следующим двум командам:

$ chmod u=rwx путь
$ chmod go=rx путь

Чтобы посмотреть текущие права в числовом виде, можно использовать команду stat(1):

$ stat -c %a путь

где %a задаёт числовой формат вывода.

Большинство каталогов имеют значение 755, которое разрешает чтение, запись и выполнение для владельца, но запрещает запись для всех остальных, а файлы обычно имеют значение 644, разрешающее чтение и запись для владельца, но только чтение для всех остальных; так как большинство файлов не являются исполняемыми, то бит выполнения x у них не установлен.

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

До: -rw-r--r-- 1 archie users 5120 июн 27 08:28 foobar

$ chmod 664 foobar

После: -rw-rw-r-- 1 archie users 5120 июн 27 08:28 foobar

Для исполняемого файла вы могли бы задать 774, если бы вы хотели предоставить разрешение на исполнение владельцу и группе. Если бы вы хотели, чтобы у всех было разрешение только на чтение, число было бы 444. Если рассматривать r как 4, w как 2 и x как 1, то это, вероятно, самый простой способ вычислить числовые значения для использования chmod xxx путь, но существует также двоичный метод, при котором каждое разрешение рассматривается как двоичное число, а затем они объединяются в обычное десятичное число. Этот способ немного более запутанный, но для полноты картины он здесь приведён.

Рассмотрим такой набор разрешений:

-rwxr-xr--

Если вы пропишите 1 на месте каждого выданного разрешения и 0 на месте отсутствующих разрешений, получится такое двоичное число:

-rwxrwxr-x
 111111101

Затем можно преобразовать двоичные числа:

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

Итоговое значение получается 775.

Допустим, мы хотим удалить разрешение на запись из группы:

-rwxr-xr-x
 111101101

Итоговое значение будет равно 755, и вы можете использовать команду chmod 755 имяфайла, чтобы снять разрешение на запись. Обратите внимание, что вы получите одно и то же трёхзначное число независимо от того, какой метод вы используете. Используете ли вы текст или цифры, зависит от личных предпочтений и скорости набора текста. Если вы хотите вернуть файлу или каталогу права по умолчанию, например, разрешение на чтение и запись (и выполнение) для владельца, но запретить запись для всех остальных, может быть быстрее использовать chmod 755/644 имяфайла. Однако если вы меняете разрешения на что-то нестандартное, проще и быстрее использовать текстовый метод, а не выполнять преобразование в числа, в процессе которого можно случайно ошибиться. Для пользователя, который использует chmod изредка, вероятно, нет существенной разницы в скорости использования обоих методов.

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

setuid=4
setgid=2
sticky=1

Например, chmod 2777 имяфайла выдаст всем права на чтение/запись/выполнение и включит бит setgid.

Массовое изменение разрешений

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

Чтобы выставить разрешения 755 только каталогам:

$ find каталог -type d -exec chmod 755 {} +

Чтобы выставить разрешения 644 только файлам в каталоге:

$ find каталог -type f -exec chmod 644 {} +

Изменение владельца

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

Рассмотрим следующий пример: создание нового раздела с помощью GParted для резервного копирования данных. Gparted делает всё это от имени root, поэтому по умолчанию всё принадлежит root. Всё это хорошо, но обычные пользователи не смогут записать данные в смонтированный раздел.

brw-rw---- 1 root disk 8,    9 июл  6 16:02 sda9
drwxr-xr-x 5 root root    4096 июл  6 16:01 Backup

В данном примере устройством в /dev владеет root, как и каталогом для монтирования (/media/Backup). Чтобы изменить владельца каталога, можно сделать следующее:

До: drwxr-xr-x 5 root root 4096 июл 6 16:01 Backup

# chown archie /media/Backup

После: drwxr-xr-x 5 archie root 4096 июл 6 16:01 Backup

Теперь новый владелец archie может записывать данные в этот раздел без изменения разрешений (потому что изначально уже стояли права rwx, разрешающие запись владельцу).

Примечание:

  • chown всегда сбрасывает биты setuid и setgid.
  • Обычные пользователи не могут использовать chown для «передачи» файлов, которыми они владеют, другому пользователю.

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

Списки управления доступом (Access Control Lists, ACL) предоставляют дополнительный, более гибкий механизм разрешений для файловых систем, позволяя устанавливать разрешения для любого пользователя или группы на любой файл.

Umask

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

Атрибуты файла

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

Важно: По умолчанию cp, rsync и другие подобные программы не сохраняют эти атрибуты.

Пакет e2fsprogs содержит программы lsattr(1) и chattr(1), которые позволяют просмотреть и изменить атрибуты файла соответственно.

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

  • a — append only: Файл может быть открыт только для добавления.
  • c — compressed: Включить сжатие на уровне файловой системы для файла.
  • i — immutable: Не может быть изменён, удалён или переименован. Может быть установлен только пользователем root.
  • j — data journaling: Использовать журнал для записи данных файла так же, как и метаданных.
  • m — no compression: Отключить сжатие на уровне файловой системы для файла.
  • A — no atime update: Время получения доступа к файлу не будет обновляться.
  • C — no copy on write: Отключение copy-on-write на поддерживающих это файловых системах.

Полный список атрибутов и подробную информацию о них можно прочитать в chattr(1).

Пример установки атрибута immutable:

# chattr +i /путь/к/файлу

Для снятия атрибута замените + на -.

Расширенные атрибуты

Расширенные атрибуты (Extended attributes) — это пары ключ-значение, привязанные к файлу или каталогу. Существует четыре их класса: security, system, trusted и user.

Важно: По умолчанию cp, rsync и другие подобные программы не сохраняют расширенные атрибуты, смотртие #Сохранение расширенных атрибутов.

Расширенные атрибуты используются для Capabilities.

Пользовательские расширенные атрибуты

Класс user может использоваться для хранения дополнительной информации о файле. Пример создания атрибута:

$ setfattr -n user.checksum -v "3baf9ebce4c664ca8d9e5f6314fb47fb" foo.txt

Просмотр имеющихся атрибутов:

$ getfattr -d foo.txt
# file: foo.txt
user.checksum="3baf9ebce4c664ca8d9e5f6314fb47fb"

Удаление атрибута:

$ setfattr -x user.checksum foo.txt

Сохранение расширенных атрибутов

Команда Требуемый флаг
cp --preserve=mode,ownership,timestamps,xattr
mv сохраняет по умолчанию1
tar --xattrs для создания --xattrs-include='*' для извлечения
bsdtar -p для извлечения
rsync --xattrs
  1. mv без предупреждения убирает расширенные атрибуты, если целевая файловая система их не поддерживает.

Чтобы сохранить расширенные атрибуты в текстовых редакторах, настройте их на усечение (truncate) файлов при сохранении вместо использования rename(2).[1]

Советы и рекомендации

Preserve root

Используйте флаг --preserve-root, чтобы предотвратить рекурсивное выполнение chmod на /. Это поможет, например, предотвратить удаление бита выполнения во всей системе и тем самым сломать систему. Чтобы использовать этот флаг всегда, пропишите его в псевдониме. Смотрите также [2].

Смотрите также

  • chattr — Википедия
  • Linux File Permission Confusion
  • Linux File Permission Confusion part 2
  • wikipedia:Extended file attributes#Linux
  • Extended attributes: the good, the not so good, the bad.
  • Backup and restore file permissions in Linux
  • Why is «chmod -R 777 /» destructive?

Поговорив о пользователях и группах, самое время вспомнить про права доступа, которые для них настраиваются. Общая схема прав одинакова и для файлов, и для папок. Вы уже видели, как система отображает права доступа, в выводе команды 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

Понравилась статья? Поделить с друзьями:

Читайте также:

  • Как изменить права при смене фамилии
  • Как изменить права пользователя через командную строку
  • Как изменить права пользователя debian
  • Как изменить права на файл total commander
  • Как изменить права на папку etc

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии