Users, Groups and Permissions in Linux
![]()
So here I am, in my journey to mastery, documenting how I learnt to create users, groups and permissions in Linux in the form of a mini-tutorial.
We’ll be working with Ubuntu installed on a local virtual server — but most commands used will apply to any other Linux distribution. This article also assumes a basic knowledge of Linux commands.
The Linux operating system allows multi-user functionality. This means that multiple users can use the operating system concurrently and independently while sharing system resources.
In this mini-tutorial, we will create 3 groups and 15 users and assign these users across the 3 groups. We will also ensure that users in one group cannot access files in another group unless they are added to that group.
But first, let’s take a look at the different types of user accounts in Linux.
Types of user accounts
There are three basic types of Linux user accounts:
- Root user(administrative): This user account has full access to system-wide resources, in addition to the permission to create, modify and delete users and groups.
- Regular user accounts: These are user accounts with a login shell and home directory that perform tasks for personal use — usually common application tasks that are isolated to the user’s home directory.
- Service accounts: These are accounts assigned to applications but with limited access in order to protect the application from potential attacks while still performing essential functions. They usually will not have a home directory.
Create users
We will need admin privileges to create users — however, using the root user context is generally avoided, for security reasons.
First, create a regular user using the useradd command following this syntax:
TIP: To learn more about a Linux command, run man <command> , for example, man useradd to display a full description of the command.
And then, assign admin privileges to this user as follows:
Now, this admin user has superuser privileges and will not need to type in a password with the sudo command.
Let’s switch to the admin superuser using the following command:
And then create more users with the useradd command:
Do this for the number of users you need to create — 15 users in this case.
View users
All users in the system are stored in the /etc/passwd directory. To view all users, run the following command:
This should output something similar to the following:
Each entry has the following features:
- the username: user1
- the encrypted password: x
- the unique identifier (UID) for the user: 100x
- the user group ID (GID): 100x
- the General Electric Comprehensive Operating Supervisor (GECOS) field — which is empty in this case. (This field contains general information as a string of comma-delimited attributes, for example, full name; phone number; etc)
- the user home directory: /home/user1
- the default login shell for the user: /bin/sh
Delete users
To delete a user, run the command:
This removes all related user data, along with all the files in the user’s home directory -f, —force .
Add users to a group
To add the 15 users to groups, let’s create three different groups — a group for team leads leads , one for developers developers and another for the site reliability engineering team sre — and then add the users to the groups.
Use the groupadd command to create a group with the following syntax:
So for our case, we will create three different groups like so:
Next, add the already created users to each group assuming each user fits the group role, using the gpasswd command with the following syntax:
The gpasswd command allows you to manage the creation of groups and members of groups — the -A flag defines group administrators and the -M flag defines the members of the group as a comma-separated list (see the man pages for more details).
View groups
All groups in the system are stored in the /etc/groups directory. To view all groups, run the following command:
This should give an output similar to:
Next, let’s define the level of access allowed for each group.
Permissions and Ownership
The reason Linux so elegantly supports a multi-user system is as a result of permissions. Permissions grant users the right to access files and directories within the system. In Linux, the basic permissions are:
- Read : the right to open and view the contents of files and directories. Represented by r
- Write: the right to modify the content of a file and to add, remove and rename files within a directory. Represented by w
- Execute: the right to run a script or application. Represented by x
Let’s demonstrate the significance of file permissions; create 3 separate files using the following command:
Run the following command to view the files and the current permissions on each file:
The output of this command should be similar to this:
The parts of the above output relevant to the level of access are the following:
- The first ten characters -rw-r—r— symbolize the file access permissions:
- the first character refers to the file type, where — means a regular file. Other notations are d for a directory, l for a symbolic link, and so on.
- the other nine characters define access permissions to the file type — the first three characters rw- are user permissions, the next three r— are group permissions while the last three r— are permissions for all other users.
- root: the user that owns (created) the file
- root : the group that owns the file
With the above information in mind, we will assign a specific group to its related file.
Assign Group Ownership
We want each file to belong to its own group. To do this, let’s assign group ownership using the chgrp (short for change group) command. The syntax for this command is:
So, for our example, we’ll run the following commands:
Now, when we run the ls -l command, we should get the following output:
Each file now belongs to its respective group. This means that only members of the group that owns the file can have whatever permissions specified; that is, read permission (as demonstrated by the middle three characters r— ). However, all other users outside of the group also have read permissions (as demonstrated by the last three characters r— ).
So, considering we want to restrict file access to only members belonging to the file group, let’s change that.
Modifying permissions
To set or change permissions, use the chmod (short for change mode) command (see the man pages for more details).
When using this command, we specify the following:
- Whom to change permissions for: u for the user(owner), g for thegroup and o for all other users.
- How to change permission: + (plus sign) to add permissions, — (minus sign) to remove permissions or = (equal sign) to leave as is.
- What permission to change: r for read, w for write, x for execute.
Using the information above, let’s take away the read permission for users outside the group and add write and execute permissions to the group as follows:
Run the ls -l command to view the modified permissions. The output should be:
To demonstrate that files belonging to one group cannot be accessed by another group, login as a different user; for example, user5 (who belongs to the developers group), using the following command:
Now, let’s attempt to read a file that does not belong to the developers group. Run the following command to view the leads.txt file:
You should get a warning that says:
This is expected because user5 does not have the permission to read the contents of the leads.txt file since the file belongs to the leads group, and not the developers group.
Conclusion
The information shared in this mini-tutorial is by no means exhaustive of the topic of managing users, groups and permissions in Linux. But this should get any beginner, such as myself, up and running with working in Linux.
PS: I decided to have some fun while learning bash scripting, and wrote scripts create_users.sh and delete_users.sh to automate creating and deleting the users described above. See them here.
— — — — — — — — — Thank you for reading! — — — — — — — — —
How to Change Permissions and Owners in Linux Using the Command Line
In this tutorial, you will learn how to use the Linux commands chmod and chown to change permissions and owners. As a result, you will have better management in team-based projects.

Why Change Permissions and Owners in Linux
Linux is a multi-user operating system, so more than one person can work on the same computer at the same time. What’s great, the system can be accessed locally or remotely. That’s why developers often use this OS for group projects.
In such a large environment, we need to set file permissions and ownership, so only specific users can access our data. This way, we can protect sensitive information and prevent unwanted changes from happening.
Fortunately, thanks to chmod and chown commands, it is easy to edit permissions and owners in Linux. But before we begin to learn how to use them, make sure you have access to the command line. You can launch it by pressing Ctrl + Alt + T.
How to Change File and Folder Permissions in Linux
We will be using the chmod command to change file and folder permissions in Linux. But first, you need to be aware that there are three types of users who can interact with a file:
- Owner — the user who creates and owns a file or folder.
- Group — all users who are members of the same group.
- Others — all other users on the system who are neither the owner nor members of a group.
To see permissions and owners of a specific file, you can run this command:
The result will look like this:
Let’s break the output down to see what each field means:
- “-rwxrw-rw-“ — this part of the line represents the file permissions. To understand it better, we have to divide it into four groups: (–), (rwx), (rw-), and (rw-).
- The first group indicates the file type. Our example shows a hyphen, which represents a regular file. If we are inspecting a directory, the hyphen will be replaced by d.
- The three characters after the file type represent the owner’s file permissions. In this example, we can see that the owner can read (r), write (w), and execute (x) the file.
- The next three characters are the group’s file permissions. We can conclude that the group can read (r) and write (w), but cannot execute the file. This is because the last character is a hyphen instead of the letter x.
- The last group is others’ file permissions. Based on our example, this type of user cannot execute the file, but they are allowed to read and write.
How to Use chmod Command
Let’s say someone in the group is getting bash: permission denied error and we want to change Linux file permissions from -rwxrw-rw- to -rwx-r–r–. Simply enter this line:
By executing this command, the owner can read, write, and execute the file (rwx). However, group and others are only allowed to read (r–).
At this point, you might wonder why we are using a three-digit number (744) after the chmod command.
The number determines the file permissions. Read, write, and execute are represented by a numerical value:
- r (read) – 4
- w (write) – 2
- x (execute) – 1
So if you want to give all permissions (rwx) to a user, we need to add read (4), write (2), and execute (1). Therefore, rwx is equal to 7.
Meanwhile, since group and others are only allowed to read the file, we give them 4.
Remember, the owner’s permissions always come first, then followed by group and others. That’s why we enter 744.
Pro Tip
If you don’t want to give any permission to a user, enter 0 into the corresponding spot.
Here is a list of the most common file permissions:
Conclusion
In this tutorial, you have learned how to use chmod and chown commands to change permissions and owners in Linux. We also provided the basic syntax and several useful options that you can combine with either of these commands.
To learn more about Linux command line, you can read our article on basic bash commands.
If you have any questions, feel free to comment below!
Learn More Linux Commands for File Management
Domantas leads the content and SEO teams forward with fresh ideas and out of the box approaches. Armed with extensive SEO and marketing knowledge, he aims to spread the word of Hostinger to every corner of the world. During his free time, Domantas likes to hone his web development skills and travel to exotic places.
Related tutorials

How to Host a Discord Bot: Making and Deploying Your Own Bot to VPS in 2023
Adding bots to your Discord server lets you automate tasks and add new features. While there are many popular Discord bots that are ready to use, you.

How to Configure Your Ubuntu Firewall with UFW and Set Firewall Rules
When configured improperly, your Linux virtual private server (VPS) is vulnerable to cyber attacks. Even if your hosting provider installs robust.

