Каковы правила, определяющие разрешения на файл b после выполнения команды cp /path/to/a /p/t/b, в зависимости от разрешений файла /path/to/a и всех каталогов?

Вопрос или проблема

В Classic Shell Scripting от O’Reilly, Арнольд Роббинс и Нельсон Х.Ф. Биби приводят следующий пример:

$ umask
023
$ rm -f foo
$ cp /bin/pwd foo
$ ls -l /bin/pwd foo
-rwxr-xr-x   1 root    root     10428 2001-07-23 10:23 /bin/pwd
-rwxr-xr--   1 jones   devel    10428 2002-09-21 16:37 foo

Получившаяся строка прав rwxr-xr-- отражает потерю привилегий: группа потеряла доступ на запись, а остальные потеряли доступ на запись и выполнение.

Итак, вывод 023 в начале говорит мне, что в текущей оболочке у вновь созданных файлов будет удалён доступ w для g и wx для o, так что в то время как я понимаю, что “остальные потеряли доступ на выполнение”, я не понимаю, почему “группа потеряла доступ на запись” и “остальные потеряли доступ на запись”, поскольку у них его изначально не было.

Вы думаете, это просто неточность в формулировке этого комментария, или я что-то упустил?

Кроме того, я попробовал это на своей системе, и результат немного озадачил меня:

$ umask 
0023
$ cp /bin/pwd ~/foo
$ ls -l /bin/pwd ~/foo 
-rwxr-xr-x 1 root   root   35072 Jan 18 19:17 /bin/pwd*
-rw-r--r-- 1 myself myself 35072 Feb  1 12:54 /home/myself/foo

Теперь вывод 0023 должен означать удаление w для g и wx для o (из которых только x для o действительно присутствовал, так что он единственный удалён в этом случае), но вместо этого кажется, что разрешение x было удалено также для u и g.

Почему это так?

Где я могу найти все правила, которые определяют, что происходит с разрешениями, когда я создаю и копирую файл?

Ответ или решение

Файловые разрешения в UNIX-подобных системах являются важным аспектом управления доступом к файлам и директориям. Чтобы понять, как определяются разрешения файла после выполнения команды cp /path/to/a /p/t/b, необходимо рассмотреть несколько факторов, в том числе текущие настройки umask, разрешения исходного файла и каталогов, в которые происходит копирование. Рассмотрим теорию, примеры и применение данной задачи.

Теория

В UNIX-подобных системах права доступа к файлам определяются через три категории пользователей: владелец (user), группа (group) и остальные (others). Каждой из этих категорий можно задать доступ на чтение (r), запись (w) и выполнение (x). Октавая система используется для задания этих разрешений, где каждая категория представлена одной цифрой от 0 до 7.

Umask

Umask (user file-creation mode mask) определяет базовые разрешения, которые будут исключены из новых файлов. Например, если умаска равна 023, это означает, что разрешение на запись будет убрано из группы, а разрешение на запись и выполнение — из всех других (others). Это работает как инверсия: umask показывает, какие разрешения не должны быть установлены по умолчанию.

Команда cp

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

Примеры

Рассмотрим пример, упомянутый в условии:

  1. Исходный файл /bin/pwd имеет разрешения rwxr-xr-x.
  2. Умаска установлена как 023, что означает, что:
    • Для группы будет отсутствовать w.
    • Для остальных (others) будут отсутствовать w и x.

Можно ожидать, что при копировании файла без выполнения cp -p, новые permissions должны соответствовать rwxr-xr-x за исключением исключений умаски (без учета флага выполнения в создаваемом файле).

Однако в примерах:

  • /home/myself/foo показывает rw-r--r--, это указывает, что выполнение убрано также и у владельца и группы.

Применение

Познав природу работы умаски и базовых команд в UNIX, важно помнить следующие ключевые моменты:

  • При копировании исполняемых файлов с cp, если флаг исполнения не указан, он, как правило, не сохраняется в новом файле, если сама команда cp не была дополнительно настроена.
  • Чтобы копировать с сохранением permissions, в том числе флагов, используйте ключ -a для архивации или -p для сохранения атрибутов.

Теперь, как можно найти и управлять этими правилами? Вот несколько рекомендаций:

  1. Изучение документации: Воспользуйтесь man cp для получения полной информации о параметрах и поведении команды cp.

  2. Экспериментирование: Попробуйте различные комбинации umask и ключей cp на тестовом файле, чтобы на практике увидеть разницу в поведении.

  3. Скрипты и автоматизация: Создайте скрипты, которые будут устанавливать нужную umask и использовать нужные ключи при копировании, чтобы быть уверенными в предсказуемости результата.

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

Оцените материал
Добавить комментарий

Капча загружается...