3

Итак, сегодня на работе, руководство случайно появляется и просит меня дать краткий курс по использованию 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 был поврежден, чтобы не поддерживать восьмеричную нотацию для очистки липких битов?

1 ответ1

2

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

Таким образом, если бы кто-то позволил восьмеричной форме с начальным нулем сбросить липкие биты, многие сценарии случайно сбросили бы липкие биты. Отладка, которая была бы кошмаром, так что вместо этого chmod ограничился тем, что вы не можете сбрасывать липкие биты в восьмеричной форме. В конце концов, если вы действительно хотите сбросить их (что случается редко), вы всегда можете использовать альтернативную форму.

Так что, как и многие формы удивительной сложности, ответ "обратная совместимость".

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .