Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Страницы справочного руководства ОС UNIX на русском : Основы ОС UNIX (5)


Информационный Канал Subscribe.Ru

Выпуск 115

Уважаемые подписчики!

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

Ваши отзывы об этих учебных материалах шлите мне по почте, в гостевую или оставляйте в комментариях на соответствующей странице проекта "Хроника бегства от безопасности".


Основы ОС UNIX. Учебный курс. Часть 5

Copyleft (no c) - Fuck copyright! 1999-2003 В. Кравчук, OpenXS Initiative, идея, составление, перевод, примеры

Изменение прав доступа к файлу

Для установки (изменения) прав доступа к файлу используется команда chmod. Она имеет следующий синтаксис:

chmod [ -fR ] абсолютные_права файл ...
chmod [ -fR ] символьное_изменение_прав файл ...

Команда chmod устанавливает права доступа к указанным файлам. Права доступа к файлу может изменять или устанавливать только его владелец или пользователь root. Опция -f означает, что команда не будет сообщать о невозможности установки прав доступа. Опция -R означает, что заданное изменение прав доступа будет применяться рекурсивно для всех подкаталогов, указанных в списке файлов.

Абсолютные права доступа задаются восьмеричным числом, расчет которого (в соответствии с табл. 11) описан в предыдущем разделе. Описанию синтаксиса, используемого для задания символьного изменения прав доступа, посвящен следующий подраздел.

Символьное представление изменения прав доступа

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

[пользователи] оператор [права]

Компонент пользователи определяет, для кого задаются или изменяются права. Он может иметь значения u, g, o и a, задающие изменения прав для владельца, группы, прочих пользователей и всех категорий пользователей. Если пользователи не указаны, права изменяются для всех категорий пользователей. Однако при этом не переопределяются установки, задаваемые маской создания файлов (umask).

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

Компонент права задается в виде любой совместимой комбинации следующих символов:

r
право на чтение

w
право на запись

x
право на выполнение

l
блокирование изменения прав доступа

s
выполнение с эффективным идентификатором владельца или группы-владельца

t
клейкий бит

Не все сочетания символов для компонента пользователи и компонента права допустимы. Так, s можно задавать только для u или g, а t - только для u. Права x и s не совместимы с l и т.д.

Изменения прав доступа в списке выполняются последовательно, в порядке их перечисления.

Рассмотрим пример изменения прав доступа:

 
[kravchuk@arturo 10:51:43 /]$ cd /tmp 
[kravchuk@arturo 10:51:46 /tmp]$ >f1.txt 
[kravchuk@arturo 10:52:01 /tmp]$ chmod +w f1.txt 
[kravchuk@arturo 10:52:13 /tmp]$ ls -l *.txt 
-rw-r--r--   1 kravchuk 50             0 Мар 27 10:52 f1.txt 
[kravchuk@arturo 10:52:17 /tmp]$ chmod a+w f1.txt 
[kravchuk@arturo 10:52:32 /tmp]$ ls -l *.txt 
-rw-rw-rw-   1 kravchuk 50             0 Мар 27 10:52 f1.txt 
[kravchuk@arturo 10:52:33 /tmp]$ chmod u+x,g=x,o= f1.txt 
[kravchuk@arturo 10:53:18 /tmp]$ ls -l *.txt 
-rwx--x---   1 kravchuk 50             0 Мар 27 10:52 f1.txt 
[kravchuk@arturo 10:53:20 /tmp]$ chmod ug-x,og+r,u=rwx f1.txt 
[kravchuk@arturo 10:54:46 /tmp]$ ls -l *.txt 
-rwxr--r--   1 kravchuk 50             0 Мар 27 10:52 f1.txt 
[kravchuk@arturo 10:55:15 /tmp]$ chmod 644 f1.txt 
[kravchuk@arturo 10:55:23 /tmp]$ ls -l *.txt 
-rw-r--r--   1 kravchuk 50             0 Мар 27 10:52 f1.txt 

Рассмотрим еще один пример, показывающий значение и изменение прав доступа к каталогу:

 
[kravchuk@arturo 11:05:38 /tmp]$ ls -l | grep d1 
drw-r--r--   2 kravchuk 50           108 Мар 26 17:39 d1 
[kravchuk@arturo 11:05:47 /tmp]$ cd d1 
bash: cd: d1: Permission denied 
[kravchuk@arturo 11:05:57 /tmp]$ chmod 744 d1 
[kravchuk@arturo 11:06:26 /tmp]$ cd d1 
[kravchuk@arturo 11:06:27 /tmp/d1]$ cd .. 
[kravchuk@arturo 11:06:39 /tmp]$ chmod -w d1 
[kravchuk@arturo 11:06:51 /tmp]$ cd d1 
[kravchuk@arturo 11:06:58 /tmp/d1]$ ls 
f3.txt 
[kravchuk@arturo 11:06:59 /tmp/d1]$ rm f3.txt 
rm: f3.txt not removed: Permission denied 

