2011-02-07 3 views
0

나는 특정 TCP 포트가 열려있는 소유하고있는 프로세스의 pid를 찾기 위해 fuser를 사용하려고합니다. 루트가 아닌 사용자로 퓨저를 실행할 때 fuser는 root가 아닌 사용자로 소켓에 대해 어떻게보고합니까?

이 ...이 문제가 발생하는 가장 일반적인 시간은 TCP 나 UDP 소켓을 찾고있다 : 그것은 말한다 퓨저 사람 페이지에서

. 이 경우 fuser는 액세스를보고하지 않습니다.

는 -MIO :: 소켓 'IO는 :: 소켓 :: INET-> 새 (듣기 펄 ...

하지만, 내 우분투 상자, 퓨저 내가 자신의 프로세스에 대한 보고서 열기 소켓, 예를 않습니다 => 10, LocalPort => 3000) '&

퓨저 -n TCP 3000

질문 : 어떻게 이런 일이 할 수 있도록 설정하는 것입니까? 커널 설정 옵션입니까?

감사합니다.

참고 : 퓨저가 일반 사용자로 실행될 때 퓨저가 소켓 소유 프로세스를보고하도록 일부 Linux 배포판을 구성하는 방법은 무엇입니까? 하나의 우분투 배포판 "fuser -n tcp 3000"은 내가 프로세스를 소유하고 있다면 프로세스를보고 할 것입니다. 아직 다른 Linux 배포판 (Centos가 있다고 생각합니다.)에서 소유하고 있어도 프로세스를보고하지 않습니다.

답변

1

fuser은 디렉토리를 통해 작업하고 파일 설명자를 검사하여 /proc 파일 시스템 (proc(5))을 통과합니다. 귀하가 소유 한 프로세스에는 해당 /proc 항목이 다시 소유됩니다. 이렇게하면 프로세스를 확인할 수는 있지만 다른 프로세스는 확인할 수 없습니다.

주어진 프로그램이 수행하는 것을 보는 매우 유용한 도구는 strace(1)입니다. 감사합니다,하지만 내가 부탁 해요 정확히 아니다 -

~$ strace fuser -n tcp 3000 
+0

안녕을 예를 들어, 다음과 인수의 fuser에 의해 수행되는 것과, 부르는 시스템을 볼 수 있습니다. 퓨저가 특정 소켓을 소유하고있는 프로세스를 보거나 볼 수있는 커널 설정 옵션이 있다고 생각합니다. 하나의 리눅스 배포판에서 fuser는 내 자신의 프로세스를 "볼"수 있지만 다른 배포판에서는 "fuser -n tcp 3000"이 프로세스를 소유하고 있어도 아무 것도보고하지 않습니다. – perlman

+0

@perlman,'fuser'가 자신의 프로세스를 볼 수 없도록하는 머신에서'SELINUX'가 활성화되어 있습니까? –