я пробовал
chmod 700 /bin/kill
chown root /bin/kill
но обычный пользователь может:
kill blah
... и успешно завершить приложение blah, работающее под учетной записью пользователя.
Я использую Ubuntu (8.10). Оболочка bash, по-видимому, имеет встроенную команду kill, поэтому попытка вышеуказанного не сработает.
Используя .bashrc, команду enable можно использовать для отключения встроенной команды kill каждый раз, когда запускается терминал, но .bashrc затем может быть просто отредактирован пользователем с помощью текстового редактора, запущенного через графический интерфейс, для повторного включения уничтожения. команда. Могу ли я как-то навсегда отключить встроенную команду bash без использования .bashrc (который редактируется пользователем)?
У кого-нибудь есть идеи, как отключить встроенное убийство?
Ответ заключается в том, что вы не можете скомпилировать собственную версию bash. Более того, даже если вам это удалось, если ваши пользователи могут компилировать программы или перемещать двоичные файлы в систему, они всегда могут внести свой собственный двоичный файл уничтожения и в любом случае иметь возможность выполнять уничтожение.
Теперь возникает вопрос: что вы действительно хотите делать? Я подозреваю, что отключение команды kill не является вашей реальной целью. Вы пытаетесь помешать пользователям что-то делать (предположительно, убить то, чего они не должны), и, вероятно, есть лучший способ сделать то, что вы хотите.
Что бы вы ни использовали, команду kill или встроенную оболочку, она будет использовать kill или связанный с ней системный вызов. Чтобы прочитать об этом, см. man 2 kill
.
Kill используется не только для уничтожения процесса, но и для отправки сигнала. Отправка сигналов - фундаментальная функция операционных систем Unix, поэтому отключать ее не стоит.
Правильный путь:
Правильный способ делать то, что вы пытаетесь сделать, - это, вероятно, правильно управлять своими привилегиями. Сигналы разрешены только при следующих условиях:
Чтобы процесс имел разрешение на отправку сигнала, он должен быть либо привилегированным (в Linux: иметь возможность CAP_KILL), либо реальный или эффективный идентификатор пользователя отправляющего процесса должен совпадать с реальным или сохраненным идентификатором set-user-ID цели обработать.
Если вы действительно хотите:
Итак, если вы действительно очень хотите, чтобы пользователи не могли отправлять сигналы для процесса, который они запускают, я думаю, вам придется установить uid root для программы и изменить как реальный, так и эффективный идентификатор пользователя сразу после запуска для менее привилегированного пользователя, так как только root может изменить реальный идентификатор пользователя. Пример программы, которая делает это, - login
команда. Вы должны быть предельно осторожны при программировании этих программ, иначе вы создадите большую дыру в безопасности.
Следуя ответу Майкла, было бы очень и очень сложно предотвратить отправку пользователем сигналов (что и делает kill) процессу, запущенному в домене защиты этого пользователя (т.е. работающему под этим идентификатором пользователя). Скорее всего, вы действительно не захотите этого, поскольку это также помешает пользователю, например, завершить неконтролируемую программу. Кроме того, это может сломать какой-то кусок вашей существующей системы.
Как сказал Майкл, вы, вероятно, пытаетесь запретить пользователю отправлять сигнал одному или нескольким конкретным процессам, и способ сделать это - поместить эти процессы в другой домен защиты, другими словами, запустить их под другим идентификатором пользователя. .
Если вы хотите ограничить и заблокировать то, что люди могут делать с помощью bash, измените их на rbash
(ограниченный bash) оболочка. больше информации