Установка режима создания файла

Новый файл создается с правами доступа, определяемыми пользовательской маской режима создания файлов. Команда umask (встроенная команда интерпретатора) присваивает пользовательской маске режима создания файлов указанное восьмеричное значение. Три восьмеричные цифры соответствуют правам на чтение/запись/выполнение для владельца, членов группы и прочих пользователей, соответственно.

Команда umask имеет следующий синтаксис:

umask [ -S ] [ маска ]

Если параметры не указаны, команда umask выдает текущее значение маски. По умолчанию, значение выдается и задается в восьмеричном виде как число, которое необходимо "вычесть" из максимальных прав доступа (777 для выполняемых файлов, которые создаются компиляторами, и 666 для обычных файлов):

 
[kravchuk@arturo 11:22:55 /tmp/d1]$ umask 
022 
При такой маске обычные текстовые файлы будут создаваться с правами 666 - 022 = 644:
 
[kravchuk@arturo 11:33:43 /tmp]$ >f5.txt 
[kravchuk@arturo 11:33:48 /tmp]$ ls -l f5* 
-rw-r--r--   1 kravchuk 50             0 Мар 27 11:33 f5.txt 

Операция "вычитания" для значения маски формально выполняется как побитовое логическое И дополнения маски и максимальных прав доступа. Рассмотрим пример расчета:

Двоичное значение маски: 000010010
Дополнение маски: 111101101
Максимальное значение прав: 110110110
Логическое И предыдущих двух строк: 110100100
Результирующие биты прав: 110100100 (644)

Для выполняемых файлов, создаваемых, например, компилятором языка C:

Двоичное значение маски: 000010010
Дополнение маски: 111101101
Максимальное значение прав: 111111111
Логическое И предыдущих двух строк: 111101101
Результирующие биты прав: 111101101 (755)

Опция -S требует выдавать маску в символьном виде, показывая, какие биты прав доступа будут установлены у создаваемого файла (также с учетом того, создается ли выполняемый или обычный текстовый файл):

 
[kravchuk@arturo 11:23:00 /tmp/d1]$ umask -S 
u=rwx,g=rx,o=rx 

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

Рассмотрим еще один пример создания файла при другом значении маски:

 
[kravchuk@arturo 11:33:52 /tmp]$ umask 257 
[kravchuk@arturo 11:41:39 /tmp]$ umask -S 
u=rx,g=w,o= 
[kravchuk@arturo 11:41:43 /tmp]$ >f6.txt 
[kravchuk@arturo 11:41:55 /tmp]$ ls -l f6* 
-r---w----   1 kravchuk 50             0 Мар 27 11:41 f6.txt 

Изменение принадлежности файла

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

chown [-h][-R] владелец[:группа] файл ...

Опция -h требует изменять владельца файла, на который указывает символическая связь, а не самой связи, как происходит по умолчанию. Опция -R требует рекурсивно изменить владельца во всех подкаталогах.

Для изменения только группы, владеющей файлом, используется команда chgrp:

chgrp [-h][-R] группа файл ...

Ее опции аналогичны команде chown.

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

Рассмотрим простой пример:

 
$ ls -l 
total 2 
-rw-r--r--    1 user01   others           6 Dec 10 16:19 testfile 
$ chown informix testfile 
$ ls -l 
total 2 
-rw-r--r--    1 informix others           6 Dec 10 16:19 testfile 
$ logname 
user01 
$ chown user01 testfile 
UX:chown: ERROR: testfile: Not privileged 

Поиск файлов

В логической файловой системе ОС UNIX - тысячи файлов, поэтому необходимы средства поиска файлов по различным критериям. Для поиска файлов предназначена команда find со следующим синтаксисом:

find каталог ... выражение

Утилита find просматривает иерархии каталогов в поисках файлов, удовлетворяющих критерию, задаваемому выражением. Выражения строятся из элементов с использованием следующих конструкций:

( элемент )
Истинно, если истинен элемент в скобках (поскольку скобки - метасимвол командного интерпретатора, их надо экранировать). Скобки используются для группировки элементов.

! элемент
Истинно, если элемент не истинен.

элемент [-a] элемент
Истинно, если истинны оба элемента. Если элементы просто перечислены подряд, предполагается эта же логическая операция И.

элемент -o элемент
Истинно, если истинен хотя бы один элемент.

Имена найденных (удовлетворяющих критерию, задаваемому выражением) файлов по умолчанию выдаются в стандартный выходной поток.

