You are on page 1of 4

Обзор

Команды для получения информации:


• ls -l

Команды для управления доступом к файлам


• chmod
• chown
• chgrp
• umask

Файлы:
• /etc/profile
• /etc/bashrc
• ~/.bashrc
• ~/.bash_profile

Стандартные UNIX-права
В Linux используется классическая UNIX-модель разграничения прав доступа.

В Linux все — файл. Даже директория — отдельный тип файла. Т.о., далее под файлом будет
пониматься и файл, и директория.

Каждый файл в Linux принадлежит какому-либо пользователю (владелец файла). Также у


файла есть группа-владелец.

Для каждого файла назначены 3 набора прав:


• для владельца
• для группы-владельца (для всех юзеров, входящих в группу-владелец)
• для всех остальных пользователей

Существует три типа прав:


• read
• write
• execute

Привилегия Эффект для файлов Эффект для директории


r (read) Содержимое файла можно Можно прочитать список
прочитать файлов в директории
w (write) Содержимое файла можно В директории можно
изменить создавать или удалять файлы
x (execute) Файл можно запустить на Можно получить доступ к
исполнение как скрипт или метаданным о файлах в
бинарник директории, а также
выполнить cd в директорию
ВАЖНО!

Если хотим дать доступ к директории только на чтение, то даем и read, и execute. Одного
read не достаточно.

Просмотр файлов и информации о доступе к ним – команда ls -l.

Пример:

Для изменения прав на файл используется команда chmod. Два режима работы команды:
• символьные права
• числовые права

Символьные права:
• Кто — u,g,o,a (user, group, other, all)
• Что именно +, - , = (добавить, удалить, выставить равным)
• Какие привилегии — r, w, x (read, write, execute)

Примеры:
сhmod g+w my_directory – добавить права на запись для группы-владельца в директорию
my_directory

chmod a-x script.sh – забрать у всех пользователей права на выполнение файла script.sh

chmod u+wx,g-x,o=r testfile – добавить права wx владельцу, забрать права на выполнение у


группы владельца, назначить права только на чтение для всех остальных

Числовые права
• 4 — read
• 2 — write
• 1 — execute

Формат: chmod ### some_file.txt, где # - результирующие привилегии, сумма числовых прав.
Первая цифра — для owner'а, вторая — для группы-владельца, третья — для всех остальных.

Примеры:
chmod 755 my_dir – выставить права на чтение и запись в директорию для владельца,
только на чтение — для группы и всех остальных

chmod 750 script.sh – выставить права rwx для владельца, rx для группы-владельца, не дать
никаких прав остальным пользователям

Для того, чтобы изменить права на директорию и все вложенные директории и файлы —
использовать chmod -R (-R означает реккурсивно).
Специальные разрешения
Существует три типа специальных разрешений: suid, sgid, sticky. Пример программы,
использующей специальные разрешения — passwd. Пользователь должен сменить свой
пароль, но не иметь доступа к /etc/shadow. Поэтому для бинарника /usr/bin/passwd стоит
специальное разрешение — suid-бит. Он дает возможность программе работать от имени
владельца бинарника, а не от имени юзера, который ее запустил. Однако для этого в
программе должен произойти специальный системный вызов.

Специальное разрешение Эффект для файлов Эффект для директорий


u+s (suid) Процесс выполняется от Нет эффекта
имени пользователя —
владельца файла, а не
запустившего программу
юзера
g+s (sgid) Процесс выполняется от Файлы, созданные в
имени группы-владельца директории имеют в качестве
файла группы-владельца группу-
владельца директории
o+t (sticky) Нет эффекта. Пользователи с привилегией
записи в диреторию могут
удалять только те файлы,
которыми они владеют.

Установка специальных привилегий:


• Символьная форма: setuid = u+s, setgid = g+s, sticky = o+t
• Цифровая форма (четвертое число, предшествующее стандартным разрешениям):
setuid = 4, setgid = 2, sticky = 1.

Примеры:
Установка бита setgid для директории:

~]# chmod g+s directory

или

~]# chmod 2770 directory

Доступ по умолчанию
При создании файла или диретории дефолтные разрешения выставляются процессом, их
создающим. Как правило, для файлов это 666, для директорий — 777. Для контроля
дефолтных разрешений существует umask (user file creation mode mask) – функция среды
POSIX, которая определяет какие биты доступа исключить при создании файла. По сути,
работает как фильтр, через котрый проходят дефолтные привилегии при создании файла.

Каждый процесс в системе имеет свой umask, который определяет какие биты разрешений
очистить у файлов, создаваемых процессом. Umask может задаваться в цифровом виде и в
символьном виде. Чаще всего используется в цифровом виде.
Например, umask 0077 очищает разрешения для группы и всех остальных. Поэтому, если
программа по умолчанию создает файл с привилегиями 664, то он будет создан с
привилегиями 600.

Таким образом, umask как бы вычитает из битов доступа к файлу собственные биты.

Вообще же происходит не вычитание, а следующее:


1. Например, программа задает права 750, в битовом представлении это: 111 101 000
2. Например, текущий umask равен 077, что в битовом представлении: 000 111 111
3. Вычисляется побитовое НЕ для umask, получаем: 111 000 000
4. Выполняется побитовое И между правами, задающимися программой и побитовым НЕ
umask:

111 101 000


И
111 000 000
---------------
111 000 000

Результирующий доступ = 700

Дефолтный umask для всех пользователей задается в файлах /etc/profile и /etc/bashrc. Однако
может быть переопределен пользователем либо с помощью команды umask (это shell built-in),
либо в файлах ~/.basrc или ~/.bash_profile.

Для того, чтобы посмотреть текущий umask можно использовать команды umask или umask
-S (показать результирующие права в символьном представлении). Umask -S удобна тем, что
нам не надо рассчитывать результирующие права в уме — она делает это за нас и показывает
в символьном виде права, с которыми будет создан файл.

Пример:

Задать umask можно в символьной или цифровой форме: