почему suid бит не отменяется после изменения файла

У меня есть файл (s | g) uid world-writable:

ls -lh suid_bin.sh -rwsr-srwx 1 root root 168 mai 23 16:46 suid_bin.sh 

регистрируется с учетной записью пользователя без полномочий root. Я использую vi (или другой редактор) для изменения «suid_bin.sh». После сохранения нового содержимого биты (s | g) uid не заданы:

 ls -lh suid_bin.sh -rwxr-xrwx 1 root root 168 mai 23 16:46 suid_bin.sh 

Зачем? Есть ли способ сохранить (s | g) uid бит после модификации?

Разрешения Unix позволяют записывать в файл, если случайно кто-то установит бит группы или мира для записи в файле setuid, но запретит изменение идентификаторов владельца и группы на таких файлах незнакомыми людьми.

Таким образом, после модификации ядро ​​сбрасывает биты setuid / setgid из файла, чтобы гарантировать, что в файл не был записан вредоносный код.

конечно, пользователь root может восстановить бит setuid, но обычный пользователь, если он, по чьей-то ошибке, получил доступ на запись к привилегированному исполняемому файлу, не сможет его использовать.

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

Обратите внимание, что скрипты setuid в Linux не получают статус setuid после выполнения, потому что на самом деле ядро ​​запускает интерпретатор сценария без состояния setuid, с полным путем к скрипту, поскольку это последний проанализированный аргумент, а затем интерпретатор читает скрипт как обычный файл. Но это может различаться в других системах Unix.