How to Use GitHub Copilot: Setting Up and Learning Various Useful AI Coding Methods
GitHub Copilot is a code suggestion tool designed to act as your AI pair programmer, helping developers code more quickly and accurately. Thanks to.
FilePermissions
In Linux and Unix, everything is a file. Directories are files, files are files and devices are files. Devices are usually referred to as a node; however, they are still files. All of the files on a system have permissions that allow or prevent others from viewing, modifying or executing. If the file is of type Directory then it restricts different actions than files and device nodes. The super user "root" has the ability to access any file on the system. Each file has access restrictions with permissions, user restrictions with owner/group association. Permissions are referred to as bits.
To change or edit files that are owned by root, sudo must be used — please see RootSudo for details.
If the owner read & execute bit are on, then the permissions are:
There are three types of access restrictions:
There are also three types of user restrictions:
Note: The restriction type scope is not inheritable: the file owner will be unaffected by restrictions set for his group or everybody else.
Folder/Directory Permissions
Directories have directory permissions. The directory permissions restrict different actions than with files or device nodes.
Folders (directories) must have ‘execute’ permissions set (x or 1), or folders (directories) will NOT FUNCTION as folders (directories) and WILL DISAPPEAR from view in the file browser (Nautilus).
Permissions in Action
Using the example above we have the file "/etc/hosts" which is owned by the user root and belongs to the root group.
What are the permissions from the above /etc/hosts ls output?
Changing Permissions
The command to use when modifying permissions is chmod. There are two ways to modify permissions, with numbers or with letters. Using letters is easier to understand for most people. When modifying permissions be careful not to create security problems. Some files are configured to have very restrictive permissions to prevent unauthorized access. For example, the /etc/shadow file (file that stores all local user passwords) does not have permissions for regular users to read or otherwise access.
chmod with Letters
Here are a few examples of chmod usage with letters (try these out on your system).
First create some empty files:
Add owner execute bit:
Add other write & execute bit:
Remove group read bit:
Add read, write and execute to everyone:
chmod with Numbers
Owner, Group and Other is represented by three numbers. To get the value for the options determine the type of access needed for the file then add.
For example if you want a file that has -rw-rw-rwx permissions you will use the following:
Another example if you want a file that has —w-r-x—x permissions you will use the following:
Here are a few examples of chmod usage with numbers (try these out on your system).
First create some empty files:
Add owner execute bit:
Add other write & execute bit:
Remove group read bit:
Add read, write and execute to everyone:
chmod with sudo
Changing permissions on files that you do not have ownership of: (Note that changing permissions the wrong way on the wrong files can quickly mess up your system a great deal! Please be careful when using sudo!)
Recursive Permission Changes
To change the permissions of multiple files and directories with one command. Please note the warning in the chmod with sudo section and the Warning with Recursive chmod section.
Recursive chmod with -R and sudo
To change all the permissions of each file and folder under a specified directory at once, use sudo chmod with -R
Recursive chmod using find, pipemill, and sudo
To assign reasonably secure permissions to files and folders/directories, it’s common to give files a permission of 644, and directories a 755 permission, since chmod -R assigns to both. Use sudo, the find command, and a pipemill to chmod as in the following examples.
To change permission of only files under a specified directory.
To change permission of only directories under a specified directory (including that directory):
Warning with Recursive chmod
WARNING: Although it’s been said, it’s worth mentioning in context of a gotcha typo. Please note, Recursively deleting or chown-ing files are extremely dangerous. You will not be the first, nor the last, person to add one too many spaces into the command. This example will hose your system:
Note the space between the first / and home.
You have been warned.
Changing the File Owner and Group
A file’s owner can be changed using the chown command. For example, to change the foobar file’s owner to tux:
To change the foobar file’s group to penguins, you could use either chgrp or chown with special syntax:
Finally, to change the foobar file’s owner to tux and the group to penguins with a single command, the syntax would be:
Note that, by default, you must use sudo to change a file’s owner or group.
Volume Permissions with umask
This section has been moved to: Fstab#Options
ACL (Access Control List)
Posix ACLs are a way of achieving a finer granularity of permissions than is possible with the standard Unix file permissions. See the full page on ACLs FilePermissionsACLs
Setting up ACL
- Install the acl package:
- Remount partition(s) on which you want to enable ACL. For example:
The commands, setfacl and getfacl, set and read ACLs on files and directories.
Example Usage
- Create a directory with full permission:
GUI ACL Editor
The Eiciel
package allows GUI access to ACLs through the Nautilus file manager.Useful ACL Resources
File removal
To remove a file you cannot delete use
where filename is the name and path of the file to delete.
Nota bene: Be very careful when using the command rm with the -rf option since -r makes the file removal recursive (meaning it will remove files inside of folders) and -f will force the removal even for files which aren’t writable. To play it safe, please consider typing in the absolute path to the file
to prevent any mishaps that can/will occur. It takes longer to type but you can’t put a price on peace of mind. See the rm man page for details.
Sticky Bit
The sticky bit applies only to directories, and is typically used on publicly-writeable directories. Within a directory upon which the sticky bit is applied, users are prevented from deleting or renaming any files that they do not personally own.
To add or remove the sticky bit, use chmod with the "t" flag:
The status of the sticky bit is shown in the other execute field, when viewing the long output of ls. "t" or "T" in the other execute field indicates the sticky bit is set, anything else indicates it is not.
Making a public directory:
Adding the sticky bit (note the "t" in the other execute field):
Права в Linux (chown, chmod, SUID, GUID, sticky bit, ACL, umask)
Всем привет. Это перевод статьи из книги RedHat RHCSA RHCE 7 RedHat Enterprise Linux 7 EX200 and EX300.
От себя: Надеюсь статья будет полезна не только начинающим, но и поможет более опытным администраторам упорядочить свои знания.
Чтобы получить доступ к файлам в Linux, используются разрешения. Эти разрешения назначаются трем объектам: файлу, группе и другому объекту (то есть всем остальным). В этой статье вы узнаете, как применять разрешения.
Статья начинается с обзора основных понятий, после чего обсуждаются специальные разрешения (Special permissions) и списки контроля доступа (ACL). В конце этой статьи рассматривается настройка прав доступа по умолчанию через umask, а также управление расширенными атрибутами пользователя.
Управление владением файлами
Прежде чем обсуждать разрешения, вы должны знать о роли владельца файла и каталога. Владение файлами и каталогами жизненно важно для работы с разрешениями. В этом разделе вы сначала узнаете, как вы можете увидеть владельца. Затем вы узнаете, как изменить владельца группы и пользователя для файлов и каталогов.
Отображение владельца файла или каталога
В Linux у каждого файла и каждого каталога есть два владельца: пользователь и группа.
Эти владельцы устанавливаются при создании файла или каталога. Пользователь, который создаёт файл становится владельцем этого файла, а первичная группа, в которую входит этот же пользователь, так же становится владельцем этого файла. Чтобы определить, есть ли у вас как у пользователя права доступа к файлу или каталогу, оболочка проверяет владение ими.
Это происходит в следующем порядке:
- Оболочка проверяет, являетесь ли вы владельцем файла, к которому вы хотите получить доступ. Если вы являетесь этим владельцем, вы получаете разрешения и оболочка прекращает проверку.
- Если вы не являетесь владельцем файла, оболочка проверит, являетесь ли вы участником группы, у которой есть разрешения на этот файл. Если вы являетесь участником этой группы, вы получаете доступ к файлу с разрешениями, которые для группы установлены, и оболочка прекратит проверку.
- Если вы не являетесь ни пользователем, ни владельцем группы, вы получаете права других пользователей (Other).
С помощью команды ls вы можете отобразить владельца файлов в данном каталоге. Иногда может оказаться полезным получить список всех файлов в системе, в которых в качестве владельца указан данный пользователь или группа. Для этого вы можете использовать find. Аргумент find -user может быть использован для этой цели. Например, следующая команда показывает все файлы, у которых в качестве владельца указан пользователь linda:
Вы также можете использовать find для поиска файлов, у которых определенная группа является их владельцем.
Например, следующая команда ищет все файлы, принадлежащие группе users:
Изменение владельца
Чтобы применить соответствующие разрешения, первое, что нужно учитывать, это владение. Для этого есть команда chown. Синтаксис этой команды несложен для понимания:
Например, следующая команда меняет владельца каталога /home/account на пользователя linda:
Команда chown имеет несколько опций, одна из которых особенно полезна: -R. Вы можете догадаться, что она делает, потому что эта опция доступна и для многих других команд. Это позволяет вам рекурсивно устанавливать владельца, что позволяет вам установить владельца текущего каталога и всего, что находится ниже. Следующая команда меняет владельца для каталога /home и всего, что находится под ним, на пользователя lisa:
Сейчас владельцы выглядят так:
Теперь пользователь lisa стал владельцем каталога account:
Изменение владельца группы
Есть два способа изменить владение группой. Вы можете сделать это, используя chown, но есть специальная команда с именем chgrp, которая выполняет эту работу. Если вы хотите использовать команду chown, используйте . или : перед названием группы.
Следующая команда изменяет какого-либо владельца группы /home/account на группу account:
Вы можете использовать chown для изменения владельца пользователя и/или группы несколькими способами. Вот несколько примеров:
- chown lisa myfile1 устанавливает пользователя lisa владельцем файла myfile1.
- chown lisa.sales myfile устанавливает пользователя lisa владельцем файла myfile, а так же устанавливает группу sales владельцем этого же файла.
- chown lisa:sales myfile то же самое, что и предыдущая команда.
- chown .sales myfile устанавливает группу sales владельцем файла myfile без изменения владельца пользователя.
- chown :sales myfile то же самое, что и предыдущая команда.
Как и в случае с chown, вы можете использовать опцию -R с chgrp, а также рекурсивно менять владельца группы.
Понимание владельца по умолчанию
Вы могли заметить, что когда пользователь создает файл, применяется владение по умолчанию.
Пользователь, который создает файл, автоматически становится владельцем этого файла, а основная группа этого пользователя автоматически становится владельцем этого файла. Обычно это группа, которая указана в файле /etc/passwd в качестве основной группы пользователя. Однако если пользователь является членом нескольких групп, он может изменить эффективную основную группу.Чтобы показать текущую эффективную первичную группу, пользователь может использовать команду groups:
Если текущий пользователь linda хочет изменить эффективную первичную группу, он будет использовать команду newgrp, за которой следует имя группы, которую он хочет установить в качестве новой эффективной первичной группы. После использования команды newgrp первичная группа будет активна, пока пользователь не введет команду exit или не выйдет из системы.
Ниже показано, как пользователь lisa использует эту команду, что бы первичной группой стала группа sales:
После изменения действующей основной группы все новые файлы, созданные пользователем, получат эту группу в качестве группы-владельца.Чтобы вернуться к исходной настройке первичной группы, используйте exit.
Чтобы иметь возможность использовать команду newgrp, пользователь должен быть членом той группы, которую он хочет использовать в качестве первичной. Кроме этого, групповой пароль может быть использован для группы с помощью команды gpasswd. Если пользователь использует команду newgrp, но не является членом целевой группы, оболочка запрашивает пароль группы. После того, как вы введете правильный групповой пароль, будет установлена новая эффективная первичная группа.
Управление основными правами
Система разрешений Linux была изобретена в 1970-х годах. Поскольку вычислительные потребности были ограничены в те годы, базовая система разрешений была довольно ограничена. Эта система разрешений использует три разрешения, которые можно применять к файлам и каталогам. В этом разделе вы узнаете, как использовать и изменять эти разрешения.
Понимание прав на чтение, запись и выполнение
Три основных разрешения позволяют вам читать, записывать и выполнять файлы. Эффект этих разрешений отличается при применении к файлам или каталогам. Применительно к файлу разрешение на чтение дает вам право открыть файл для чтения. Следовательно, вы можете прочитать его содержимое, но это означает, что ваш компьютер может открыть файл, чтобы что-то с ним сделать.
Программный файл, которому требуется доступ к библиотеке, должен, например, иметь доступ для чтения к этой библиотеке. Из этого следует, что разрешение на чтение — это самое основное разрешение, которое вам нужно для работы с файлами.
Применительно к каталогу чтение позволяет отображать содержимое этого каталога. Вы должны знать, что это разрешение не позволяет вам читать файлы в каталоге. Система разрешений Linux не знает наследования, и единственный способ прочитать файл — использовать разрешения на чтение для этого файла.
Как вы, вероятно, можете догадаться, разрешение на запись, если оно применяется к файлу, позволяет записывать в файл. Иначе говоря, позволяет изменять содержимое существующих файлов. Однако он не позволяет создавать или удалять новые файлы или изменять права доступа к файлу. Для этого вам нужно дать разрешение на запись каталогу, где вы хотите создать файл. В каталогах это разрешение также позволяет создавать и удалять новые подкаталоги.
Разрешение на выполнение — это то, что вам нужно для выполнения файла. Оно никогда не будет установлено по умолчанию, что делает Linux практически полностью невосприимчивым к вирусам. Только кто-то с правами записи на каталог может применять разрешение на выполнение.
Ниже обобщается использование основных разрешений:

