|
Candidate for Deletion |
Содержание
Contents
- Права доступа в системе Linux
-
Команда chmod
- Символьная форма прав доступа
- Числовая форма прав доступа
- Примеры
- Команда chown
- Команда 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 + rwx filename для добавления разрешений.
- chmod -rwx имя_директора для удаления разрешений.
- chmod + x filename, чтобы разрешить исполняемые файлы.
- chmod -wx filename, чтобы получить права на запись и исполняемые файлы.
Как изменить права доступа к диску?
Нажмите одновременно клавиши Windows + E, чтобы открыть проводник. Выберите букву диска для внешнего жесткого диска и щелкните его правой кнопкой мыши, чтобы выбрать «Свойства». Выберите вкладку «Безопасность» в окне «Свойства». Теперь, нажмите на кнопку Edit для внесения изменений в разрешения.
Как изменить разрешения на внешнем жестком диске в Linux?
B. По вопросу разрешения:
- Перейдите в каталог вашего внешнего диска. Код: выберите все cd / media / user / ExternalDrive.
- Используйте эту команду, чтобы проверить право собственности / разрешения. Код: выберите все ls -al. …
- Измените разрешения с помощью любой из этих команд. Код: выберите все sudo chmod -R 750 Data / Movies /
Как удалить разрешения с внешнего жесткого диска?
Войдя в систему как администратор, щелкните правой кнопкой мыши корневой каталог диска и выберите «Свойства». Щелкните вкладку «Безопасность», затем кнопку «Дополнительно». В диалоговом окне «Дополнительные параметры безопасности» диска щелкните вкладку «Владелец», а затем кнопку «Изменить».
Как мне изменить права root в Linux?
Измените владельца файла на root с помощью набрав chown root test и нажав ; затем укажите файл с помощью l test и нажмите .
…
Изменение прав доступа к файлу.
Опция | Смысл |
---|---|
u | Пользователь; изменить права доступа пользователя или владельца |
g | Группа; изменить разрешения группы |
o | Другие; изменить другие разрешения |
Что означает — R — Linux?
Файловый режим. Буква r означает у пользователя есть разрешение на чтение файла / каталога. … А буква x означает, что у пользователя есть разрешение на выполнение файла / каталога.
Как мне изменить разрешения на моей SD-карте?
Перейдите на вкладку «Безопасность» в середине окна «Свойства»; вы увидите «Чтобы изменить разрешения, нажмите «Изменить». Здесь вы можете изменить разрешение на чтение / запись на целевом диске. Итак, нажмите «Изменить», и сразу же появится окно «Безопасность».
Как мне предоставить кому-либо доступ к моему жесткому диску?
Перейдите к Части 2 и «Предоставьте разрешения» себе. В проводнике Windows щелкните правой кнопкой мыши диск, владельцем которого вы только что являетесь, и выберите «Свойства» из раскрывающегося меню. В разделе «Свойства» перейдите на вкладку «Безопасность». Вы должны увидеть свое имя пользователя в окне «Группы или имена пользователей».
Как мне дать разрешение моему жесткому диску?
Вот полная процедура: щелкните правой кнопкой мыши папку, выберите «Свойства»> «Безопасность»> «Дополнительно» внизу> вкладка «Владелец»> «Правка»> «Выделите свое имя пользователя» и установите флажок «Заменить владельца подконтейнеров…» и «Применить»> «ОК».
Как мне получить доступ к внешнему жесткому диску в Linux?
Как смонтировать жесткий диск USB в Linux
- Войдите в свою операционную систему и откройте оболочку терминала с ярлыка «Терминал» на рабочем столе.
- Введите «fdisk -l», чтобы просмотреть список дисков на вашем компьютере и получить имя жесткого диска USB (обычно это имя «/ dev / sdb1» или подобное).
Как перейти на внешний жесткий диск в терминале Linux?
Самый простой способ — это введите команду cd, затем пробел, затем перетащите значок внешнего на в окне Терминала, затем нажмите клавишу возврата. Вы также можете найти путь с помощью команды mount и ввести его после cd. Тогда вы сможете перейти к файлу.
Где внешний жесткий диск в терминале Linux?
Чтобы узнать метку внешнего жесткого диска, откройте терминал и используйте следующую команду. Команда lsblk (список блочных устройств) показывает все подключенные диски. Когда команда list block завершится, все подключенные диски появятся в этом списке. Если какие-то жесткие диски используются, это будет легко увидеть.
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.
Note that we can find permissions of files and folders using long listing (ls -l
) on a Linux terminal.
In the output above, d
represents a directory and-
represents a regular file.
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:
- Symbolic mode: this method uses symbols like
u
,g
,o
to represent users, groups, and others. Permissions are represented asr, w, x
for read write and execute, respectively. You can modify permissions using +, — and =. - 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:
Let’s split the permissions like this:
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
.
Additional examples for changing permissions via symbolic method:
- Removing
read
andwrite
permission forgroup
andothers
:chmod go-rw
. - Removing
read
permissions forothers
:chmod o-r
. - Assigning
write
permission togroup
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) foruser
,read
(add 4) andexecute
(add 1) for group, and onlyexecute
(add 1) for others.
chmod 451 file-name
This is how we performed the calculation:
Note that this is the same as r--r-x--x
.
- Remove
execution
rights fromother
andgroup
.
To remove execution from other
and group
, subtract 1 from the execute part of last 2 octets.
- Assign
read
,write
andexecute
touser
,read
andexecute
togroup
and onlyread
to others.
This would be the same as rwxr-xr--
.
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
Command to change ownership: sudo chown news mymotd.sh
Output:
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:
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:
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
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:
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/
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/
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
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
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
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
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
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:
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.
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 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.
Note that we can find permissions of files and folders using long listing (ls -l
) on a Linux terminal.
In the output above, d
represents a directory and-
represents a regular file.
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:
- Symbolic mode: this method uses symbols like
u
,g
,o
to represent users, groups, and others. Permissions are represented asr, w, x
for read write and execute, respectively. You can modify permissions using +, — and =. - 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:
Let’s split the permissions like this:
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
.
Additional examples for changing permissions via symbolic method:
- Removing
read
andwrite
permission forgroup
andothers
:chmod go-rw
. - Removing
read
permissions forothers
:chmod o-r
. - Assigning
write
permission togroup
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) foruser
,read
(add 4) andexecute
(add 1) for group, and onlyexecute
(add 1) for others.
chmod 451 file-name
This is how we performed the calculation:
Note that this is the same as r--r-x--x
.
- Remove
execution
rights fromother
andgroup
.
To remove execution from other
and group
, subtract 1 from the execute part of last 2 octets.
- Assign
read
,write
andexecute
touser
,read
andexecute
togroup
and onlyread
to others.
This would be the same as rwxr-xr--
.
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
Command to change ownership: sudo chown news mymotd.sh
Output:
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:
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:
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
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:
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/
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/
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
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
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
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
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
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:
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.
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 есть много отличных функций безопасности, но она из самых важных — это система прав доступа к файлам. 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
За права файлов в 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
Как видите, изменить права на файл в Linux очень просто. К тому же вы можете изменить основные права с помощью файлового менеджера.
Выводы
Вот и все, теперь вы знаете не только что такое права доступа к файлам в Linux, но и как их посмотреть, и даже как их изменить. Это очень важная тема, в которой действительно стоит разобраться новичкам, чтобы использовать свою систему более полноценно. Если у вас остались вопросы, спрашивайте в комментариях!
На завершение хочу предложить неплохое видео про права доступа в Linux:
Статья распространяется под лицензией Creative Commons ShareAlike 4.0 при копировании материала ссылка на источник обязательна .
Команда chmod, команда chown и команда chgrp.
Оглавление
- Команда chmod
- Изменение прав доступа командой chmod
- Запись прав доступа числом
- Запись прав доступа символами
- Рекурсивное изменение прав доступа
- Видео-обзор команды chmod
- Команда chown — изменение владельца и группы
- Команда chgrp — изменение группы
- Изменение прав доступа командой chmod
- Резюме
Команда 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-».
В таблице ниже приведены некоторые часто используемые значения числовых значений прав доступа:
Числовое обозначение |
«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.