Документация по ОС FreeBSD Суббота, 18.01.2025, 13:07
Приветствую Вас Гость | RSS
Меню сайта

Категории каталога
Мои статьи [0]
Установка и настройка [281]
X Window [25]
Man pages [30]
Ports & Packages [26]
cvs [18]
Multimedia [20]
Нововсти в мире Unix [0]
RFC [4]
RFC (Request for Comments, Запрос на комментарии) - серия документов, публикуемая сообществом исследователей и разработчиков, руководствующихся практическими интересами, в которой описывается набор протоколов и обобщается опыт функционирования Интернет.
Безопасность [52]
Работа с железом [58]
Книги по FreeBSD [17]
Сеть [505]
Программирование [40]
FireWall [58]
Темы экзамена BSDA [14]
Официальные темы экзамена BSDA, включая подробноые описания и советы по обучению.

Главная » Статьи » Установка и настройка

Типы файлов и права доступа
Поскольку любая Unix, и в частности FreeBSD - система многопользовательская, в ней предусмотрен механизм, ограничивающий доступ юзеров к файлам и директориям.

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

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

Во-первых, если юзер и вносит какие-то изменения в файлы или директории, он это делает с помощью каких-то программ (редакторов, "коммандеров", системных утилит для копирования, удаления файлов и т.п.), которые в момент выполнения являются процессами.

Во-вторых (что более важно), не все программы запускаются юзерами "вручную". Некоторые из них (демоны) запускаются при старте системы. Другие могут запускаться в определенные моменты времени (с помощью программы cron), или вызываться по мере необходимости для обслуживания запросов приходящих по сети (обычно их запускает программа-"диспетчер" inetd). Кроме того, существует ряд программ, которые для выполнения каких-то вспомогательных действий сами запускают другие программы (в этом случае говорят, что процесс-"родитель" запустил процесс-"потомок"). Понятно, что хотелось бы и этим программам (процессам) ограничить доступ к файлам.

И наконец, в-третьих, в некоторых случаях очень полезно, чтобы программа, запущенная юзером, имела больше прав, чем обычно имеет этот юзер. Например, обычный юзер не может даже читать файл, в котором "спрятаны" пароли всех юзеров. В то же время, любой юзер должен иметь возможность поменять свой личный пароль, не обращаясь для этого к администратору. Но для этого ему надо иметь возможность записать что-то в файл паролей. Значит программа, которая это делает (passwd) в момент выполнения должна иметь права намного большие, чем юзер, который ее запускает.

Не вдаваясь в подробности, можно сказать, что каждый процесс имеет идентификатор юзера (userID). Обычно он совпадает с userID'ом того юзера, который запустил этот процесс.

процессы, которые запустились автоматически, тоже имеют userID, как будто их запустил реальный юзер. Чей именно userID получают эти программы обычно определяется теми программами, которые их стартуют (программа-загрузчик, cron, inetd и т.д.). В простейших случаях программы-"потомки" просто "наследуют" userID от программы-"родителя", но некоторые "родители" могут запускать программы с другим userID (не совпадающим с собственным).

некоторые программы в процессе выполнения могут поменять свой userID и, соответственно, получить права, которые сам юзер не имел. Естественно, для того, чтобы программа могла это сделать, администратор должен "разрешить" ей такое поведение (подробнее об этом будет сказано ниже). Кстати, изменение userID'а делается не только, когда нужно "расширить" права программы, но и наоборот - "сузить" до прав какого-нибудь конкретного юзера.

если процесс может изменять свой userID, то различают "реальный userID" и "эффективный userID" (есть еще "сохраненный userID"). Реальный userID - это идентификатор юзера, который запустил процесс (или userID процесса-"родителя"). А эффективный - это новый userID, который задача получила во время выполнения.

права на файл (или директорию) определяются по "эффективному userID" процесса. В простейшем случае, когда userID не меняется, "реальный" и "эффективный" userID'ы совпадают и можно говорить просто об userID'е процесса. Или даже просто о правах юзера (а не процесса) на файл.

Какие атрибуты файла определяют "праводоступа".

Все юзеры для каждого файла (или директории) делятся на три категории

1. владелец (или хозяин) этого файла
2. группа "особо допущенных" к этому файлу
3. все остальные.

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

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

Итак.
В заголовок файла записывается идентификатор юзера (userID), который считается его владельцем. Заметьте, что "хозяином" может быть только один определенный юзер.

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

И, наконец, в атрибутах файла есть некий набор битов или "флажков", который и указывает - кто и что может проделать с этим файлом. Этот набор называется permissions, что можно перевести как "допуски" или "права на доступ".

Наберите команду

ls -l
(аналог команда dir в MS DOS)
и вы увидите несколько строчек типа

