|
- Valery V. Kachurov, 15.11.01. -
Поскольку
UNIX - многопользовательская OS, в ней существует система
прав доступа к файлам, служащая для защиты файлов каждого
пользователя от влияния других пользователей системы.
Права
доступа подразделяются на три типа:
-чтение (read),
-запись
(write),
-выполнение (execute).
Разрешение на чтение позволяет
пользователю читать содержимое файлов, а в случае каталогов
- просматривать перечень имен файлов в каталоге (используя,
например, ls). Разрешение на запись позволяет пользователю
писать в файл, изменять его или удалять. Для каталогов это
дает право cоздавать в каталоге новые файлы и каталоги,
или удалять файлы в этом каталоге. Наконец, разрешение на
выполнение позволяет пользователю выполнять файлы (как бинарные
программы, так и командные файлы). Если на файле стоит атрибут
Execute, то независимо от его расширения он считается программой,
которую можно запустить. (Вот почему в *nix не принято ставить
исполняемым файлам расширения по типу DOS'овских *.com,
*.exe, *.bat. Вообще в Unix/Linux нет такого жесткого понятия
'расширение файла', как в Dos/Windows, и система сама определяет
тип файлов независимо от их расширения, но это - уже другая
история...). Так же атрибут выполнения может стоять у shell-скриптов,
CGI-скриптов, и у всего, что можно хоть как-то запустить.
Разрешение на выполнение применительно к каталогам означает
возможность выполнять команды вроде cd.
Эти типы прав
доступа могут быть предоставлены для трех классов пользователей:
- владельца ? у каждого файла в Linux'e есть один владелец.
- группы ? с каждым файлом связана группа пользователей
этого файла. Наиболее общая группа для файлов пользователей
называется users, в эту группу обычно включаются все пользователи
системы (чтобы узнать группу конкретного файла, используйте
команду ls -l file).
- всех остальных пользователей.
Владельцем файла
становится юзер, который создал этот файл. Короче говоря,
для файла все юзеры делятся на 3 типа: хозяин, или владелец,
юзеры, состоящие в одной группе с владельцем, и все остальные
юзеры. Для каждого типа - свои права. Учтите, что директории
и все системные устройства в UNIX являются обычными файлами.
Тот же самый /dev/fd0 - это не сам Floppy disk, а всего
лишь файл, связанный с флопповодом. Поэтому, если root запретил
юзеру доступ к этому файлу, тот не сможет использовать флопповод
(так же обстоят дела с модемами, хардами, etc).
Владельцем всех системных файлов является Root. Он же имеет
право забирать файлы у одного юзера и передавать их другому
(менять владельца).
Делается это
так: chown <имя нового владельца> <имя файла>.
Для передачи каталога надо вводить: chown -R <ия нового
владельца> <имя каталога>
Изменить права
доступа к файлу может либо его владелец, либо сам Root.
Делается это командой chmod. Существует две формы представления
прав доступа: символьная и цифровая.
Символьная форма прав доступа.
Если войти в любой каталог, где есть файлы,
и набрать "ls -l", то появится список всех файлов
в этом каталоге и права доступа в символьной форме. Строка
прав доступа состоит из 10 символов. Первый символ указывает
на тип файла: "d"-директория, "-"-обычный
файл. Три последующих - права доступа владельца к этому
файлу. Если первый символ из этих трех - "r",
владелец имеет право читать этот файл, а если "-",
то не имеет. Следующие 2 символа - "w"-писать
и "x"-запускать. Если вместо них стоит "-",
значит, владелец этого права не имеет. Еще 3 символа - права
доступа группы, еще три - права всех остальных пользователей.
Примеры:
drwxrwxrwx -
директория, к которой все имеют любые права доступа.
-rwxr--r-- -
обычный файл, владелец может делать все, а остальные - только
читать.
-r-------- -
обычный файл, который владелец может только читать, а остальные
пользователи не видят.
Важно заметить,
что права доступа, которые имеет файл, зависят также от
прав доступа к каталогу, в котором этот файл находится.
Например, даже если файл имеет -rwxrwxrwx, другие пользователи не смогут до него
добраться, если у них не будет прав на чтение и выполнение
каталога, в котором находится файл. Например, если юзер
захочет ограничить доступ ко всем своим файлам, он может просто изменить права доступа своего домашнего каталога
/home/user на drwx------. Таким образом, никто другой не
будет иметь доступ в его каталог, а следовательно посторонним
будут недоступны и все файлы. Так что, пользователь может
не заботиться об индивидуальной защите своих файлов. Другими
словами, чтобы иметь доступ к файлу, вы должны иметь доступ
ко всем каталогам, лежащим на пути от корня к этому файлу,
а также разрешение на доступ собственно к этому файлу. Обычно
пользователи UNIX весьма открыты всеми своими файлами. По
умолчанию файлам устанавливается защита -rw-r--r--, которая
позволяет другим пользователям читать файлы, но ни коим
образом их не менять. Каталогам обычно устанавливаются права
доступа drwxr-xr-x, что позволяет другим пользователям ходить
с правами экскурсантов по вашим каталогам, но ничего в них
не трогать и не записывать.
Но многие пользователи
хотят держать других подальше от своих файлов. Установив
права доступа файла -rw-------, вы никому не покажете этот
файл и не дадите записать в него. Также хорошо закрывает
файлы защита соответствующего каталога drwx------.
С правами доступа
в символьной форме chmod работает так:
chmod {a,u,g,o}{+,-}{r,w,x}
<filenames>
Кратко, вы выбираете
из all (все), user (пользователь), group (группа) или other
(другие). Далее указываете, либо вы добавляете права (+),
либо лишаете прав (-). И наконец, вы указываете один или
несколько режимов: read, write
или execute. Несколько примеров допустимых команд:
- chmod a+r stuff
Дает всем пользователям право читать файл stuff.
- chmod +r stuff
То же самое, что и ранее (a - по умолчанию).
- chmod og-x
stuff
Лишает права на выполнение всех, кроме владельца.
- chmod u+rwx
stuff
Разрешает владельцу все (read, write и execute).
- chmod o-rwx
stuff
Запрещает все (read, write и execute) пользователям категории
другие (other).
Числовая форма прав доступа.
Теперь права
доступа в числовой форме. Для некоторых эта форма может
показаться более простой. Надо запомнить только следующее:
400 - владелец
имеет право на чтение
200 - владелец имеет право на запись
100 - владелец имеет право на выполнение
40 - группа имеет право на чтение
20 - группа имеет право на запись
10 - группа имеет право на выполнение
4 - остальные имеют право на чтение
2 - остальные имеют право на запись
1 - остальные имеют право на выполнение
Теперь осталось
только просуммировать числа, соответствующие тем правам
доступа, которые мы хотим поставить файлу.
Примеры:
400+200+100+40+4=744.
chmod 744 stuff - владелец может делать все, а остальные
- только читать.
400+40+4=444.
chmod 444 stuff - все имеют право только на чтение.
400+100+10+1=611.
chmod 611 stuff - владелец может читать и выполнять, остальные
- только выполнять.
400+200+100+40+10+4+1=755.
chmod 755 script - Классическая команда. Скрипт
- это исполняемый файл, и все должны иметь к нему доступ
на чтение и выполнение. Только владелец этого файла может
его изменять или удалять.
И, наконец, соответствия атрибутов файлов в Dos и Unix/Linux:
|
Dos
|
Unix/Linux
|
|
Read only (Только для чтения)
|
Выключено право на запись файла для владельца.
|
|
Archive (Архивный)
|
Такого не замечено.
|
|
Hidden (Скрытый)
|
Если в начале файла стоит точка, то этот файл - скрытый. Пример: .hidden_file
|
|
System (Системный)
|
Такого тоже не замечено :)
|
|