Linux에서`ps` 또는`top` 목록에서 프로세스를 '숨길'수 있습니까?


10

먼저, 가능하다면 루트 (또는 루트의 UID 0을 공유하는 사용자)로 수행해야한다고 가정합니다.

어떻게 프로세스가 그것에 표시되지 않도록 실행할 수 있습니다 ps aux하거나 ps ef또는 top명령이 비 루트에 의해 실행되는 경우 목록?

이것도 가능합니까?

내가 일반적으로 실행하는 배포판은 RHEL / CentOS와 Ubuntu입니다. 따라서 배포 판별 답변이 있으면 괜찮습니다.


워렌 : 이것에 대한 해결책을 찾은 적이 있습니까?
Chris

@Chris-nope ... @fianchetto의 대답은 유일한 길인 것 같습니다. 그리고 그것은 제가 편한 일보다 훨씬 더 많은 일입니다 :-|
warren

나는이 프로젝트를 수행 할 것이며 내가 결정한 내용으로 다시보고 할 것이다.
Chris

답변:


5

여기 몇 가지 옵션이 있습니다. 쉬운 방법은 ps와 최상위 프로그램을 숨기고 싶은 것을 숨기는 수정 버전으로 바꾸는 것입니다.

대안은 기존 프로세스에 포함 된 코드를 실행하거나 코드 주위에 무해한 이름으로 래퍼 스크립트를 작성하는 것입니다.

일부 PS 버전에서는 argv []를 변경하여이를 수정할 수 있지만, 이것이 최상으로 작동하는지 확실하지 않으며 Linux에서 작동하는지 확실하지 않습니다 (주로 BSD 규칙 임).

이 모든 것을 수행함으로써 달성하고자하는 것에 정확히 달려 있습니까?


내 목표는 루트로 생성 된 프로세스가 모든 사용자 (아마도 보안 관련 데몬 또는 이와 유사한 것)에게 보이지 않도록하는 것입니다.
warren

@flanchetto 그래서, 이미 실행중인 프로그램이 있고 나중에 암호가 안전하게 부여되는 것과 동일한 프로세스에서 암호가있는 명령 행 명령을 실행하고 있는지 말하고 있습니까? 예를 들어 , 동일한 프로세스 인 한 run python myScript.py및 모든 subprocess.Popen명령 (암호를 포함하거나 포함하지 않을 수 있음)이 표시되지 않습니까?
Brōtsyorfuzthrāx

어쨌든, 그것은 작동하지 않습니다 (방금 시도하고 암호를 보았습니다). 그래서 나는 당신이 다른 것을 의미한다고 가정합니다. 자유롭게 설명하십시오. :)
Brōtsyorfuzthrāx

13

커널 패치 http://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/commit/?id=0499680a42141d86417a8fbaa8c8db806bea1201 에 따르면 proc 파일 시스템에 hidepid 옵션을 사용할 수 있습니다.

hidepid = 0 (기본값)은 이전 동작을 의미합니다. 누구나 세상에서 읽을 수있는 모든 / proc / PID / * 파일을 읽을 수 있습니다.

hidepid = 1은 사용자가 / proc // 디렉토리에 액세스 할 수없고 자신의 디렉토리에 액세스 할 수 있음을 의미합니다. cmdline, sched *, status와 같은 민감한 파일은 이제 다른 사용자로부터 보호됩니다. proc_pid_permission ()에서 수행 된 권한 검사와 파일의 권한은 그대로 유지되므로 특정 파일 모드를 기대하는 프로그램은 혼동되지 않습니다.

hidepid = 2는 hidepid = 1에 모든 / proc / PID /가 다른 사용자에게는 보이지 않음을 의미합니다. 프로세스가 존재하는지 여부를 숨기는 것은 아니며 (예 : kill -0 $ PID와 같은 다른 방법으로 배울 수 있음) 프로세스의 euid 및 egid를 숨 깁니다. 침입자는 프로세스 실행, 일부 데몬이 높은 권한으로 실행되는지 여부, 다른 사용자가 민감한 프로그램을 실행하는지 여부, 다른 사용자가 프로그램을 전혀 실행하는지 여부 등에 대한 정보 수집 작업을 수행합니다.

gid = XXX는 모든 프로세스 정보를 수집 할 수있는 그룹을 정의합니다 (hidepid = 0 모드에서와 같이). 이 그룹은 루트가 아닌 사용자를 sudoers 파일 등에 넣는 대신 사용해야합니다. 그러나 전체 시스템에서 작업을 모니터링하지 않는 신뢰할 수없는 사용자 (데몬 등)는 그룹에 추가해서는 안됩니다.

프로세스 수준에서 가시성을 제어 할 수는 없지만 사용자가 자신의 프로세스 만 볼 수 있도록 할 수 있습니다.

커널 버전이 3.3보다 큰 경우 다음 명령을 사용하여 시도 할 수 있습니다.

 
mount /proc -o remount,hidepid=2


hidepid=2특정 사용자에게만 영향을 미치거나 특정 사용자를 허용 목록에 추가하도록 제한 할 수 있습니까 ?
Brōtsyorfuzthrāx

잘 작동합니다! 내 문제는 cron 스크립트를 사용하여 서버에 연결하고 있으며 모든 사용자가 "htop"(예 :)을 사용하여 자격 증명을 볼 수 있다는 것입니다. "hidepid = 2"사용자로 설정하면 내가 찾던 다른 사용자가 시작한 프로세스를 볼 수 없습니다. 기본적으로 설정되지 않은 이유는 무엇입니까?
lepe

아마 레거시 이유로 @lepe. 이것을 깨뜨릴 것이므로 모든 곳에서 (아직) 사용할 수는 없습니다.
Florian Wendelborn

OP는 다른 사용자뿐만 아니라 pid를 전체적으로 볼 수 없도록 요청했습니다 ...?
phil294

특정 사용자 만 만든 프로세스를 숨길 수있는 방법이 있습니까? 예. root?
Avery235

-2

예를 들어 top 및 n 명령에서 F 명령을 사용하여보고자하는 것을 구성하십시오. ~ / .toprc에 원하는 구성을 작성하려면 W 명령을 사용하십시오. 최고의 명령을 볼 수 있습니다. 이렇게하면 문제를 빠르게 해결할 수 있습니다. F를 사용하면보고 싶은 필드를 추가 / 제거 할 수 있지만 f에서는 s를 사용하여 정렬을 설정 한 다음 q를 다시 표시로 되돌릴 수 있습니다. 그런 다음 n은보고 싶은 프로세스 수를 설정하고 W는 .toprc에 저장합니다.


그건 내 관점에서 뭔가를 숨기고 있습니다
warren
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.