Как изменяются права доступа при копировании и перемещении файла.
Этот вопрос на самом деле более сложный, чем может показаться.
Дело в том, что ответ на него зависит от многих условий
- кто копирует (перемещает) файлы, root или обычный юзер
- какие программы и с какими ключами при этом используются
- копируется файл "на пустое место" или там уже существует файл с таким именем
Тем не менее, попробуем найти несколько общих правил, определяющих - какие права доступа могут получится в результат.
Во-первых, при копировании (например, командой cp) создается новый файл, а при перемещении (например, командой mv) меняется только место расположения файла (и, возможно, имя).
Поэтому, если "рядовой юзер" копирует файл, то действуют все те же правила, что и при создании файла. То есть, владельцем копии становится юзер, который ее создал, группа "наследуется" от директории, а сами права доступа
определяются параметром umask.
Строго говоря, если копирование делает root, то эти правила действуют и для него (то есть, владельцем полученной копии будет root, группа будет взята от директории, а права выставятся в соответствии с umask). Однако, root может изменить поведение команды cp. У этой команды есть ключ (-p - сохранять permissions) который означает, что надо сохранить все атрибуты (владельца, группу и permissions) при копировании.
Обычный же юзер, даже используя ключ -p не сможет сохранить владельца и группу, но получит permissions такие же как у оригинального файла. К тому же биты suid и sgid при этом также "сбрасываются".
Существует еще одна ситуация, когда при копировании сохраняются все атрибуты доступа. Это происходит, когда в "месте назначения" файл с таким
именем уже существует. Собственно, в этом случае файл не создается, а только
замещается его содержимое. Поэтому, даже если эту операцию проделает обычный
юзер (естественно, для этого надо, чтобы ему было разрешено писать в
существующий файл), все атрибуты, в том числе владелец и группа сохранятся.
Правда, биты suid и sgid все равно "сбросятся".
А вот при перемещении файла все атрибуты сохраняются (даже "опасные" биты suid и sgid). Однако, не забудьте, что для того, чтобы обычный юзер смог переместить чужой файл, он должен иметь право записи и в ту
директорию, куда файл переносится и в ту, откуда он переносится (поскольку, там запись о файле должна быть удалена). Такие ситуации в нормальной
системе, как правило, не встречаются.
Иван Паскаль pascal@tsu.ru