-rw-r--r-- 1 bob users 4297 23мар 17:37 list_us
-rwxr-xr-x 1 bob users 1502 17мар 12:03 myProg
-rw-r--r-- 1 bob users 5354 12мар 23:51 tmp.dat
________/ _/ ___/ __/ __________/ ______/
"права" владелец группа длина дата имяфайла

В третьей колонке вы видите имя (login name) юзера - "хозяина" этих файлов (в данном случае это - bob). В четвертой колонке - название группы, приписанной также к этим файлам (в данном случае - users). И, наконец, в самой первой колонке (набор знаков типа "r", "w" и "-") сами permissions для всех трех категорий пользователей.

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

Основные биты доступа (чтение/запись/выполнение)

Рассмотрим подробнее - что представляют собой "права доступа".

При распечатке содержимого директории (например, командой ls) каждая строчка имеет вид

-rw-r--r-- 1 bob 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 не сможет убедить систему, что файл является программой и его можно выполнять, пока не поставит в атрибутах этот бит.

Дополнительные биты доступа

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

Бит suid.

Бит suid. Расшифровывается как Set user ID, переводится как "установить идентификатор юзера". Поскольку подходящего русскоязычного термина не существует, его обычно называют "суидный" бит, а файлы, на которых он установлен - "суидными".

Смысл его состоит в том, что если он установлен на файле, который является программой, то при выполнении эта программа автоматически меняет "эффективный userID" на идентификатор того юзера, который является владельцем этого файла. То есть, не зависимо от того - кто запускает эту программу, она при выполнении имеет права хозяина этого файла.

Обычно это делается для того, чтобы юзер мог выполнить действия, которые требуют привилегий root'а (например, поменять свой пароль). Естественно, что для этого владельцем такой программы должен быть юзер root.

Понятно, что такая программа является "потенциально опасной". В "нормальном" случае она не позволит обычному юзеру сделать то, что выходит за пределы его полномочий (например, программа passwd разрешит юзеру изменить только собственный пароль, но не пароли других юзеров). Но, даже незначительная ошибка в такой программе может привести к тому, что "злоумышленник" сможет заставит ее выполнить еще какие-нибудь действия, не предусмотренные автором программы. Кстати, большинство известных способов "взлома" системы заключаются не в том, чтобы узнать пароль root'а, а как раз в том, чтобы заставить какую-нибудь из "суидных" программ выполнять действия необходимые "взломщику".

Вообще говоря, использование "суидных" программ (когда они нужны и для чего) - достаточно обширная тема выходящая за рамки разговора о permissions. Замечу только, что это не единственный путь сменить "эффективный userID". Это можно сделать из самой программы, вызвав специальную системную функцию, но для этого программы должна уже иметь права root'а. То есть, ее должен запустить юзер root, или она должна быть "суидной", как сказано выше.

Возвращаясь к разговору о "правах доступа", надо сказать, что у такого файла permissions выглядят как **s****** (если еще и установлен бит x для владельца файла) или как **S****** (если бит x не установлен). Однако, ставить suid бит на неисполняемые файлы обычно не имеет смысла (по крайней мере в FreeBSD). Хотя, существуют программы, которые проверяли этот бит даже для текстовых файлов. Также, это бит не несет никакого смысла, если его поставить на директорию, хотя никто не запрещает это сделать.

Бит sgid

Бит sgid. Расшифровывается как Set group ID, переводится как "установить идентификатор группы".

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

Permissions такого файла выглядят как *****s*** (если установлен бит x для группы) или *****S** (если соответствующего бита x нет). Также как и в предыдущем случае, бит sgid для неисполняемых файлов никакого смысла не имеет.

Что касается бита sgid на директории...

Для FreeBSD (и других BSD-систем) этот бит, опять же, не оказывает никакого действия. Но в некоторых других Unix-системах он означает, что, когда файлы создаются в такой директории, в их атрибутах проставляется группа та же, что и у директории. Другими словами, файлы, создаваемые в такой директории "наследуют" группу от директории.

Бит sticky

Бит sticky. Никак не расшифровывается, переводится как "липкий".
Выглядит в permissions, как ********t (если вместе с битом x для "всех остальных") или ********T (если соответствующего бита x нет).

Для директорий его смысл заключается в том, что удалить файл из такой директории (или переименовать) может только владелец файла. Напомню, что в обычном случае (без такого бита) возможность удалять файлы (как и создавать) определяется правом записи (бит w) на директории. То есть, если какой-либо юзер принадлежит к категории, для которой разрешена запись в директорию, он может удалить в ней любой файл, независимо от атрибутов (владельца, группы, permissions) самого файла.

Применяют этот бит, обычно, на директориях, которые являются "публичными" (например, /tmp). Такие директории имеют права доступа, позволяющие всем юзерам создавать там свои файлы и удалять их. Однако было бы неправильно, что любой другой юзер мог по ошибке или "из вредности" удалять файлы, к которым он не имеет никакого отношения. Для того чтобы предотвратить возможность удаления файла "посторонним" юзером, как раз и служит sticky бит.

Этот бит может ставиться также на исполняемые файлы. В этом случае он означает, что файл, даже после завершения работы, должен оставаться в памяти (конечно, не в ОЗУ, а в swap).

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

Сочетания битов доступа.

Для файлов


Обычно права на файл (например, для "всех остальных") устанавливаются

--- никаких прав (нельзя ни читать, ни изменять содержимое)
r-- только чтение
rw- и чтение и запись (изменение) файла.

Если файл является "исполняемым", то права могут выглядеть

--- опять же, никаких прав (читать нельзя, запускать нельзя)
r-x можно запустить файл-задачу на выполнение
rwx можно не только запустить, но и что-нибудь в нем поменять
Остальные сочетания (например -w- или --x) кажутся бессмысленными.
Однако, это не всегда так. Рассмотрим подробнее.

Права -w- означают, что юзер из соответствующей категории не может прочитать этот файл, но может в него писать.

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

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

Правда, при этом никто не мешает тем же юзерам просто не читая, записать в этот файл что-нибудь, удалив при этом все старое содержимое файла. Или даже скопировать туда файл нулевой длины (или /dev/null), при этом, естественно, вообще никакого "содержимого" у вашего файла не станет. Однако, чтобы предотвратить такую ситуацию можно поставить на тот же файл флаг "только дозапись". Он не помешает вам читать свой файл, а другим юзерам дописывать в него что-нибудь. Правда, не даст даже вам стирать из файла все лишнее или удалить файл, пока вы не "снимите" флаг.

Теперь посмотрим на исполняемые файлы.

Права --x на самом деле вполне законная комбинация. Она означает, что запустить эту задачу можно (и получить от нее какой-то результат). Нельзя только скопировать этот файл себе или "залезть" в него отладчиком.

Поэтому, такие permissions даже полезны, если вы хотите сохранить свою "интеллектуальную собственность". Комбинация -wx, пожалуй, смысла не имеет (как и просто -w- на исполняемом файле). Вы просто даете возможность изменить содержимое, причем "вслепую" (поскольку посмотреть это содержимое нельзя). Результатом может быть только порча вашего файла.

Также можно отнести к бессмысленным и права r-- на исполняемом файле. Если вы хотите таким способом "подразнить" кого-то (вот есть такой файл, можно посмотреть - как он внутри устроен, а выполнить нельзя), то не обольщайтесь. Другой юзер спокойно может скопировать этот файл себе, при этом он становится полноправным владельцем полученной копии. После этого он поставит на свою копию такие права, какие ему захочется и, все-таки, запустит его.

Для директорий

Для директорий обычно права доступа устанавливаются

--- никаких прав
r-x нормальные права для "посещения" директории, но без права изменения (создавать/удалять/переименовывать файлы)
rwx полный доступ (делай там что хочешь)
Имеет ли смысл устанавливать какие-либо другие сочетания?

Ну, во-первых, если отсутствует бит доступа --x (доступ к содержимому), то любая комбинация из двух остальных ничего полезного не даст.

Комбинация r-- даст возможность получить список файлов в этой директории, например командой ls, и не более того. Причем посмотреть можно будет только имена файлов, а такие подробности, как владелец/группа/permissions будут недоступны. В такую директорию нельзя "войти" командой cd. И, даже если внутри нее поддиректории имеют вполне нормальные права доступа (например, r-x), попасть в них будет невозможно.

Комбинации -w- и rw- имеют еще меньше смысла. Все равно, изменить что-нибудь в директории с такими правами доступа не удастся.

А вот сочетания --x и -wx на самом деле вполне осмысленны.

Таким способом можно сделать "полусекретную" директорию. "Секретность" ее заключается в том, что никто посторонний не сможет посмотреть - что за файлы и директории в ней находятся. Но, если вы своим друзьям сообщите - как называется файл находящийся там, они смогут без проблем его взять оттуда или посмотреть его прямо на месте.

Аналогично и с поддиректориями. Если вы не хотите, чтобы кто-нибудь просто "бродя" по вашим директориям наткнулся на директорию с "секретным" содержанием, но, в тоже время, не против чтобы некоторые близкие друзья могли туда "захаживать" и знакомится с новыми пополнениями, "спрячьте" свои "приватные" директории в директорию (например private) с доступом --x. Тогда ваши друзья смогут попасть в нужную поддиректорию, указав полный путь (cd private/pictures), а случайные посетители ее просто не найдут (если, конечно, этот посетитель не root).

Конечно, "секретность" в этом случае будет не полной, поскольку, если посторонний каким-то образом узнает правильное название файла или поддиректории, то получит те же возможности, что и "близкие друзья".

Права -wx отличаются от предыдущего тем, что "доверенным лицам" можно писать в эту директорию. Они могут скопировать туда файл, удалить (если, конечно, знают его точное название) и т.п. Опять же, посторонний сможет разве что записать туда файл, который вы не просили. Удалить там что-нибудь или переименовать, не зная названий файлов (и поддиректорий), он не сможет.

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

владелец - полные права (rwx)
группе доверенных лиц - тоже самое, но без права изменения (r-x)
всем остальным - никаких прав (---)
Вообще-то, обычно права назначаются даже еще проще. Поскольку, группы составляет root и рядовые юзеры, как правило, не выбирают себе соседей по группе, то их файлы и директории имеют одинаковые "допуски" для группы и "всех остальных". Например, для "несекретных" файлов (директорий) - rwxr-xr-x, а те, которые владелец хочет оградить от посторонних rwx------.

Но в данном случае речь не об этом. Что будет, если "всем остальным" дать доступ, пусть и ограниченный, а для группы "особо приближенных" - наоборот убрать (выглядеть это будет примерно так - rwx---r-x)?

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

Трудно судить - можно ли извлечь из этого какую-то пользу. Тем более, что составить "черный список" может только root. И, кроме того, не забудьте, что количество групп, в которые может входить юзер, ограничено, поэтому не стоит без особой надобность "плодить" дополнительные списки. Но, во всяком случае, возможность поступить таким образом есть.

Флаги.

Кроме уже рассмотренных атрибутов (владелец, группа, "права доступа"), существует еще один атрибут, который ограничивает возможные действия с файлом - "набор флагов".

Кстати, по умолчанию команда ls флаги не показывает (и большинство "файлменеджеров" - тоже). Для того, чтобы она их показала, надо указать ключ -lo.

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

Флаги являются более "сильнодействующим средством" чем permissions. Они действуют одинаково для всех юзеров, не разделяя их на категории. Более того, их действие не может игнорировать и владелец файла и даже root. Единственное отличие владельца и root'а от прочих пользователей в том, что они могут убрать флаги с файла (и то не всегда) и только потом уже делать то, что им хочется.

Рассмотрим их подробнее.
Флаги делятся на две группы "юзерские" флаги и "суперюзерские". Разница в том, что "юзерские" может поставить и убрать как root, так и владелец файла, а ставить/убирать "суперюзерские" может только root.

На самом деле, "снятие" флагов - вопрос более сложный. Он зависит от того, в каком "режиме безопасности" находится система. Но об этом немного позднее.

По своему назначению флаги делятся на

append - разрешается только "дописывать" файл (естественно, файл должен также иметь permssion "w"). Без этого флага, если юзеру из соответствующей категории разрешается писать в файл, он может как добавить что-либо к содержимому файла, так и "убавить", то есть стереть часть содержимого. При установленном флаге append, любой юзер (даже root) сможет только добавить что-нибудь в конец файла, но не сможет ничего изменить в уже имеющемся содержимом.
Если этот флаг поставить на директорию, то в ней можно создавать файлы (или копировать туда файлы из других директорий), но нельзя удалять или менять их названия. Естественно, на сами файлы действие флага не распространяется.
nounlink - файл (или директорию) нельзя удалить или переименовать, даже если права, установленные на директории (в которой находится файл) это позволяют. В то же время, этот флаг не запрещает менять содержимое файла (если, конечно, permissions это позволяют).
immutable или change - "ничего нельзя". То есть, файл (директорию) нельзя ни удалить, ни переименовать, ни изменить содержимое. Опять же, если это флаг стоит на директории, то на файлы (в ней содержащиеся) его действие не распространяется. То есть, вы не сможете ни добавить, ни убрать файл в директории, но менять содержимое самих файлов это флаг не запретит.
Как уже говорилось, эти три флага существуют в двух вариантах - "юзерские" и "суперюзерские". То есть, на самом деле их шесть

три "юзерских" - uappend, uunlink и uimmutable
и три "суперюзерских" - sappend, sunlink и simmutable.
Вообще-то, существует еще два "непарных" флага. Это флаги

archived (архивный файл) - это файл "суперюзерский", то есть его может поставить только root, а аналогичного "юзерского" не существует;
nodump (файл не надо "дампировать") - а это "юзерский" флаг, его может поставить не только root, но и владелец файла.
Эти флаги проверяются только некоторыми конкретными программами. Например, флаг nodump сообщает программе dump, что этот файл не надо сохранять в архиве. (Подробнее о программе dump вы можете прочитать в соответствующем man - man dump).
Категория: Установка и настройка | Добавил: oleg (08.12.2007)
Просмотров: 1058 | Рейтинг: 4.0/1 |
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа

Beastie

Друзья сайта

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
links

Copyright MyCorp © 2025