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

При копировании файла создается новый файл, поэтому права доступа к нему задаются в ссответствии с umask. Группа наследуется от каталога.

Ключ -p в команде копирования позволяет сохранить права доступа (биты suidи sgid сбрасываются).

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

Изменение атрибутов файла

1) Владелец и группа:

Владелец и группа изменяются соответственно командами chown и chgrp.

Можно использовать шаблон ‘*’ и ключ –R (рекурсивно).

Права доступа

Права доступа к файлу изменяются командой chmod. Для задания дополнительных битов используются соответственно следующие конструкции, указываемые в команде chmod:

· suid бит: u+s;

· sgid бит: g+s;

· sticky бит: a+t.

Флаги доступа к файлу

Кроме рассмотренных атрибутов доступа к файлам существует еще один атрибут, который ограничивает возможные действия с файлом – “набор флагов”.

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

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

Назначение и типы флагов

Флаги делятся на две группы:

· "пользовательские" флаги;

· "суперпользовательские".

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

По своему назначению флаги делятся на следующие 3 группы:

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

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

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

Для каждой из этих трёх групп флагов существуют два вида флагов – пользовательские (перед названием флага добавляется буква u) и суперпользовательские (перед названием флага добавляется буква s):

· пользовательские флаги - uappend, uunlink и uimmutable

· суперпользовательские флаги - sappend, sunlinkи simmutable.

Существуют еще два "непарных" флага:

· archived (архивный файл) - это флаг суперпользовательский и аналогичного пользовательского флага не существует;

· nodump (файл нельзя скопировать утилитой dump). Это пользовательский флаг.

Оба эти флага проверяются некоторыми конкретными программами (программами архивации и утилитой dump).

Установка флагов

Установка флагов производится по команде:

%chflags"флаги" "имя файла"

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

%ls -lo

Аргумент "флаги" - это название флага или нескольких флагов через запятую. Можно задавать и сокращённые названия флагов:

Название флага Сокращённое название флага
sappend sappnd
uappend uappnd
sunlink sunlnk
uunlink uunlnk
simmutable schange или schg
uimmutable uchange или uchg
arcived arch
флаг nodump не сокращается  

Для того чтобы убрать флаг, надо указать его название с префиксом no: nosappnd, nosunlnk, noschg и т.п. Исключение составляет флаг nodump. Чтобы его убрать, нужно указать не nonodump, а просто dump.

Для того чтобы рекурсивно обойти подкаталоги, можно применить ключ – R.