как fuser сообщает о сокетах как пользователь без полномочий root? - PullRequest
0 голосов
/ 07 февраля 2011

Я пытаюсь использовать fuser, чтобы найти pid процессов, которыми я владею, у которых открыты определенные порты TCP.

На странице руководства fuser написано:

... НаиболееОбычно эта проблема возникает при поиске сокетов TCP или UDP при запуске fuser от имени пользователя без полномочий root.В этом случае фьюзер сообщит об отсутствии доступа....

Однако на моем Ubuntu-сервере fuser сообщает об открытых сокетах для моих процессов, например:

perl -MIO :: Socket 'IO :: Socket :: INET-> new (Listen => 10, LocalPort => 3000) '&

fuser -n tcp 3000

Вопрос: как настроено, чтобы это происходило?Это опция конфигурации ядра?

Спасибо!

Примечание: вопрос: как настроены некоторые дистрибутивы linux, чтобы fuser сообщал о процессах, владеющих сокетами, когда fuser запускается как обычный пользователь?Один из дистрибутивов Ubuntu "fuser -n tcp 3000" сообщит о процессе, если у меня есть этот процесс, но в другом дистрибутиве Linux (я думаю, Centos) он не сообщит о процессе, даже если я им владею.

1 Ответ

1 голос
/ 07 февраля 2011

fuser проходит через файловую систему /proc (proc(5)), работает через каталог /proc/[pid]/fd/ и проверяет дескрипторы файлов. Принадлежащие вам процессы имеют соответствующие /proc записи, вновь принадлежащие вам. Это позволяет вам проверять свои процессы, но не другие.

Один очень полезный инструмент, чтобы увидеть, что делает данная программа - strace(1). Например, вы можете увидеть, какие системные вызовы и с какими аргументами выполняет fuser:

~$ strace fuser -n tcp 3000
...