Наскільки я можу сказати, це важко закодовано у стандартні утиліти. Я strace
d одночасно touch
створити новий файл і mkdir
створити новий каталог.
touch
Сліду проводиться таким чином :
open("newfile", O_WRONLY|O_CREAT|O_NOCTTY|O_NONBLOCK, 0666) = 3
в той час як цей mkdir
слід дав це:
mkdir("newdir", 0777) = 0
Окрім кодування процесу створення файлів / каталогів на C, я не бачу способу зміни дозволів за замовчуванням. Мені здається, що не робити файли виконуваними за замовчуванням має сенс: ви не хочете, щоб якийсь випадковий текст був випадково неправильно трактований як команди оболонки.
Оновлення
Щоб навести приклад того, як біти дозволів жорстко кодуються до стандартних утиліт. Ось кілька відповідних рядків із двох файлів у coreutils
пакеті, що містить вихідний код для обох, touch(1)
і mkdir(1)
серед інших:
mkdir.c
:
if (specified_mode)
{
struct mode_change *change = mode_compile (specified_mode);
if (!change)
error (EXIT_FAILURE, 0, _("invalid mode %s"),
quote (specified_mode));
options.mode = mode_adjust (S_IRWXUGO, true, umask_value, change,
&options.mode_bits);
free (change);
}
else
options.mode = S_IRWXUGO & ~umask_value;
}
Іншими словами, якщо режим не вказаний, встановіть його S_IRWXUGO
(читайте: 0777), зміненого на umask_value
.
touch.c
ще зрозуміліше:
int default_permissions =
S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH;
Тобто, надайте всім права на читання та запис (читайте: 0666), які будуть змінені процесом umask
створення файлів, звичайно.
Ви можете бути в змозі обійти це програмно тільки: тобто при створенні файлів з будь-якої програми C, де ви робите системні виклики безпосередньо або з мови , що дозволяє зробити низькорівневий системний виклик (дивіться, наприклад , в Perl sysopen
Under Подивитись профіль perldoc -f sysopen
).
umask
я зустрічався, завжди був 0022, створюючи дозвіл за замовчуванням 644.