Linux에서 사용자가 만든 실행 파일을 어떻게 추적합니까?


11

Linux를 사용하여 전체 명령 줄 (실제로 내 사용자로 수행 된 모든 exec * ())을 포함하여 내 이름으로 실행되는 실행 파일을 추적하고 싶습니다. 내가 처리하는 프로그램을 실행하기 위해 작업을 처리하기 위해 내가 제어하지 않는 프로그램이 가정되지만, 그렇게하는지, 그리고 어떤 옵션을 사용하는지 확인하고 싶습니다. 내가 제어하지 않는 프로그램은 비열하며 작업을 위해 실행 해야하는 프로그램의 이름에 따라 동작을 변경하는 것처럼 보이므로 정보를 기록하고 실제를 호출하는 쉘 스크립트를 전달할 수 없습니다 프로그램.

전체 명령 행을 포함하여 Linux의 시스템에서 사용자로 수행 한 모든 exec * ()에 대해 알림을받을 수 있습니까? ps루프에서 실행이 부족 합니다. 오히려 내가 작업하고 루트 액세스가 필요하지 않은 시스템에서 직접 수행하고 싶지만 루트 액세스 권한이있는 시스템을 생성 할 수 있다면 프로그램을 설치하고 조사하십시오.

우분투 12.4 LTS 사용.


Ask Ubuntu보다는 실제 Ubuntu 질문보다 Unix / Linux 질문이기 때문에 여기서 묻습니다.
Pierre Lebeaupin

1
이 프로그램은 얼마나 교활합니까? 디버거를 감지하거나 우회하려고합니까? 동적으로 연결되어 있습니까? 너무 열악한 경우 루트가있는 가상 머신을 사용해야 할 수도 있습니다. (이것은 특히 교활하지 않은 프로그램의 경우에도 가장 간단한 전략 일 수 있습니다.)
Gilles 'SO-Stop

@Gilles 실제로 가능성이 있습니다 .VM을 시도한 다음 문제가 해결 가능한 경우 질문을 업데이트하겠습니다.
Pierre Lebeaupin

참고 : 실제로 프로그램 이름과 인수가 필요한 것으로 audit보이지만 셸의 '전체 명령 줄'은 리디렉션 / 파이프 및 envvar 설정을 사용하는 하위 프로세스에 영향을 줄 수 있으며 대체 / 확장, 중요하지 않은 인용을 포함합니다. 간격과 같은 제어 구조 doa && dob를 사용하면 얻을 수 없습니다.
dave_thompson_085

답변:


10

이벤트 auditd를 기록 하도록 구성해야 execve합니다. RHEL5의 예 :

[root@ditirlns01 ~]# auditctl -a always,entry -S execve
WARNING - 32/64 bit syscall mismatch, you should specify an arch
[root@ditirlns01 ~]#

나는 아치 경고를 무시하고 중요하지 않은 것처럼 보이지만 원하는 경우 사용 -F arch=b64하거나 -F arch=b32설정할 수 있습니다 .

위의 결과는 다음과 같습니다

[root@ditirlns01 ~]# ls /tmp/whatever
ls: /tmp/whatever: No such file or directory
[root@ditirlns01 ~]# grep whatever /var/log/audit/audit.log
type=EXECVE msg=audit(1386797915.232:5527206): argc=3 a0="ls" a1="--color=tty" a2="/tmp/whatever"
type=EXECVE msg=audit(1386797927.133:5527241): argc=3 a0="grep" a1="whatever" a2="/var/log/audit/audit.log"
[root@ditirlns01 ~]#

그것은 분명히 빠르고 더럽지 만 그것이 당신이 그것을하는 방법의 기초입니다. 정확히해야 할 일은 아마도 정확히 무엇을 하려는지에 달려 있습니다. auditctl명령 에서 다양한 필터를 사용하여 감사 흐름을 줄일 수 있지만 해당 정보를 알지 못하므로 포함 할 내용을 모릅니다. 좀 더 구체적인 것이 필요하면 매뉴얼 페이지를 확인 하거나이 답변에 의견을 게시하고 더 업데이트 할 것을 제안합니다.

그것이 올바른 방향으로 나아가도록 도와 주길 바랍니다.

편집하다:

귀하의 질문은 특정 사용자를 찾는 것과 관련이 있기 때문에 다음을 보여줄 수 있습니다.

[root@ditirlns01 ~]# auditctl -a always,entry -S execve -F euid=16777216
WARNING - 32/64 bit syscall mismatch, you should specify an arch

위와 동일하지만 execve유효 사용자 ID로 실행하는 사람에 의해서만 16777216기록됩니다. 사용자 loginuid값 (처음 시스템에 로그인 한 사용자)을 지정해야하는 경우 auid대신 다음을 기준으로 필터링 합니다.

[root@ditirlns01 ~]# auditctl -a always,entry -S execve -F auid=16777216
WARNING - 32/64 bit syscall mismatch, you should specify an arch

사용자가 할 것입니다 경우 AUID / loginuid 필터는 예를 들어, 유용 할 것이다 su또는 sudo루트에 있습니다. 이 상황에서 루트로 실행되는 많은 것들이 있지만 문제의 사용자가 시작한 것들에만 관심이 있습니다. auditctl또한 필터를 쌓아서 다음 euidauid같이 필터링 할 수 있습니다 .

[root@ditirlns01 ~]# auditctl -a always,entry -S execve -F auid=16777216 -F euid=0
WARNING - 32/64 bit syscall mismatch, you should specify an arch
[root@ditirlns01 ~]# ls /tmp/nashly -ltar
ls: /tmp/nashly: No such file or directory
[root@ditirlns01 ~]# grep nashly /var/log/audit/audit.log
type=EXECVE msg=audit(1386798635.199:5529285): argc=4 a0="ls" a1="--color=tty" a2="/tmp/nashly" a3="-ltar"
type=EXECVE msg=audit(1386798646.048:5529286): argc=3 a0="grep" a1="nashly" a2="/var/log/audit/audit.log"

1
“루트 액세스 권한이 없습니다.” (그렇지 않으면 이것은 좋은 대답이 될 것입니다.)
Gilles 'SO-Stop

젠장 ... 너무 가까이 ...
Bratchley

고마워요. apt-get으로 auditctl을 설치해야한다고 덧붙여 야하며 Ubuntu에 사전 설치되어 있지 않습니다.
Pierre Lebeaupin

감사. 좋은 예입니다. 그러나 감사 로그에서 종료 코드를 가져 오는 방법이 있습니까?
Kaos

0

당신은 간단한 것을 요청했습니다. 나는 예를 mplayer들었지만 다른 상황에 적응할 수 있다고 생각합니다.

#! /bin/sh
# This executable must be used instead of /usr/bin/mplayer
# do not forget the chmod +x filename...
LOG=/tmp/mplayer.log
echo "$@" >> $LOG
if [ -n "$1" ] && [ -f "$1" ] ; then
        filename="$1"
        echo "$(date "+%F %T") $(basename "$filename")" \
        | tee -a "$(dirname "$filename")/mplayer.log"  >> $LOG
fi
/usr/bin/mplayer "$@"

보시다시피 이것은 매우 간단합니다. 첫 번째 인수를 파싱합니다. 파일이므로 로그는 중앙 파일 $LOG로 만들어지고 파일 ( mplayer.log동일한 디렉토리에서 항상 같은 이름을 가짐)로 연결됩니다 .

따라서 사용자는 각 디렉토리에서 읽은 최신 영화를 얻을 수 있습니다.


Q는 구체적으로 스크립트를 대체하는 것이 효과가 없다고 말했다.
dave_thompson_085

가능하지만 상황에 맞지 않습니다. 보안에 문제가 없으며 실행하는 스크립트를 선택할 수 있습니다. 믿을 수 없을 정도로, 나는이 가장 간단한 해결책을 가지고 있지만 어쩌면 다른 사람이 괴짜 전용 물건에 들어 가지 않는 데 관심이있을 것입니다. 이전 솔루션이 더 안전하다는 것을 인정합니다!
MUY Belgium
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.