`kill -s TERM` работает,` kill -s ABRT` получает «Операция не разрешена»

Существует тот процесс, который у меня есть, чья документация утверждает, что я могу отправить SIGABRT , чтобы получить некоторую отладочную информацию. Однако, когда я пытаюсь отправить SIGABRT , я возвращаюсь «Операция не разрешена».

Я также попытался отправить те же сигналы другим процессам, которые у меня есть, чтобы убедиться, что нет какого-то базового блока, который мешает мне полностью отправлять SIGABRT , но они отвечают соответствующим образом. Это только одна программа, но это каждый экземпляр этой программы. Трассировка системного вызова процесса показывает, что он никогда не получает сигнал.

Я попытался запустить /bin/kill явно, чтобы исключить какую-либо странность в встроенной kill моей оболочки, и, кроме некоторых незначительных различий в выходе, не было изменений в поведении.

root может отправить SIGABRT в процесс, и он работает так, как я ожидаю.

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

ОС – это FreeBSD 9.0, и процесс является рубиновым процессом, который является частью приложения Phusion Passenger Ruby-on-Rails, запущенного под Apache.

В настоящее время у меня полная потеря. Кто-нибудь знает, что происходит?

Обновление. Оказывается, что sysctl security.bsd.conservative_signals был установлен в 1, что предотвращает доставку многих сигналов в процессы setuid в соответствии с man-страницей. Установка этого параметра на 0 решает проблему.

В то время как в цепочке процессов был установлен setuid-вызов – процесс является дочерним элементом Apache httpd, а Apache изменяет свой uid, чтобы отказаться от прав root – сам процесс не установлен, и его EUID, RUID и SVUID являются как и пользователь, отправляющий сигнал. Единственный осмотр процесса, который я могу найти, который указывает, что произошел какой-либо setuid, является флаг P_SUGID в поле «флаги» ps . («Если у вас установлены привилегии id с последнего exec») Кажется, что это не должно быть так, но оно обрабатывается в модуле Apache, и я не знаю его точных методов.

Для записи это рубиновый процесс, который работает как часть приложения Ruby on Rails, обрабатываемого mod_passenger, AKA mod_rails.

One Solution collect form web for “`kill -s TERM` работает,` kill -s ABRT` получает «Операция не разрешена»”

Из последней версии man-страницы kill (2) :

Чтобы процесс имел разрешение на отправку сигнала в процесс, указанный pid, пользователь должен быть суперпользователем, или реальный или сохраненный идентификатор пользователя процесса приема должен соответствовать реальному или эффективному идентификатору пользователя процесса отправки. Единственным исключением является сигнал SIGCONT, который всегда может быть отправлен на любой процесс с тем же идентификатором сеанса, что и отправитель. Кроме того, если для параметра security.bsd.conservative_signals sysctl установлено значение 1, пользователь не является суперпользователем, а приемник настроен на uid , тогда могут отправляться только управление заданиями и управляющие сигналы терминала (в частности, только SIGKILL , SIGINT, SIGTERM, SIGALRM, SIGSTOP, SIGTTIN, SIGTTOU, SIGTSTP, SIGHUP, SIGUSR1, SIGUSR2).

В каком смысле вы владеете процессом? Что такое статус процесса, связанного с реальным uid, эффективным uid, какой бинарный он работает, владелец и setid-биты этого двоичного файла и т. Д.?

  • Как правильно автоматически / вручную вращать файлы журналов для производства Rails App
  • Можно ли использовать chcon для сужения selinux, чтобы быть менее безопасным, чем установка selinux в разрешающую?
  • Запуск сценария оболочки с бродячим обеспечением
  • Как выбрать уникальные значения массива?
  • Ошибка разрешения при создании резервной копии при установке gitlab omnibus
  • Как я могу проверить файл, имеющий значение?
  • Открытие файла с пробелом из Ruby
  • Как настроить Ruby для использования правильной версии gemset или Ruby для каждого проекта?
  • Почему «какой рубин» ничего не выводит?
  • Служба Start Issue Systemd
  • Как перебирать файлы с помощью awk, bash или ruby?
  • Interesting Posts
    Linux и Unix - лучшая ОС в мире.