Основные биты доступа (чтение/запись/выполнение)
Рассмотрим подробнее - что представляют собой "права доступа".
Еще раз вернемся к примеру. При распечатке содержимого директории
(например, командой ls) каждая строчка имеет вид
-rw-r--r-- 1 pascal users 4297 13 мар 21:45 files1
причем нас интересует в данном случае только первая колонка.
Она состоит из десяти знаков. Однако, самый первый знак не имеет отношения
к permissions, а обозначает "тип этого объекта". Поскольку, в директории
кроме файлов могут находится поддиректории и, кроме того, в Юниксе,
кроме обычных файлов существуют другие объекты ("линки", "очереди", "сокеты"
и т.п.), которые также находятся в директориях и имеют атрибуты как и у
обычных файлов. Так вот, первый символ как раз и показывает - что за
объект мы видим, обычный файл (значок "-"), поддиректорию (значок "d")
или еще какой-нибудь специфический Юниксовый объект ("l", "s", "p"...).
Остальные девять знаков на самом деле представляют собой три группы
по три символа. Каждая такая группа определяет права для какой-либо
из трех категорий юзеров
- первая группа - права "хозяина"
- вторая группа - права "группы особо допущенных"
- третья группа - права для "всех остальных"
Смысл отдельных битов в каждой такой группы "прав" одинаков для всех трех
категорий пользователей, поэтому можно подробнее рассматривать любую
такую группу, не уточняя - для какой категории юзеров она предназначена.
Однако, для файлов и директорий смысл этих битов немного отличается,
поэтому их стоит рассмотреть отдельно.
Первый бит, обозначается буквой "r" (read), и означает, что юзеру,
подпадающему под соответствующую категорию, разрешается читать
содержимое этого файла.
То есть он может посмотреть содержимое файла, а также скопировать
этот файл. Кстати, это не означает, что юзер сможет запустить его
на выполнение (если это программа).
Второй бит, обозначается буквой "w" (write) и разрешает писать в
файл. То есть юзер сможет изменить содержимое файла (например, каким-нибудь
редактором), дописать что-нибудь в конец или стереть все содержимое.
Обратите внимание, этот бит еще не дает право удалить сам файл из
директории или изменить ему название (это определяется правами на саму
директорию), но дает возможность сделать этот файл пустым (нулевой длины)
или скопировать в него содержимое другого файла (и тем самым "подменить"
его).
И, наконец, третий бит, обозначается буквой "x" (eXecute), позволяет
запустить на выполнение этот файл, если он представляет собой программу
или командный файл.
Обратите внимание, что это также основной признак, по которому система
догадывается о "запускаемости" этого файла. Часто начинающие пользователи
составив какой-нибудь командный файл, забываю установить на него бит
"исполнения" хотя бы для себя - владельца этого файла. В результате, при
попытке запустить его, система сообщает, что "вы не имеете права" (выполнять
этот файл). Естественно, что в данном случае причина не в том, что "злобный"
администратор существенно "урезал" права этого юзера, а в том, что он сам
забыл "наделить себя правом" (вполне законным).
Первый бит ("r") разрешает читать оглавление этой директории, то есть
список файлов и поддиректорий, находящихся в ней. Однако, этот бит
еще не дает возможность зайти в эту директорию (командой cd) или получить
доступ к содержимому, то есть читать/запускать/изменять файлы, даже
если "права доступа" установленные на самих файлах это позволяют.
Поэтому, само по себе "право чтения" директории практически бесполезно
и этот бит, как правило ставиться только вместе с битом "x".
Немного забегая вперед, рассмотрим сразу третий бит - "x". Для директорий
он как раз означает, что юзер может получит доступ к "компонентам", то есть
отдельным файлам и поддиректориям. Только при наличии это бита, система
разрешит войти в эту директорию и выполнить какое-нибудь действие с файлом,
если сами файлы ("права доступа" на них) это позволят.
Кстати, обратите внимание, что если даже внутренние поддиректории имеют
"нормальные" права для какой-то категории юзеров, а вышестоящая директория -
нет (отсутствует бит "x"), то этим юзерам не удастся "занырнуть" в
поддиректории, минуя вышестоящую. Система проверяет полный "путь" до
конечной директории или файла (например, /usr/share/misc/fonts) и,
если хотя бы один из компонентов этого пути не имеет соответствующего
бита, то юзеру будет отказано в доступе.
Наконец, бит "w", установленный на директории, позволяет изменять
оглавление директории. То есть, разрешает создавать новые файлы
(или копировать другие файлы в эту директорию), менять названия файлов
и удалять файлы.
Обратите внимание на "разделение полномочий" между теми permissions,
которые стоят на файле и теми, которые на директории.
Как уже говорилось, если права на директорию не позволяют юзеру
удалить файл, находящийся в ней (нет бита "w") это не означает, что
юзер не сможет "удалить содержимое" файла (например, "вытерев" все в нем
редактором).
С другой стороны, если юзер имеет право менять содержимое директории,
он сможет удалить или переименовать любой, находящийся в ней файл,
даже если права на самом файле не позволяют ему не то что писать в файл,
но и читать его.
(Правда, тут есть некоторые нюансы, смортри "Флаги")
И еще на что следует обратить внимание. Никакие из перечисленных здесь
прав не имеют отношения к изменениям самих "атрибутов доступа", то есть -
владельца файла, группы и permissions. Их изменение подчиняется другим
законам, о которых будет сказано ниже (смотри "Как поменять...").
И последнее замечание. Все эти биты не имеют никакого эффекта для юзера
root (и программ, которые во время выполнения поменяли свой "эффективный
userID" на "рутовский"). То есть, он может делать с файлом или директорией
все что хочет.
Правда, и здесь есть одно исключение. Поскольку бит "x" на файле является
основным признаком "исполняемости" этого файла, даже root не сможет
убедить систему, что файл является программой и его можно выполнять,
пока не поставит в атрибутах этот бит.
Далее...Дополнительные биты доступа
Иван Паскаль pascal@tsu.ru