The umask value is subtracted from the full permission set for an object.
Это неправда. Или, по крайней мере, это неточно и упрощено до общего случая.
Во-первых, базовое значение не "полный набор разрешений", а то, что процесс, создающий файл, устанавливает в качестве разрешений файла. Конечно, для обычных файлов это обычно
0666
:идея состоит в том, что (говорят )текстовый редактор не должен решать, какими должны быть права доступа к файлу, но пользователю должно быть позволено решать это черезumask
.Но процессу, создающему файл, не нужно использовать
0666
в качестве прав доступа к файлу. Для личных файлов (думаю, что будут использоваться ключи SSH ),0600
, так что независимо от umask файл никогда не будет доступен никому, кроме владельца. Кроме того, для исполняемых файлов можно использовать0777
, чтобы результирующий файл был исполняемым.Для каталогов обычно используется
0777
, поскольку битx
практически так же необходим, как и битr
для общего использования. Для общих файлов данных это не так, поэтому общий случай —0666
для файлов и0777
для каталогов.Конечно, используемые базовые разрешения могут быть чем-то другим, но это, скорее всего, обычные случаи.
Во-вторых, значение umask не вычитается , а маскируется. Вычитание подразумевает перенос от одного бита к следующему, а вычитание, например.
0007
из0666
приведет к0657
. Это не то, как работает umask, и это было бы бесполезно.Обратите внимание, что umask используется только при создании файла , справочная страница Linux также называет его "маской создания файлового режима". После этого
chmod()
можно использовать для изменения разрешений, не ограничиваясь umask.So if a file can't be have read, write, execute permissions at once,
Конечно, могут. Это просто бесполезно для неисполняемых файлов.
Права доступа одной или нескольких общих библиотек,(*.so
)используемых сбойными программами, вероятно, были изменены.
Сравните результаты
sudo ldd $(type -p programname)
# and
ldd $(type -p programname)