Итак, сегодня на работе, руководство случайно появляется и просит меня дать краткий курс по использованию Linux для группы инженеров. Судя по всему, они заметили, что я не согласен с Microsoft (из-за проблем с безопасностью и безопасностью Win 10), и теперь я постоянный "эксперт" по всему * nix.
После объяснения группе красоты простоты Linux, есть вопросы о правах доступа к файлам. Я объясняю chmod
и восьмеричный синтаксис user-group-world для назначения разрешений.
Затем перейдем к биту setuid/setgid/sticky - я продемонстрирую на простом примере, таком как chmod 2755 somefile.txt
и укажу , что бит setgid теперь включен. Чтобы очистить этот бит, я chmod 0755
, но, к моему ужасу, бит setgid сохраняется. Какие?? Я знаю, что использовал этот синтаксис, чтобы очистить липкие биты раньше (хотя, вероятно, десять лет назад). Было довольно неловко видеть, что это не сработало сразу после того, как я сказал, насколько элегантен дизайн.
В любом случае, я также показал им альтернативные сокращения g+s
и g-s
и обнаружил, что g-s
DID работает.
После презентации мне показалось, что я обнаружил ошибку в chmod
, но, просмотрев man
страницу, я обнаружил, что поведение было "разработанным", поскольку есть явное примечание, в котором говорится, что chmod
может использоваться для установки липких флагов, но не понятно их.
ПОЧЕМУ у chmod
возможность удалить липкие биты с использованием восьмеричной нотации? Я гуглил и обнаружил, что некоторые люди говорят, что начальный ноль "сбивает с толку" и его следует опустить. В самом деле? По этой логике мы могли бы также сказать, что для байтов (например, кода ASCII) запрещено содержать начальные биты "0", потому что это "сбивает с толку". Люди, которые смущают ведущий ноль, могут использовать символическую запись. Люди, которые хотят использовать восьмеричное обозначение, должны иметь возможность использовать восьмеричное.
Почему chmod
был поврежден, чтобы не поддерживать восьмеричную нотацию для очистки липких битов?