В качестве элементов выражения используются основные конструкции, представленные в табл. 12. Выражение проверяется слева направо, с учетом скобок.

Таблица 12. Основные элементы выражения в команде find

Элемент Назначение или критерий истинности
-name шаблон Истинен, если имя файла соответствует шаблону. При использовании метасимволов необходимо маскировать шаблоны от командного интерпретатора.
-type тип Истинен, если файл - указанного типа. Типы файлов задаются символами b, c, d, f, l, p и s, обозначающими, соответственно, специальное блочное устройство, специальное символьное устройство, каталог, обычный файл, символьную связь, именованный канал и сокет.
-user пользователь Истинен, если файл принадлежит пользователю, указанному по идентификатору или регистрационному имени.
-group группа Истинен, если файл принадлежит группе, указанной по идентификатору или имени.
-perm [-]права Если дефис не задан, то истинен только если права доступа в точности соответствуют указанным (как в команде chmod, проще - абсолютные). Если задан дефис, истинен, если в правах доступа файла, как минимум, установлены те же биты, что и в указанных правах.
-size n[c] Истинен, если файл имеет длину n блоков (блок - 512 байтов) или символов (если указан суффикс c). Перед размером можно указывать префикс + (не меньше), - (не больше) или = (в точности равен).
-atime n Истинен, если к файл последний раз обращались n дней назад. Перед n в элементах -atime, -ctime и -mtime можно указывать префикс + (не позже), - (не ранее) или = (ровно).
-ctime n Истинен, если файл создан n дней назад.
-mtime n Истинен, если файл был изменен n дней назад.
-newer файл Истинен, если файл - более новый, чем указанный.
-ls Всегда истинен. Выдает информацию о файле, аналогичную длинному листингу.
-print Истинен всегда. Выдает полное имя файла в стандартный выходной поток.
-exec команда {} \; Истинен, если выполненная команда возвращает код возврата 0. Команда заканчивается замаскированной точкой с запятой. В команде можно использовать конструкцию {}, заменяемую полным именем рассматриваемого файла.
-ok команда {} \; Аналогичен exec, но полученная после подстановки имени файла вместо {} команда выдается с вопросительным знаком и выполняется только если пользователь ввел символ y.
-depth Истинен всегда. Требует так обходить иерархию каталогов, чтобы файлы любого каталога всегда обрабатывались раньше, чем сам каталог (обход "в глубину").
-prune Истинен всегда. Требует не проверять файлы в каталоге, сопоставившемся с предыдущим элементом выражения. Не действует, если ранее указан элемент -depth.

В различных версиях ОС UNIX могут поддерживаться и другие компоненты выражений в команде find. Если командная строка сформирована неправильно, команда немедленно завершает работу.

Рассмотрим несколько примеров использования команды find:

 
[kravchuk@arturo 15:05:25 /tmp]$ find . -user kravchuk -size +0c -ls 
find: cannot read dir ./smc898: Permission denied 
475898122    4 -rw-r--r--  1 kravchuk 50            666 Mar 26 16:58 ./-1 
473866040    4 -rw-r--r--  1 kravchuk 50              6 Mar 26 17:55 ./1.txt 
475472259    4 dr-xr--r--  2 kravchuk 50            108 Mar 26 17:39 ./d1 
474199552    4 -rw-r--r--  1 kravchuk 50            639 Mar 26 16:55  
 ./d1/f3.txt 
476732956    4 -rw-r--r--  1 kravchuk 50              6 Mar 26 17:55 ./2.txt 
476732980    4 -rw-r--r--  1 kravchuk 50             12 Mar 26 17:56 ./3.txt 
476142563    4 -rw-r--r--  1 kravchuk 50              7 Mar 26 17:56 ./4.txt 
[kravchuk@arturo 15:26:41 /tmp]$ find . -name "??.txt" -print 
find: cannot read dir ./smc898: Permission denied 
 ./d1/f3.txt 
 ./f1.txt 
[kravchuk@arturo 15:26:58 /tmp]$ find . -name d1 -prune -name "??.txt" -print 
find: cannot read dir ./smc898: Permission denied 
[kravchuk@arturo 15:27:09 /tmp]$ find . -name d1 -prune -o -name "??.txt" -print 
find: cannot read dir ./smc898: Permission denied 
 ./f1.txt 
[kravchuk@arturo 15:27:13 /tmp]$ find . -user kravchuk -ok rm {} \; 
find: cannot read dir ./smc898: Permission denied 
< rm ... ./p1 >?   y 
< rm ... ./-1 >?   y 
< rm ... ./1.txt >?   y 
< rm ... ./mpDfa4ZT >?   y 
< rm ... ./d1 >?   y 
rm: Unable to remove directory ./d1: File exists 
< rm ... ./d1/f3.txt >?   y 
< rm ... ./2.txt >?   y 
< rm ... ./3.txt >?   y 
< rm ... ./4.txt >?   y 
< rm ... ./f1.txt >?   y 
[kravchuk@arturo 15:28:35 /tmp]$ find . -user kravchuk -print 
find: cannot read dir ./smc898: Permission denied 
 ./d1 
 ./d1/f3.txt 

Структура и свойства файловых систем

Логическая файловая система - основные каталоги и их назначение

Использование общепринятых имен основных файлов и структуры каталогов существенно облегчает работу в операционной системе, ее администрирование и повышает переносимость. Типичная структура и назначение каталогов файловой системы UNIX представлена в табл. 13.

Таблица 13. Основные каталоги логической файловой системы UNIX

Каталог Назначение и содержание
/ Корневой каталог. Является основой любой файловой системы UNIX. Все остальные каталоги и файлы располагаются в рамках структуры, порожденной корневым каталогом (в нем и в его подкаталогах), независимо от их физического местонахождения. Для корневого каталога обязательно должна создаваться отдельная физическая файловая система, а сам он является точкой ее монтирования, о чем свидетельствует наличие подкаталога lost+found.
/bin Пользовательские выполняемые программы. Сейчас обычно является символической связью, указывающей на /usr/bin.
/dev Каталог для специальных файлов устройств. Может иметь подкаталоги для различных классов и типов устройств, например, dsk, rdsk, rmt, inet (в SVR4).
/etc Каталог для конфигурационных файлов. Может иметь подкаталоги для различных компонентов и служб. Конфигурационные файлы в UNIX - обычные текстовые.
/home Каталог для размещения начальных каталогов пользователей. Часто является точкой монтирования отдельной физической файловой системы.
/lib Каталог для библиотек. Сейчас обычно является символической связью, указывающей на /usr/lib.
/lost+found Подкаталог, имеющийся в каждом каталоге, являющемся точкой монтирования физической файловой системы на диске. Корневой каталог всегда представлен отдельной физической файловой системой, должен быть всегда доступен, и монтируется автоматически при запуске системы. Все остальные физические файловые системы формально не нужны для функционирования ОС UNIX.
/mnt Точка монтирования для файловых систем на съемных носителях или дополнительных дисках. Может содержать подкаталоги для отдельных типов носителей, например, cdrom или floppy. Может юыть пустым.
/opt Каталог для дополнительного коммерческого программного обеспечения. Может быть пустым или отсутствовать (в BSD-системах).
/proc Каталог псевдо-файловой системы, представляющей в виде каталогов и файлов информацию о ядре, памяти и процессах, работающих в системе.
/sbin Каталог для системных выполняемых программ, необходимых для решения задач системного администрирования.
/tmp Каталог для временных файлов. Имеет установленный клейкий бит и доступен для записи и чтения всем пользователям. Обычно создается в виде отдельной физической файловой системы, в том числе, в виртуальной памяти.
/usr В этом каталоге находятся выполняемые программы, библиотеки, заголовочные файлы, справочные руководства (/usr/share/man), исходные тексты ядра и утилит системы (Linux), растущие файлы и очереди печати (/usr/spool в BSD-системах) и т.д. Часто каталог является точкой монтирования отдельной физической файловой системы. Ниже представлены основные его подкаталоги.
/usr/bin Основные выполняемые программы и утилиты.
/usr/include Заголовочные файлы библиотек. Может содержать подкаталоги.
/usr/lib Статически и динамически компонуемые библиотеки. Может содержать подкаталоги.
/usr/local Каталог для дополнительного свободно распространяемого программного обеспечения (GNU). Содержит структуру подкаталогов, аналогичную корневому каталогу (bin, etc, include, lib и т.д.).
/var В UNIX System V и Linux этот каталог является заменителем каталога (/usr/spool), используемого для хранения растущих файлов различных сервисных подсистем, например, файлов журналов системы. Так, основной журнал системы, ведущийся демоном syslogd, размещается в виде нескольких файлов в подкаталоге /var/adm. Там же, в файле /var/adm/messages, сохраняются сообщения времени загрузки. Имеет смысл создавать отдельную физическую файловую систему для размещения этого каталога (и, возможно, его подкаталога /var/run).

Наличие, назначение и использование других каталогов верхнего уровня и подкаталогов зависит от версии ОС UNIX, установленного системного и прикладного программного обеспечения и конфигурации системы, созданной администратором.


В следующем выпуске

Следующая часть учебного курса "Основы ОС UNIX". Следите за новостями на сайте рассылки.

С наилучшими пожеланиями,

  В.К.



http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное