Intereting Posts
Не удается прочитать установленный общий ресурс NFS на клиенте Преобразование текстовых файлов с ASCII в Unicode без какой-либо команды Создать двоичный пакет без портов? Три монитора с двумя различными картами Nvidia Разрешение экрана времени загрузки CentOS Разделить экземпляр inotify между процессами Невозможно записать / не может создать каталог (файловая система только для чтения) Как создать хэши паролей SHA512 в командной строке Как заставить strace «декодировать» связь AF_NETLINK как с ioctl? Почему «telnet» буфер FTP управляет линиями подключения? Не удается разрешить домены .local внутри моей локальной сети офиса Каковы требуемые зависимости сборки mesa для дистрибутивов на основе Debian? проверка наибольшего количества определенной папки Должны ли использоваться «invoke-rc.d» или «service» для перезапуска служб? объединение двух файлов в соответствии с указанной строкой

`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.

Из последней версии 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-биты этого двоичного файла и т. Д.?