Библиотека сайта 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
/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. Списки контроля доступа |