Москва
+7-929-527-81-33
Вологда
+7-921-234-45-78
Вопрос юристу онлайн Юридическая компания ЛЕГАС Вконтакте

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

Обновлено 05.01.2026 06:10

 

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

 

ОС Linux является многопользовательской операционной системой, в которой полные системные права предоставлены одному пользователю с именем «root». Помимо пользователя root, существуют многочисленные учетные записи других пользователей и различные группы пользователей. К одной группе могут принадлежать несколько пользователей, а один пользователь может принадлежать к нескольким разным группам. Права доступа к файлам основаны на пользователях и группах, и другие пользователи не могут читать ваши файлы, пока им явным образом не будет дано на это разрешение. Каждый файл приписан к некоторому пользователю и некоторой группе, а разрешения может выдавать владелец файла. Тремя видами прав доступа являются чтение (read), запись (write) и выполнение (execute), которые могут быть включены

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

-rw-r-x-wx 1 guest visitors 149 Jul 19 21•59 etc

В некоторых случаях возникает необходимость разрешить непривилегированному пользователю выполнить системную функцию, требующую прав root, например изменить пароль. Одно из возможных решений заключается в том, чтобы дать пользователю права root. Однако при этом пользователь также получает полный контроль над системой, что нежелательно с точки зрения безопасности. Вместо этого программе дается возможность выполняться так, как если бы это был пользователь root, чтобы системная функция была выполнена так, как нужно, и пользователю при этом не был дан полный контроль над системой. Такой тип доступа называют разрешением, или битом suid (set user ID). Когда программу с доступом suid выполняет какой-либо пользователь, euid (действующий ID) этого пользователя заменяется на uid владельца программы. После того как выполнение программы завершено, euid пользователя устанавливается в его первоначальное значение. В следующем листинге этот бит обозначен буквой s. Существует также право доступа sgid (set group ID), применяемое аналогично к действующему ID группы.

Например, если пользователю нужно изменить свой пароль, он выполняет файл /usr/bin/passwd, владельцем которого является root и у которого установлен бит suid. Тогда uid пользователя на время выполнения команды passwd изменяется на uid для root (который равен 0) и по завершении возвращается к прежнему значению. Программы, у которых включен бит suid

и владельцем которых является пользователь root, обычно называют suid root-программами.

В такой ситуации изменение порядка выполнения программы приобретает исключительную силу. Если изменить порядок выполнения suid root-программы так, чтобы она выполнила некоторый «подброшенный» ей фрагмент произвольного кода, то атакующий заставит программу выполнить любые действия от имени пользователя root. Если атакующий заставит suid root-прогpaммy запустить новую пользовательскую оболочку, к которой у него будет доступ, то он получит права root на уровне пользователя. Как уже говорилось, это весьма нехорошо с точки зрения защиты, поскольку дает атакующему полный контроль над системой с правами пользователя root.

Внимательный читатель моего блога может сказать: «Все это звучит замечательно, но как можно изменить порядок выполнения программы, если программа представляет собой строгий набор правил?» Большинство программ написаны на

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

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

Телеграм-канал: https://t.me/zashchitainformacii

Группа в Телеграм: https://t.me/zashchitainformacii1

Сайт: https://legascom.ru

Электронная почта: online@legascom.ru

#защитаинформации #информационнаябезопасность

 

File access rights.

 

Linux OS is a multiuser operating system in which full system rights are granted to a single user named "root". In addition to the root user, there are numerous other user accounts and various user groups. Multiple users can belong to the same group, and one user can belong to several different groups. File permissions are based on users and groups, and other users cannot read your files unless they are explicitly given permission to do so. Each file is assigned to a certain user and a certain group, and permissions can be granted by the file owner. The three types of access rights are read, write, and execute, which can be enabled

or they are disabled in three fields: user, group, and others. The user field defines the rights of the file owner (read, write, or execute), the group field defines the rights of the members of this group, and the other field defines what everyone else can do. The rights are displayed in letters g, w, and x in three consecutive fields corresponding to user, group, and other. In the following example, the user has read and write rights (the first bold field), the group has read and execute rights (the middle field), and everyone else has write and execute rights (the last bold field).

-rw-r-x-wx 1 guest visitors 149 Jul 19 21•59 etc

In some cases, it may be necessary to allow an unprivileged user to perform a system function that requires root rights, such as changing a password. One possible solution is to give the user root rights. However, at the same time, the user also gets full control over the system, which is undesirable from a security point of view. Instead, the program is given the opportunity to run as if it were the root user, so that the system function is performed as needed, and the user is not given full control over the system. This type of access is called a permission, or a suid (set user ID) bit. When a program with suid access is executed by a user, the euid (valid ID) of that user is replaced by the uid of the program owner. After the program is completed, the user's euid is set to its original value. In the following listing, this bit is marked with the letter s. There is also an access right sgid (set group ID), applied similarly to the current group ID.

For example, if a user needs to change their password, they execute the /usr/bin/passwd file, which is owned by root and has the suid bit set. Then the user's uid changes to the root uid for the duration of the passwd command (which is 0) and returns to the previous value upon completion. Programs with the suid bit enabled

and owned by the root user are usually referred to as suid root programs.

In such a situation, changing the program execution order becomes extremely effective. If you change the order of execution of the suid root program so that it executes some fragment of arbitrary code "thrown" to it, the attacker will force the program to perform any actions on behalf of the root user. If an attacker forces the suid root program to launch a new user shell, to which he will have access, he will receive root rights at the user level. As already mentioned, this is very bad from the point of view of protection, since it gives the attacker full control over the system with root user rights.

An attentive reader of my blog might say, "This all sounds great, but how can you change the order of program execution if the program is a strict set of rules?" Most of the programs are written in

high-level languages such as C, and when working at this higher level, the programmer does not always see the big picture, which includes memory for storing variables, accessing the stack, execution pointers, and other low-level machine commands that are not noticeable in high-level languages. A hacker who understands the low-level machine commands obtained when compiling a program written in a high-level language has a better understanding of how the program actually runs than a programmer who wrote it without such understanding. Therefore, hacking a program in order to change the order of its execution does not actually violate any rules by which the program operates; it consists in understanding these rules in more detail and using them in unexpected ways. In order to apply these exploit methods and write programs that do not allow such exploits, it is necessary to be well versed in the features of low-level programming, such as the use of RAM by programs.

Oleg Petukhov, lawyer in the field of international law and personal data protection, information security specialist security, protection of information and personal data.

Telegram channel: https://t.me/protectioninformation

Telegram Group: https://t.me/informationprotection1

Website: https://legascom.ru

Email: online@legascom.ru

#informationprotection #informationsecurity