Назад | Перейти на главную страницу

Почему umask является операцией AND NOT mask

Почему umask - это маска $ perms AND NOT $, а не просто маска $ perms AND $?

Другими словами, почему там НЕ? почему он не был реализован как маска и?

Например, 666 и 700, чтобы дать 600?

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

Входное значение является восьмеричным, поэтому для правильного анализа может потребоваться начальный 0. Поскольку маска владельца почти всегда равна 0, маску можно вводить с помощью трех цифр. В качестве маски И его необходимо ввести как 0755 или 0750.

Определение его как операции И НЕ делает более безопасным, если в маске пропущены символы. Если umask был и операция И umask 5 позволит только ограниченный доступ к миру и umask 0 было бы еще хуже. umasq 75 анализируется как десятичное значение, будет эффективно umask 113 который не позволяет читать доступ.

РЕДАКТИРОВАТЬ: С другой стороны, маска - это список битов, которые вы хотите замаскировать. Поэтому вам нужны маски вроде 026 скорее, чем 0751. Внутреннее представительство вполне может быть 07751 или то, что подходит для AND. В противном случае преобразование относительно тривиально, и по большому счету маска применяется не так часто.