Использование chmod
Для управления правами используется команда chmod. При использовании chmod вы можете устанавливать разрешения для пользователя (user), группы (group) и других (other). Вы можете использовать эту команду в двух режимах: относительный режим и абсолютный режим. В абсолютном режиме три цифры используются для установки основных разрешений.

При настройке разрешений рассчитайте необходимое вам значение. Если вы хотите установить чтение, запись и выполнение для пользователя, чтение и выполнение для группы, а также чтение и выполнение для других в файле /somefile, то вы используете следующую команду chmod:
Когда вы используете chmod таким способом, все текущие разрешения заменяются установленными вами разрешениями.
Если вы хотите изменить разрешения относительно текущих разрешений, вы можете использовать chmod в относительном режиме. При использовании chmod в относительном режиме вы работаете с тремя индикаторами, чтобы указать, что вы хотите сделать:
- Сначала вы указываете, для кого вы хотите изменить разрешения. Для этого вы можете выбрать между пользователем (u), группой (g) и другими (o).
- Затем вы используете оператор для добавления или удаления разрешений из текущего режима или устанавливаете их абсолютно.
- В конце вы используете r, w и x, чтобы указать, какие разрешения вы хотите установить.
При работе в относительном режиме вы также можете использовать более сложные команды. Например, эта команда добавляет разрешение на запись в группу и удаляет чтение для других:
При использовании chmod -R o+rx /data вы устанавливаете разрешение на выполнение для всех каталогов, а также для файлов в каталоге /data. Чтобы установить разрешение на выполнение только для каталогов, а не для файлов, используйте chmod -R o+ rX /data.
Верхний регистр X гарантирует, что файлы не получат разрешение на выполнение, если файл уже не установил разрешение на выполнение для некоторых объектов. Это делает X более разумным способом работы с разрешениями на выполнение; это позволит избежать установки этого разрешения на файлы, где оно не требуется.
Расширенные права
Помимо основных разрешений, о которых вы только что прочитали, в Linux также есть набор расширенных разрешений. Это не те разрешения, которые вы устанавливаете по умолчанию, но иногда они предоставляют полезное дополнение. В этом разделе вы узнаете, что они из себя представляют и как их настроить.
Понимание расширенных прав SUID, GUID и sticky bit
Есть три продвинутых разрешения. Первое из них — это разрешение на установку идентификатора пользователя (SUID). В некоторых особых случаях вы можете применить это разрешение к исполняемым файлам. По умолчанию пользователь, запускающий исполняемый файл, запускает этот файл со своими собственными разрешениями.
Для обычных пользователей это обычно означает, что использование программы ограничено. Однако в некоторых случаях пользователю требуются специальные разрешения, только для выполнения определенной задачи.
Рассмотрим, например, ситуацию, когда пользователю необходимо сменить пароль. Для этого пользователь должен записать свой новый пароль в файл /etc/shadow. Однако этот файл недоступен для записи пользователям, не имеющим прав доступа root:
Разрешение SUID предлагает решение этой проблемы. В утилите /usr/bin/passwd это разрешение применяется по умолчанию. Это означает, что при смене пароля пользователь временно получает права root, что позволяет ему записывать в файл /etc/shadow. Вы можете видеть разрешение SUID с ls -l как s в позиции, где обычно вы ожидаете увидеть x для пользовательских разрешений:
Разрешение SUID может выглядеть полезным (и в некоторых случаях так оно и есть), но в то же время оно потенциально опасно. При неправильном применении вы можете случайно раздать права доступа root. Поэтому я рекомендую использовать его только с максимальной осторожностью.
Большинству администраторов никогда не придется его использовать; вы увидите его только в некоторых файлах, где операционная система должна установить его по умолчанию.
Второе специальное разрешение — это идентификатор группы (SGID). Это разрешение имеет два эффекта. При применении к исполняемому файлу, он дает пользователю, который исполняет файл, разрешения владельца группы этого файла. Таким образом, SGID может выполнить более или менее то же самое, что SUID. Однако для этой цели SGID практически не используется.
Как и в случае с разрешением SUID, SGID применяется к некоторым системным файлам в качестве настройки по умолчанию.
Когда применяется к каталогу, SGID может быть полезен, потому что вы можете использовать его для установки владельца группы по умолчанию для файлов и подкаталогов, созданных в этом каталоге. По умолчанию, когда пользователь создает файл, его эффективная первичная группа устанавливается как владелец группы для этого файла.
Это не всегда очень полезно, особенно потому, что у пользователей Red Hat/CentOS в качестве основной группы задана группа с тем же именем, что и у пользователя, и из которых пользователь является единственным участником. Таким образом, по умолчанию файлы, которые создает пользователь, будут групповыми для общего доступа.
Представьте себе ситуацию, когда пользователи linda и lori работают в бухгалтерии и являются членами группы account. По умолчанию эти пользователи являются членами частной группы, единственным членом которой они являются. Однако оба пользователя являются членами группы account, но также и в качестве параметра вторичной группы.
Ситуация по умолчанию состоит в том, что когда любой из этих пользователей создает файл, основная группа становится владельцем. Поэтому по умолчанию linda не может получить доступ к файлам, созданным lori, и наоборот. Однако, если вы создаете общий каталог группы (скажем, /groups/account) и убедитесь, что разрешение SGID применено к этому каталогу и что учет группы установлен как владелец группы для этого каталога, все файлы, созданные в этом каталоге и во всех его подкаталогах, также получают account группы как владельца группы по умолчанию.
По этой причине разрешение SGID является очень полезным разрешением для установки в каталогах общих групп.
Разрешение SGID показывается в выводе ls -ld как s в позиции, где вы обычно находите разрешение на выполнение группы:
Третий из специальных разрешений — sticky bit. Это разрешение полезно для защиты файлов от случайного удаления в среде, где несколько пользователей имеют права на запись в один и тот же каталог. Если применяется закрепленный sticky bit, пользователь может удалить файл, только если он является пользователем-владельцем файла или каталога, в котором содержится файл. По этой причине он применяется в качестве разрешения по умолчанию для каталога /tmp и может быть полезен также для каталогов общих групп.
Без sticky bit, если пользователь может создавать файлы в каталоге, он также может удалять файлы из этого каталога. В общедоступной групповой среде это может раздражать. Представьте себе пользователей linda и lori, которые оба имеют права на запись в каталог /data/account и получают эти разрешения благодаря участию в группе account. Поэтому linda может удалять файлы, созданные lori, и наоборот.
Когда вы применяете sticky bit, пользователь может удалять файлы, только если выполняется одно из следующих условий:
- Пользователь является владельцем файла;
- Пользователь является владельцем каталога, в котором находится файл.
Применение расширенных прав
Чтобы применить SUID, SGID и sticky bit, вы также можете использовать chmod. SUID имеет числовое значение 4, SGID имеет числовое значение 2, а sticky bit имеет числовое значение 1.
Если вы хотите применить эти разрешения, вам нужно добавить четырехзначный аргумент в chmod, первая цифра которого относится к специальным разрешениям. Следующая строка, например, добавит разрешение SGID на каталог и установит rwx для пользователя и rx для группы и других:
Это довольно непрактично, если вам нужно посмотреть текущие права доступа, которые установлены, прежде чем работать с chmod в абсолютном режиме. (Вы рискуете перезаписать разрешения, если вы этого не сделаете.) Поэтому я рекомендую работать в относительном режиме, если вам нужно применить какое-либо из специальных разрешений:
- Для SUID используйте chmod u+s.
- Для SGID используйте chmod g+s.
- Для sticky bit используйте chmod +t, а затем имя файла или каталога, для которого вы хотите установить разрешения.

Пример работы со специальными правами
В этом примере вы используете специальные разрешения, чтобы членам группы было проще обмениваться файлами в каталоге общей группы. Вы назначаете ID-бит установленного идентификатора группы, а также sticky bit, и видите, что после их установки добавляются функции, облегчающие совместную работу членов группы.
- Откройте терминал, в котором вы являетесь пользователем linda. Создать пользователя можно командой useradd linda, добавить пароль passwd linda.
- Создайте в корне каталог /data и подкаталог /data/sales командой mkdir -p /data/sales. Выполните cd /data/sales, чтобы перейти в каталог sales. Выполните touch linda1 и touch linda2, чтобы создать два пустых файла, владельцем которых является linda.
- Выполните su — lisa для переключения текущего пользователя на пользователя lisa, который также является членом группы sales.
- Выполните cd /data/sales и из этого каталога выполните ls -l. Вы увидите два файла, которые были созданы пользователем linda и принадлежат группе linda. Выполните rm -f linda*. Это удалит оба файла.
- Выполните touch lisa1 и touch lisa2, чтобы создать два файла, которые принадлежат пользователю lisa.
- Выполните su — для повышения ваших привилегий до уровня root.
- Выполните chmod g+s,o+t /data/sales, чтобы установить бит идентификатора группы (GUID), а также sticky bit в каталоге общей группы.
- Выполните su — linda. Затем выполните touch linda3 и touch linda4. Теперь вы должны увидеть, что два созданных вами файла принадлежат группе sales, которая является владельцем группы каталога /data/sales.
- Выполните rm -rf lisa*. Sticky bit предотвращает удаление этих файлов от имени пользователя linda, поскольку вы не являетесь владельцем этих файлов. Обратите внимание, что если пользователь linda является владельцем каталога /data/sales, он в любом случае может удалить эти файлы!
Управление ACL (setfacl, getfacl) в Linux
Даже если расширенные права, которые обсуждались выше, добавляют полезную функциональность к тому, как Linux работает с разрешениями, это не позволяет вам предоставлять разрешения более чем одному пользователю или одной группе в одном файле.
Списки контроля доступа предлагают эту функцию. Кроме того, они позволяют администраторам устанавливать разрешения по умолчанию сложным способом, при котором установленные разрешения могут различаться в разных каталогах.
Понимание ACL
Хотя подсистема ACL добавляет отличные функциональные возможности вашему серверу, у нее есть один недостаток: не все утилиты поддерживают ее. Следовательно, вы можете потерять настройки ACL при копировании или перемещении файлов, а программное обеспечение для резервного копирования может не выполнить резервное копирование настроек ACL.
Утилита tar не поддерживает ACL. Чтобы убедиться, что настройки ACL не будут потеряны при создании резервной копии, используйте star вместо tar. star работает с теми же параметрами, что и tar; он просто добавляет поддержку настроек ACL.
Вы также можете создать резервную копию ACL с помощью getfacl, которую можно восстановить с помощью команды setfacl. Чтобы создать резервную копию, используйте getfacl -R /directory > file.acls. Чтобы восстановить настройки из файла резервной копии, используйте setfacl —restore=file.acl.
Отсутствие поддержки некоторыми инструментами не должно быть проблемой. Списки ACL часто применяются к каталогам как структурная мера, а не к отдельным файлам.
Поэтому их будет не много, а всего лишь несколько, примененных в умных местах файловой системы. Следовательно, восстановить исходные списки ACL, с которыми вы работали, относительно легко, даже если ваше ПО для резервного копирования их не поддерживает.Подготовка файловой системы для ACL
Перед началом работы с ACL может потребоваться подготовить файловую систему для поддержки ACL. Поскольку метаданные файловой системы необходимо расширять, не всегда есть поддержка по умолчанию для ACL в файловой системе. Если при настройке списков ACL для файловой системы вы получаете сообщение «operation not supported», возможно, в вашей файловой системе отсутствует поддержка ACL.
Чтобы это исправить, вам нужно добавить опцию acl mount в файле /etc/fstab, чтобы файловая система была смонтирована с поддержкой ACL по умолчанию.
Изменение и просмотр настроек ACL с помощью setfacl и getfacl
Чтобы установить ACL, вам нужна команда setfacl. Чтобы увидеть текущие настройки ACL, вам нужен getfacl. Команда ls -l не показывает никаких существующих ACL; он просто показывает + после списка разрешений, который указывает, что списки ACL применяются и к файлу.
Перед настройкой списков ACL всегда полезно показать текущие настройки ACL с помощью getfacl. Ниже на примере вы можете увидеть текущие права доступа, как показано с помощью ls -ld, а также как показано с getfacl. Если вы посмотрите достаточно внимательно, вы увидите, что показанная информация точно такая же.
В результате выполнения команды getfacl ниже видно, что разрешения показаны для трех разных объектов: пользователя, группы и других. Теперь давайте добавим ACL, чтобы дать права на чтение и выполнение и группе sales. Команда для этого setfacl -m g:sales:rx /dir. В этой команде -m указывает, что текущие настройки ACL необходимо изменить. После этого g:sales:rx сообщает команде установить ACL для чтения и выполнения (rx) для группы (g) sales. Ниже вы можете увидеть, как выглядит команда, а также вывод команды getfacl после изменения текущих настроек ACL.
Теперь, когда вы понимаете, как установить групповой ACL, легко понять ACL для пользователей и других пользователей. Например, команда setfacl -m u:linda:rwx /data дает разрешения пользователю linda в каталоге /data, не делая его владельцем и не изменяя назначение текущего владельца.
Команда setfacl имеет много возможностей и опций. Один вариант особенно важен, параметр -R. Если используется, опция делает настройку ACL для всех файлов и подкаталогов, которые в настоящее время существуют в каталоге, где вы устанавливаете ACL. Рекомендуется всегда использовать эту опцию при изменении списков ACL для существующих каталогов.
Работа с ACL по умолчанию
Одним из преимуществ использования списков ACL является то, что вы можете давать разрешения нескольким пользователям или группам в каталоге. Еще одним преимуществом является то, что вы можете включить наследование, работая с ACL по умолчанию.
Установив ACL по умолчанию, вы определите разрешения, которые будут установлены для всех новых элементов, создаваемых в каталоге. Имейте в виду, что ACL по умолчанию не меняет разрешения для существующих файлов и подкаталогов. Чтобы изменить их, нужно добавить и обычный ACL!
Это важно знать. Если вы хотите использовать ACL для настройки доступа нескольких пользователей или групп к одному и тому же каталогу, вы должны установить ACL дважды. Сначала используйте setfacl -R -m, чтобы изменить ACL для текущих файлов. Затем используйте setfacl -m d:, чтобы позаботиться обо всех новых элементах, которые также будут созданы.
Чтобы установить ACL по умолчанию, вам просто нужно добавить опцию d после опции -m (порядок имеет значение!). Поэтому используйте setfacl -m d:g:sales:rx /data, если вы хотите, чтобы группа sales имела доступ на чтение и выполнение всего, что когда-либо будет создано в каталоге /data.
При использовании списков ACL по умолчанию также может быть полезно установить ACL для других. Обычно это не имеет особого смысла, потому что вы также можете изменить разрешения для других, используя chmod. Однако, что вы не можете сделать с помощью chmod, это указать права, которые должны быть предоставлены другим пользователям для каждого нового файла, который когда-либо будет создан. Если вы хотите, чтобы другие не получали никаких разрешений на что-либо, созданное в /data, например, используйте setfacl -m d:o::- /data.
ACL и обычные разрешения не всегда хорошо интегрированы. Проблемы могут возникнуть, если вы применили ACL по умолчанию к каталогу, после чего элементы были добавлены в этот каталог, и затем попытаетесь изменить обычные разрешения. Изменения, которые применяются к обычным разрешениям, не будут хорошо отражены в обзоре ACL. Чтобы избежать проблем, сначала установите обычные разрешения, после чего установите ACL по умолчанию (и после этого старайтесь не изменять их снова).
Пример управления расширенными правами с использованием ACL
В этом примере вы продолжите работу с каталогами /data/account и /data/sales, которые вы создали ранее. В предыдущих примерах вы гарантировали, что группа sales имеет разрешения на /data/sales, а группа account имеет разрешения на /data/account.
Сначала убедитесь, что группа account получает разрешения на чтение в каталоге /data/sales, а группа sales получает разрешения на чтение в каталоге /data/account.
Затем вы устанавливаете списки ACL по умолчанию, чтобы убедиться, что для всех новых файлов правильно установлены разрешения для всех новых элементов.
- Откройте терминал.
- Выполните setfacl -m g:account:rx /data/sales и setfacl -m g:sales:rx /data/account.
- Выполните getfacl, чтобы убедиться, что права доступа были установлены так, как вы хотели.
- Выполните setfacl -m d:g:account:rwx,g:sales:rx /data/sales, чтобы установить ACL по умолчанию для каталога sales.
- Добавьте ACL по умолчанию для каталога /data/account, используя setfacl -m d:g:sales:rwx,g:account:rx /data/account.
- Убедитесь, что настройки ACL действуют, добавив новый файл в /data/sales. Выполните touch /data/sales/newfile и выполните getfacl /data/sales/newfile для проверки текущих разрешений.
Установка прав по умолчанию с помощью umask
Выше вы узнали, как работать с ACL по умолчанию. Если вы не используете ACL, есть параметр оболочки, который определяет права по умолчанию, которые вы получите: umask (обратная маска). В этом разделе вы узнаете, как изменить разрешения по умолчанию с помощью umask.
Вы, наверное, заметили, что при создании нового файла устанавливаются некоторые разрешения по умолчанию. Эти разрешения определяются настройкой umask. Этот параметр оболочки применяется ко всем пользователям при входе в систему. В параметре umask используется числовое значение, которое вычитается из максимальных разрешений, которые могут быть автоматически установлены для файла; максимальная настройка для файлов — 666, а для каталогов — 777.
Однако некоторые исключения относятся к этому правилу. Вы можете найти полный обзор настроек umask в таблице внизу.
Из цифр, используемых в umask, как и в случае числовых аргументов для команды chmod, первая цифра относится к разрешениям пользователя, вторая цифра относится к разрешениям группы, а последняя относится к разрешениям по умолчанию, установленным для других. Значение umask по умолчанию 022 дает 644 для всех новых файлов и 755 для всех новых каталогов, созданных на вашем сервере.
Полный обзор всех числовых значений umask и их результатов в таблице ниже.
Простой способ увидеть, как работает параметр umask, выглядит следующим образом: начните с разрешений по умолчанию для файла, установленного на 666, и вычтите umask, чтобы получить действующие разрешения. Сделайте то же самое для каталога и его разрешений по умолчанию 777.
Есть два способа изменить настройку umask: для всех пользователей и для отдельных пользователей. Если вы хотите установить umask для всех пользователей, вы должны убедиться, что параметр umask учитывается при запуске файлов среды оболочки, как указано в /etc/profile. Правильный подход — создать сценарий оболочки с именем umask.sh в каталоге /etc/profile.d и указать umask, который вы хотите использовать в этом сценарии оболочки. Если в этом файле изменяется umask, он применяется ко всем пользователям после входа на сервер.
Альтернативой настройке umask через /etc/profile и связанные файлы, где он применяется ко всем пользователям, входящим в систему, является изменение настроек umask в файле с именем .profile, который создается в домашнем каталоге каждого пользователя.
Настройки, примененные в этом файле, применяются только для отдельного пользователя; следовательно, это хороший метод, если вам нужно больше детализации. Мне лично нравится эта функция, чтобы изменить значение umask по умолчанию для пользователя root на 027, тогда как обычные пользователи работают с umask по умолчанию 022.
Работа с расширенными атрибутами пользователя
Это заключительный раздел о правах в Linux.
При работе с разрешениями всегда существует связь между объектом пользователя или группы и разрешениями, которые эти объекты пользователя или группы имеют для файла или каталога. Альтернативный метод защиты файлов на сервере Linux — работа с атрибутами.
Атрибуты выполняют свою работу независимо от пользователя, который обращается к файлу.Как и в случае с ACL, для атрибутов файла может потребоваться включить параметр mount.
Это опция user_xattr. Если вы получаете сообщение «operation not supported» при работе с расширенными атрибутами пользователя, обязательно установите параметр mount в файле /etc/fstab.
Многие атрибуты задокументированы. Некоторые атрибуты доступны, но еще не реализованы. Не используйте их; они ничего вам не принесут.
Ниже приведены наиболее полезные атрибуты, которые вы можете применить:
A Этот атрибут гарантирует, что время доступа к файлу файла не изменяется.
Обычно каждый раз, когда файл открывается, время доступа к файлу должно быть записано в метаданные файла. Это отрицательно влияет на производительность; поэтому для файлов, к которым осуществляется регулярный доступ, атрибут A можно использовать для отключения этой функции.a Этот атрибут позволяет добавлять, но не удалять файл.
c Если вы используете файловую систему, в которой поддерживается сжатие на уровне тома, этот атрибут файла гарантирует, что файл будет сжат при первом включении механизма сжатия.
D Этот атрибут гарантирует, что изменения в файлах записываются на диск немедленно, а не в кэширование в первую очередь. Это полезный атрибут в важных файлах базы данных, позволяющий убедиться, что они не теряются между файловым кешем и жестким диском.
d Этот атрибут гарантирует, что файл не будет сохранен в резервных копиях, где используется утилита дампа.
I Этот атрибут включает индексирование для каталога, в котором он включен. Это обеспечивает более быстрый доступ к файлам для примитивных файловых систем, таких как Ext3, которые не используют базу данных B-tree для быстрого доступа к файлам.
i Этот атрибут делает файл неизменным. Следовательно, в файл нельзя вносить изменения, что полезно для файлов, которые нуждаются в дополнительной защите.
j Этот атрибут гарантирует, что в файловой системе ext3 файл сначала записывается в журнал, а затем — в блоки данных на жестком диске.
s Перезаписать блоки, в которых файл был сохранен, на 0 с после удаления файла. Это гарантирует, что восстановление файла невозможно после того, как он был удален.
u Этот атрибут сохраняет информацию об удалении. Это позволяет разрабатывать утилиту, которая работает с этой информацией для спасения удаленных файлов.
Если вы хотите применить атрибуты, вы можете использовать команду chattr. Например, используйте chattr +s somefile, чтобы применить атрибуты к somefile. Нужно удалить атрибут? Тогда используйте chattr -s somefile, и он будет удален. Чтобы получить обзор всех атрибутов, которые в настоящее время применяются, используйте команду lsattr.
Резюме
В этой статье вы узнали, как работать с разрешениями. Вы прочитали о трех основных разрешениях, расширенных разрешениях и о том, как применять ACL-списки в файловой системе. Вы также узнали, как использовать параметр umask для применения разрешений по умолчанию. В конце этой статьи вы узнали, как использовать расширенные пользователем атрибуты для применения дополнительного уровня безопасности файловой системы.
Если вам понравился этот перевод, то прошу написать об этом в комментариях. Будет больше мотивации делать полезные переводы.
В статье исправил некоторые опечатки и грамматические ошибки. Уменьшил некоторые громоздкие абзацы на более мелкие для удобства восприятия.
Вместо «Только кто-то с административными правами на каталог может применять разрешение на выполнение.» исправил на «Только кто-то с правами записи на каталог может применять разрешение на выполнение.», что будет более правильным.
Заменил:
Если вы не являетесь владельцем пользователя, оболочка проверит, являетесь ли вы участником группы, которая также называется группой файла.На:
Если вы не являетесь владельцем файла, оболочка проверит, являетесь ли вы участником группы, у которой есть разрешения на этот файл. Если вы являетесь участником этой группы, вы получаете доступ к файлу с разрешениями, которые для группы установлены, и оболочка прекратит проверку.