RTFM.WIKI

Ordnung muß sein. Ordnung über alles (18+)

Инструменты пользователя

Инструменты сайта


Боковая панель


Навигация

Линкшэринг

ALARM!

Добавить новую страницу

You are not allowed to add pages
linux:suid_sgid_sticky


Специальные права

Источник - http://kryukov.biz/wiki/Специальные_права

Кроме базовых прав доступа в inode файла находятся еще три бита, описывающие специальные права доступа.

  • SUID (Set UID) — программа, у которой установлен этот бит, выполняется с правами хозяина файла программы. Имеет смысл только при установке на исполняемые файлы.
  • SGID (Set GID) — назначение бита аналогично SUID, только программа выполняется с правами группы, которой принадлежит файл. Кроме исполняемых файлов этот бит может устанавливаться на директории.
  • Stiky — бит имеет смысл только если он установлен на директорию. Означает, что в этой директории файл может удалить только его хозяин. (Суперпользователь может удалять любые файлы, в том числе и не принадлежащие ему.)

SUID

Рассмотрим пример применения бита SUID. В системе любой пользователь может поменять себе пароль. Новый пароль записывается в файл /etc/shadow:

$ ls -l /etc/shadow
-rw-r-----  1 root shadow 500 2005-03-02 17:14 /etc/shadow
$

Как видно из прав доступа файла shadow, право на запись имеет только суперпользователь root (Наличие право на чтение для группы — это особенность дистрибутива Slackware Linux, в других дистрибутивах права доступа обычно устанавливаются в 600). То есть другие пользователи системы не имеют права изменять содержимое этого файла, поэтому они не имеют права на изменение пароля. Но ведь каким-то образом им удается изменить свой пароль!

Для изменения пароля используется программа passwd.

$ ls -l /usr/bin/passwd
-rws--x--x  1 root bin 37880 2004-06-21 23:20 /usr/bin/passwd*
$

Обратите внимание на символ s, который стоит вместо x в правах хозяина файла. Наличие этого символа говорит о том, что у этого файла установлен бит SUID. А это значит, что программа будет выполняться с правами пользователя, которому принадлежит файл — с правами пользователя root! Root имеет право на запись в файл shadow, и именно поэтому обыкновенный пользователь может изменить свой пароль.

При выполнении программы chmod для установки бита SUID можно пользоваться как числовым, так и символьным форматом. Например:

$ ls -l test
-rwxr-x--x  1 artur users 12 2005-06-06 11:53 test*
$ chmod 4751 test
$ ls -l test
-rwsr-x--x  1 artur users 12 2005-06-06 11:53 test*
$

4 — это обозначение бита SUID. При установке SUID-бита с использованием символьного формата записи, строка будет выглядеть так:

$ chmod u+s test
$ ls -l test
-rwsr-x--x  1 artur users 12 2005-06-06 11:53 test*
$

Для сброса специальных бит при числовом формате записи прав желательно явно указывать ноль в соответствующей позиции:

$ chmod 0751 test
$ ls -l test
-rwxr-x--x  1 artur users 12 2005-06-06 11:53 test*
$

SUID-бит — это очень опасный механизм. Вы как администратор системы должны постоянно контролировать наличие файлов с установленным SUID-битом. Это можно сделать при помощи программы поиска файлов в файловой системе find.

$ find /usr/bin -perm +4000
/usr/bin/lppasswd
/usr/bin/crontab
/usr/bin/chfn
/usr/bin/chsh
/usr/bin/chage
/usr/bin/expiry
/usr/bin/newgrp
/usr/bin/passwd
/usr/bin/gpasswd
/usr/bin/sudo
/usr/bin/procmail
/usr/bin/rcp
/usr/bin/rsh
/usr/bin/traceroute6
/usr/bin/rlogin
/usr/bin/traceroute
$

SGID

Бит SGID на исполняемые файлы устанавливается очень редко. Его основное назначение — организация работы группы пользователей над файлами одного проекта.

Когда пользователь создает файл, этот файл принадлежит пользователю и его основной группе. Изменять хозяина файла и группу, которой он принадлежит, пользователь не имеет права. Теперь представьте, что есть некоторый проект, с файлами которого должны работать несколько пользователей системы. То есть они должны иметь полный доступ к этим файлам.

Предположим, что для размещения файлов проекта выделена отдельная директория, например, /usr/local/project. Для пользователей, работающих над проектом, создана специальная группа pr1, в которую добавлены пользователи artur и user1. На директорию установлены следующие права доступа:

$ ls -ld /usr/local/project
drwxrwx--- 2 root pr1 4096 2005-06-06 14:58 /usr/local/project
$

Поскольку пользователи artur и user1 входят в группу pr1, они имеют право на создание файлов в этой директории. Каждый пользователь создал в директории новый файл.

$ ls -l /usr/local/project/
итого 0
-rw-rw----  1 artur users 0 2005-06-06 15:06 artur_file
-rw-rw----  1 user1 user1 0 2005-06-06 15:09 file_user1
$

Как видно из прав доступа к файлам, artur ничего не может сделать с файлом пользователя user1 и наоборот. Они могут только удалить эти файлы, но не изменить их содержимое. Почему так получилось? Дело в том, что файл принадлежит пользователю, его создавшему, и основной группе пользователя. У artur основная группа — users, у user1user1. Поэтому эти файлы принадлежат именно эти группам.

Для решения проблемы необходимо сделать так, что бы все вновь создаваемые файлы принадлежали той группе, в которую входят оба пользователя. Это можно сделать, установив SGID-бит на директорию /usr/local/project. Тогда все создаваемые в этой директории файлы будут принадлежать не основным группам пользователей, а группе, которой принадлежит директория project.

# chmod g+s /usr/local/project
# ls -ld /usr/local/project
drwxrws--- 2 root pr1 4096 2005-06-06 15:09 /usr/local/project
# rm /usr/local/project/*
#

Изменение прав доступа к директории производил суперпользователь root. У root символ приглашения командной строки обычно заканчивается на #.

Обратите внимание на символ s, который стоит вместо x в правах группы. Таким образом обозначается бит SGID.

Теперь пользователь artur создаст в директории project свой файл (во всех дальнейших примерах необходимо учитывать, что установлена umask 007):

$ touch /usr/local/project/artur_file
$ ls -l /usr/local/project/
итого 0
-rw-rw----  1 artur pr1 0 2005-06-06 15:20 artur_file
$

Новый файл принадлежит пользователю artur и группе pr1, а не группе users. Если в этой директории создаст файл пользователь user1, файл тоже будет принадлежать группе pr1.

$ touch /usr/local/project/file_user1
$ ls -l /usr/local/project
итого 0
-rw-rw----  1 artur pr1 0 2005-06-06 15:20 artur_file
-rw-rw----  1 user1 pr1 0 2005-06-06 15:22 file_user1
$

Теперь оба пользователя могут работать с файлами этого проекта.

При создании новой директории в директории с уже установленным SGID-битом, у созданной директории SGID-бит устанавливается автоматически!

$ mkdir /usr/local/project/dir
$ ls -l /usr/local/project
итого 4
-rw-rw----  1 artur pr1    0 2005-06-06 15:20 artur_file
drwxrws---  2 user1 pr1 4096 2005-06-06 15:24 dir/
-rw-rw----  1 user1 pr1    0 2005-06-06 15:22 file_user1
$

Stiky

Stiky-бит применяется только к директориям. Если такой бит установлен на директорию, значит, в этой директории файл может удалить только хозяин файла или суперпользователь. Stiky-бит рекомендуется устанавливать на публичные директории, такие как: /tmp и /var/tmp.

$ ls -ld /tmp
drwxrwxrwt  27 root root 4096 2005-06-06 11:28 /tmp/
$ ls -ld /var/tmp
drwxrwxrwt  5 root root 4096 2005-06-05 17:28 /var/tmp/
$

На эти директории установлены права 777, то есть кто угодно может создавать файлы и удалять их. Но обратите внимание на символ t в правах доступа для всех остальных пользователей системы. Он означает, что у директории установлен stiky-бит.

Обозначение

Поскольку специальные права используются крайне редко, при выводе программы ls символ, их обозначающий, закрывает символ стандартных прав доступа. И не понятно, rwt — это rw- или rwx? Определить, стоит ли символ стандартных прав доступа под символами s и t очень просто. Если t маленькое, значит x установлен. Если T большое, значит x не установлен. То же самое правило распространяется и на s.

This website uses cookies. By using the website, you agree with storing cookies on your computer. Also you acknowledge that you have read and understand our Privacy Policy. If you do not agree leave the website.More information about cookies

Discussion

Enter your comment. Wiki syntax is allowed:
 
linux/suid_sgid_sticky.txt · Последнее изменение: 2013/08/16 19:14 (внешнее изменение)