Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

Фундаментальные основы Linux. Часть VIII. Механизмы безопасной работы с файлами

Оригинал: Linux Fundamentals
Автор: Paul Cobbaut
Дата публикации: 16 октября 2014 г.
Перевод: А.Панин
Дата перевода: 24 декабря 2014 г.

Глава 31. Расширенные права доступа к файлам

Бит sticky для директорий

Вы можете установить бит sticky для директории с целью предотвращения удаления файлов пользователями, которые не являются их непосредственными владельцами. Бит sticky отображается в той же позиции, что и символ права исполнения x для пользователей, не являющихся владельцами директории и не состоящих в группе, владеющей директорией. Сам бит sticky отображается с помощью символа t (в том случае, если подразумевается наличие символа x) или символа T (в том случае, если символ x не должен выводиться ввиду отсутствия соответствующих прав доступа к директории).
root@RHELv4u4:~# mkdir /project55
root@RHELv4u4:~# ls -ld /project55
drwxr-xr-x  2 root root 4096 фев  7 17:38 /project55
root@RHELv4u4:~# chmod +t /project55/
root@RHELv4u4:~# ls -ld /project55
drwxr-xr-t  2 root root 4096 фев  7 17:38 /project55
root@RHELv4u4:~#
Бит sticky также может быть установлен в случае использования восьмеричного значения прав доступа, причем в этом случае должно использоваться двоичное значение 1 в первом из четырех триплетов.
root@RHELv4u4:~# chmod 1775 /project55/
root@RHELv4u4:~# ls -ld /project55
drwxrwxr-t  2 root root 4096 фев  7 17:38 /project55
root@RHELv4u4:~#
В своей системе вы, скорее всего, обнаружите бит sticky, установленный для директории /tmp.
root@barry:~# ls -ld /tmp
drwxrwxrwt 6 root root 4096 2009-06-04 19:02 /tmp

Бит setgid для директории

Бит setguid может устанавливаться для директорий в тех случаях, когда необходимо, чтобы в качестве группы пользователей, владеющей всеми файлами в директории, использовалась группа пользователей, владеющая директорией. Бит setgid отображается в той же позиции, что и символ права исполнения x для пользователей из группы, владеющей директорией. Сам бит setgid отображается с помощью символа s (в том случае, если подразумевается наличие символа x) или символа S (в том случае, если символ x не должен отображаться ввиду отсутствия соответствующих прав доступа к директории у пользователей из группы, владеющей директорией). Как показано в данном примере, несмотря на то, что пользователь root не состоит в группе proj55, файлы, созданные пользователем root в директории /project55, будут принадлежать группе пользователей proj55 ввиду установки бита setgid.
root@RHELv4u4:~# groupadd proj55
root@RHELv4u4:~# chown root:proj55 /project55/
root@RHELv4u4:~# chmod 2775 /project55/
root@RHELv4u4:~# touch /project55/fromroot.txt
root@RHELv4u4:~# ls -ld /project55/
drwxrwsr-x  2 root proj55 4096 фев  7 17:45 /project55/
root@RHELv4u4:~# ls -l /project55/
итого 4
-rw-r--r--  1 root proj55 0 фев  7 17:45 fromroot.txt
root@RHELv4u4:~#
Вы можете использовать утилиту find для поиска всех директорий с установленным битом setgid.
paul@laika:~$ find / -type d -perm -2000 2> /dev/null
/var/log/mysql
/var/log/news
/var/local
...

Биты setgid и setuid для обычных файлов

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

Рассмотрим пример с управлением паролями пользователей; они хранятся в файле /etc/shadow, содержимое которого может читаться исключительно пользователем root. (В любом случае пользователю root не требуется разрешения для чтения файлов).
root@RHELv4u4:~# ls -l /etc/shadow
-r--------  1 root root 1260 янв 21 07:49 /etc/shadow
Для изменения вашего пароля потребуется модифицировать содержимое данного файла, но каким образом обычные пользователи, не обладающие правами пользователя root, могут сделать это? Давайте рассмотрим права доступа к исполняемому файлу /usr/bin/passwd.
root@RHELv4u4:~# ls -l /usr/bin/passwd 
-r-s--x--x  1 root root 21200 июн 17  2005 /usr/bin/passwd

Получается, что при запуске программы passwd вы инициируете ее исполнение с правами пользователя root.

Вы можете использовать утилиту find для поиска всех программ с установленным битом setuid.
paul@laika:~$ find /usr/bin -type f -perm -04000
/usr/bin/arping
/usr/bin/kgrantpty
/usr/bin/newgrp
/usr/bin/chfn
/usr/bin/sudo
/usr/bin/fping6
/usr/bin/passwd
/usr/bin/gpasswd
...

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

Бит setuid для исполняемого файла sudo

Для бинарного файла sudo бит setuid устанавливается по умолчанию, поэтому любой пользователь может инициировать его исполнение с эффективным идентификатором пользователя root.
paul@rhel65:~$ ls -l $(which sudo)
---s--x--x. 1 root root 123832 окт  7  2013 /usr/bin/sudo
paul@rhel65:~$

Практическое задание: биты sticky, setuid и setgid

1a. Создайте директорию, которая будет принадлежать группе пользователей sports.

1b. Члены группы пользователей sports должны иметь возможность создавать файлы в данной директории.

1c. Все файлы, созданные в данной директории, должны принадлежать группе пользователей sports.

1d. Пользователи должны иметь возможность удалять из данной директории только принадлежащие им файлы.

1e. Проверьте корректность создания директории в соответствии с изложенными требованиями.

2. Получите информацию о правах доступа к исполняемому файлу /usr/bin/passwd. Удалите установленный для данного файла бит setuid, после чего попытайтесь изменить свой пароль, работая с учетной записью обычного пользователя. Верните изначально установленные права доступа к исполняемому файлу и повторите попытку.

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

Корректная процедура выполнения практического задания: биты sticky, setuid и setgid

1a. Создайте директорию, которая будет принадлежать группе пользователей sports.

groupadd sports
mkdir /home/sports
chown root:sports /home/sports

1b. Члены группы пользователей sports должны иметь возможность создавать файлы в данной директории.

chmod 770 /home/sports

1c. Все файлы, созданные в данной директории, должны принадлежать группе пользователей sports.

chmod 2770 /home/sports

1d. Пользователи должны иметь возможность удалять из данной директории только принадлежащие им файлы.

chmod +t /home/sports

1e. Проверьте корректность создания директории в соответствии с изложенными требованиями.

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

2. Получите информацию о правах доступа к исполняемому файлу /usr/bin/passwd. Удалите установленный для данного файла бит setuid, после чего попытайтесь изменить свой пароль, работая с учетной записью обычного пользователя. Верните изначально установленные права доступа к исполняемому файлу и повторите попытку.

root@deb503:~# ls -l /usr/bin/passwd 
-rwsr-xr-x 1 root root 31704 2009-11-14 15:41 /usr/bin/passwd
root@deb503:~# chmod 755 /usr/bin/passwd 
root@deb503:~# ls -l /usr/bin/passwd 
-rwxr-xr-x 1 root root 31704 2009-11-14 15:41 /usr/bin/passwd
После этих манипуляций обычный пользователь не сможет изменить свой пароль.
root@deb503:~# chmod 4755 /usr/bin/passwd 
root@deb503:~# ls -l /usr/bin/passwd 
-rwsr-xr-x 1 root root 31704 2009-11-14 15:41 /usr/bin/passwd

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

paul@laika:~$ sudo su -
[sudo] password for paul: 
root@laika:~# mkdir attr
root@laika:~# cd attr/
root@laika:~/attr# touch file42
root@laika:~/attr# lsattr
------------------ ./file42
root@laika:~/attr# chattr +i file42 
root@laika:~/attr# lsattr
----i------------- ./file42
root@laika:~/attr# rm -rf file42 
rm: невозможно удалить "file42": Операция не позволена
root@laika:~/attr# chattr -i file42 
root@laika:~/attr# rm -rf file42 
root@laika:~/attr#


Предыдущий раздел: Оглавление Следующий раздел:
Глава 30. Стандартные права доступа к файлам   Глава 32. Списки контроля доступа