Контактная информация

По всем интересующим вас вопросам связывайтесь при помощи контактной информации приведенной на этой странице!

skype: metsof
email: accusser@gmail.com

В социальных сетях...

Форма обратной связи

Авторизация

Статьи об операционной системе Linux

Сайдбар

Права доступа к файлам, пользователи и принадлежность к группам

18 апр. 2014

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

Начиная с версии ядра 2.6, Linux поддерживает и расширенный вариант управления правами с помощью списков контроля доступа (ACL). В этом статье мы поговорим только о традиционном управлении правами, которые действуют в UNIX-системах уже не одно десятилетие.

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



— каждом файле или каталоге сохраняется следующая информация:
— владелец файла;
— группа, к которой относится файл;

— девять битов доступа (rwxrwxrwx для read/write/execute — для владельца файла,

— членов группы владельца и всех остальных);
— еще несколько дополнительных битов для выполнения специальных функций.

Как правило, владельцем файла является его создатель. В качестве группы обычно используется основная группа владельца.

Информация о доступе (r, w и x) описывает, кто имеет право читать файл, записывать в него информацию (то есть вносить изменения) и выполнять его. Таким образом, владелец файла получает больше прав, чем другие пользователи. Обычно эта информация называется битами доступа, так как внутри системы она сохраняется как число с разрядной кодировкой.

Биты доступа, владелец файла, а также отнесенность этого файла к той или иной группе можно просмотреть с помощью команды ls -l. Для обычного текстового файла ls возвращает примерно такой результат:

<code>michael$ ls -l файл-txt

-rw-Г--Г-- 1 michael users 3529 Oct 4 15:43 файл-txt</code>


Коротко объясню эти данные: первый символ указывает тип файла (в данном случае для обычного файла, для каталога ставится d (directory), l — для символьной ссылки (link) и т. д.). Поскольку мы имеем дело с текстовым файлом, первый x-бит деактивизирован, то есть файл нельзя выполнять. Все остальные пользователи, независимо от того, относятся ли они к группе users, могут читать этот файл, но не могут его изменять.

Если michael пожелает, чтобы этот файл был доступен для чтения только пользователям группы users и был недоступен для пользователей, не входящих в эту группу, нужно будет деактивизировать последний r-бит. Для этого применяется команда chmod.

<code>michael$ chmod o-r файл-txt

michael$ ls файл-txt -l

-rw-r----- 1 michael users 3529 Oct 4 15:43 файл-txt</code>


Допустим, требуется предоставить доступ к чтению файла файл .txt только двум пользователям: michael и kathrin. Для этого можно создать новую группу, к которой будут относиться оба этих пользователя. Если michael и kathrin вдвоем работают в группе по разработке документации в определенной фирме, можно назвать эту группу, например, dokuteam. Дополнительно изменяем групповую отнесенность с помощью команды chgrp:

<code>michael$ chgrp dokuteam файл-txt

michael$ ls файл-txt -l

-rw-r----- 1 michael dokuteam 3529 Oct 4 15:43 файл-txt</code>


Восьмеричное представление



Можно не использовать запись rwxrwxrwx, а представить восемь битов доступа и еще три специальных бита в восьмеричном виде: биты доступа для пользователей, группы и всех остальных пользователей соответственно представляются в виде одной цифры. Каждая цифра составляется из величин 4, 2 и 1 для r, w и x соответственно.

Таким образом, 660 означает rw-rw----, 777 означает rwxrwxrwx. Три специальных бита

Setuid, Setgid и Sticky имеют восьмеричные значения 4000, 2000 и 1000.

С помощью команды chmod можно указывать биты доступа в восьмеричной форме, опытные пользователи предпочитают ею пользоваться, чтобы не печатать лишнего:

user$ chmod 640 файл-txt

Поразительно, но команда ls не может представлять биты доступа в восьмеричном виде. Помочь в данном случае может следующая команда (к сожалению, абсолютно нечитабельная):

user$ ls -l | awk '{k=0;


Права доступа к каталогам



В принципе, девять битов права доступа применимы и при работе с каталогами, но в таком случае их значение несколько отличается: r-бит позволяет другим пользователям просмотреть содержимое каталога с помощью команды ls. Кроме того, x-бит позволяет перейти в этот каталог с помощью cd. Если поставить и x,h w,tob каталоге можно создавать новые файлы.

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



Право доступа к различным аппаратным компонентам, например жестким дискам, приводам CD и DVD, интерфейсам и т. д., осуществляется в Linux через так называемые файлы устройств. Чтобы иметь возможность управлять тем, какой пользователь может обращаться к каким устройствам, они распределяются между различными группами пользователей. Например, устройства /dev/ttyS* назначены для работы с серийными устройствами в системе Ubuntu в группе dialout:

<code>root# ls -l /dev/ttyS1

crw-rw---- 1 root dialout 5, 65 Jul 18 /dev/ttySl</code>

Если системному администратору понадобится предоставить пользователю hubert права работы с серийным интерфейсом, то hubert будет добавлен в группу dialout:

root# usermod -a -G dialout hubert

Специальные биты


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

Бит Setuid



Он иногда сокращенно называется suid. С его помощью программа всегда выполняется так, как если бы пользователь запускал ее сам. Итак, если владельцем программы является администратор (это случается довольно часто), то любой пользователь может работать с этой программой так же, как если бы он был администратором. Внутри системы для выполнения программы применяется пользовательский идентификационный номер владельца файла, а не UID пользователя, работающего с файлом в данный момент.

Бит Setuid используется для того, чтобы присваивать обычным пользователям дополнительные права, действующие лишь при выполнении данной конкретной программы. Правда, это чревато угрозой для безопасности — в особенности тогда, когда при выполнении данной программы запускаются другие программы. Это означает, что по возможности следует избегать применения бита Setuid. Одно из немногих исключений — команда mount. Вместо бита Setuid можно использовать команду sudo.

В таких программах команда ls -l показывает для пользовательского бита доступа букву s (а не x). Восьмеричное значение этого бита (для chmod) составляет 4000.

<code>root# ls -l /bin/mount

-rwsr-xr-x 1 root root 68508 Feb 25 01:11 /bin/mount
</code>

Бит Setgit



Этот бит работает с программами почти так же, как и Setuid. Правда, в данном случае при выполнении программы используется идентификационный номер группы, к которой относится файл (а не групповой идентификационный номер пользователя, работающего с программой). В таких программах команда ls -l выдает для групповых битов доступа букву s (а не x). Восьмеричное значение этого бита составляет 2000.

При работе с каталогами бит Setgid действует так, что новые файлы, создаваемые в том или ином каталоге, сразу же относятся к той же группе, что и этот каталог (а не к группе пользователя, создавшего файл, как это бывает обычно).

Бит Sticky



В тех каталогах, где файлы может изменять любой пользователь, бит Sticky гарантирует, что каждый из пользователей может удалять только свои файлы, но не файлы коллег. Этот бит ставится, например, для каталога /tmp. Здесь любой пользователь может сохранять временные файлы. Однако необходимо избегать таких случаев, в которых любой пользователь мог бы по собственному усмотрению переименовывать или удалять файлы других пользователей.

Команда ls -l в таких программах выдает для всех действительных битов доступа букву t (а не x). Восьмеричное значение этого бита составляет 1000. Не забывайте при этом, что значение бита Sticky является специфичным для Linux. В других системах UNIX значение этого бита может быть другим (или может вообще отсутствовать).

<code>user$ ls -ld /tmp/

drwxrwxrwt 18 root root 4096 Jun 14 15:34 /tmp/
</code>

Специальные биты в Is



При выполнении команды ls -l в определенной ситуации могут отображаться специальные биты S и T. При этом мы не имеем дело с новыми специальными битами, а получаем указание на то, что биты Setuid, Setgid или Sticky были использованы неправильно.

OS — бит Setuid или Setgid поставлен, но не поставлен бит доступа x (тогда Setuid

или Setgid не будут работать). ОТ — бит Sticky поставлен, но не поставлен бит доступа x для группы others.

Функция или тип файла



В системе Linux вместе с битами доступа и специальными битами также сохраняется информация о том, какую функцию выполняет файл. Например, это может быть обычный файл, каталог, ссылка, блочное устройство и т. д.

Большинство файловых менеджеров скрывают эту дополнительную информацию. Однако существуют и такие программы, которые отображают эти данные в виде числовых значений. Тогда полная спецификация (указание) для обычного файла равняется 10000 плюс х000 (специальные биты) плюс ххх (биты доступа), то есть, к примеру, 100760. Числовые коды, соответствующие файлам различных типов, можно узнать с помощью команды man 2 stat.

Владелец, группа и биты доступа для новых файлов



Пример. Пользователь michael создает новый файл myFilel. Не удивляйтесь тому, что этот файл, опять же, принадлежит пользователю michael, ведь именно michael его создал. В качестве индикатора групповой принадлежности автоматически используется michael. Это основная группа пользователя michael (в некоторых дистрибутивах пользователю не выделяется отдельная группа, а все пользователи относятся к группе users).

<code>michael$ touch myFile1 michael$ ls -l myFile1

-rw-r--r-- 1 michael michael 0 Jun 14 16:45 myFilel
</code>

Пользователь michael также принадлежит к ряду других групп (команда groups). Чтобы создать файл, не относящийся к основной группе, сначала нужно сменить активную группу (команда newgrp):

michael$ groups

michael adm admin cdrom dokuteam dialout lpadmin plugdev sambashare michael$ newgrp dokuteam michael$ touch myFile2 michael$ ls -l myFile2

-rw-r--r-- 1 michael dokuteam 0 Jun 14 17:02 myFile2

Разумеется, myFile2 можно было бы создать и без применения newgrp. В таком случае групповую отнесенность файла следовало бы постепенно изменить с помощью команды chgrp. Команду newgrp удобно использовать тогда, когда создается несколько новых файлов, которые должны автоматически присваиваться определенным группам.

Владелец и групповая отнесенность


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

Если пользователь с помощью команды newgrp сделает активной другую группу, к которой он также принадлежит, то новый файл будет относиться к этой группе.
Если в каталоге будет поставлен бит Setgid (см. предыдущий подраздел), то файлы, создаваемые в данном каталоге, автоматически попадают в ту же группу, что и этот каталог. Активная группа пользователя в расчет не принимается.

Биты доступа


С битами доступа дело обстоит немного сложнее. В Linux предусмотрено, что новые файлы получают биты доступа rw-rw-rw (восьмеричное значение 666), то есть такие файлы может читать и изменять любой пользователь. Новые программные файлы, создаваемые компилятором, автоматически получают биты доступа rwxrwxrwx (777), то есть могут выполняться кем угодно.

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

В Linux обычно применяется значение umask, равное 022 (----w--w-). Таким образом, новые файлы получают биты доступа 666-022=644 (rw-r--r--), новые программы — биты доступа 777-022=755 (rwxr-xr-x). Текущее значение настройки umask можно узнать (а также изменить) с помощью одноименной команды:

michael$ umask

0022


Базовая настройка значения umask производится в файлах конфигурации соответствующей оболочки. Что касается bash (самой популярной оболочки Linux), umask обычно настраивается в файле /etc/profile или /etc/bashrc. В большинстве дистрибутивов отдельные пользователи могут поставить в файле ~/.bashrc специальную настройку, отличающуюся от задаваемой по умолчанию. Если, например, вы хотите, чтобы создаваемые вами файлы могли читать только члены группы, но не все остальные пользователи, применяйте следующую настройку:

# in ~/.bashrc umask 027


Тогда новые файлы получают права доступа rw-r-----, а новые программы —

rwxr-x---.

После того как файл будет создан, при работе другого пользователя с этим файлом не будут изменены ни данные о владельце, ни биты доступа. Изменять владельца файла может только администратор (таким образом, исключена возможность того, что владелец файла как бы «подарит» этот файл другому владельцу).
Читайте так же:
Запись CD и DVD дисков в linux






Подпишитесь на рассылку! Никакого спама, только обновления!!!

Комментарии (0)


    Услуги по MODX Revolution

    Посмотреть все услуги

    Техническая оптимизация сайта

    Подробнее & Заказать

    Создание сайта на MODX Revolution

    Подробнее & Заказать

    Перенос сайта на MODX Revolution

    Подробнее & Заказать

    Продвижение сайта на MODX

    Подробнее & Заказать