모든 세션/화면/byobu 터미널에서 현재 사용자가 실행한 모든 명령을 보는 방법은 무엇입니까?

모든 세션/화면/byobu 터미널에서 현재 사용자가 실행한 모든 명령을 보는 방법은 무엇입니까?

데비안 상자가 있는 경우 일부 사용자는 루트 계정에 액세스할 수 있고, 일부 사용자는 SSH 연결을 열고 명령 실행을 시작하고, 일부는 화면을 열거나 byobu 또는 기타 유사한 도구를 사용하여 명령을 실행합니다.

"history" 명령은 실행된 명령의 전체 목록을 가져오지 못하는 것 같습니다.

실행된 모든 명령을 얻는 가장 좋은 방법은 무엇입니까?

답변1

해킹이지만 적어도 작동합니다. root해당 서버에 다음이 필요합니다 .

출력을 보면 ps aux사용자의 fork 가 표시됩니다 sshd. 예를 들어 이 경우 user 는 다음과 같습니다 mst.

$ ps aux | grep ssh
mst      19325  0.0  0.0  76268  1920 ?        S    21:20   0:00 sshd: mst@pts/6

그래서 다음과 같이 이 프로세스의 파일 설명자를 확인합니다.

$ sudo ls -lha /proc/19325/fd
total 0
dr-x------ 2 root root   0 Aug 30 21:26 .
dr-xr-xr-x 7 mst  users  0 Aug 30 21:25 ..
lrwx------ 1 root root  64 Aug 30 21:26 0 -> /dev/null
lrwx------ 1 root root  64 Aug 30 21:26 1 -> /dev/null
lrwx------ 1 root root  64 Aug 30 21:26 11 -> /dev/ptmx
lrwx------ 1 root root  64 Aug 30 21:26 12 -> /dev/ptmx
lrwx------ 1 root root  64 Aug 30 21:26 2 -> /dev/null
lrwx------ 1 root root  64 Aug 30 21:26 3 -> socket:[138972]
lrwx------ 1 root root  64 Aug 30 21:26 4 -> socket:[138198]
lrwx------ 1 root root  64 Aug 30 21:26 5 -> socket:[138200]
lrwx------ 1 root root  64 Aug 30 21:26 6 -> socket:[138207]
lr-x------ 1 root root  64 Aug 30 21:26 7 -> pipe:[138212]
l-wx------ 1 root root  64 Aug 30 21:26 8 -> pipe:[138212]
lrwx------ 1 root root  64 Aug 30 21:26 9 -> /dev/ptmx

세 개의 링크는 , /dev/ptmx및 을(를) 가리킵니다. 사용자의 쉘은 그가 입력한 모든 명령과 그 명령의 출력을 인쇄하기 때문에 나는 fd 번호에 대한 시스템 호출을 사용하고 필터링하여 그의 명령을 관찰합니다(두 번째 링크도 마찬가지임).stdinstdoutstderrstdoutstraceread1111/dev/ptmx

sudo strace -e read -s 256 -p 19325 2>&1 | grep 'read(11'

사용자가 다음 명령을 입력한 것을 볼 수 있습니다 ls.

read(11, "l", 16384)                    = 1
read(11, "s", 16384)                    = 1

좋아, 출력이 좋지는 않지만...작동합니다

답변2

가장 좋은 방법은 auditd를 사용하는 것입니다. 특정 사용자가 실행한 모든 명령, 모든 사용자가 실행한 모든 명령, 특정 명령의 호출 등을 기록하도록 설정할 수 있습니다.

매뉴얼 페이지에서는 auditctl필요할 수 있는 규칙의 몇 가지 예를 제공합니다. 또한, 다른 루트 사용자를 신뢰하지 못한다면 다른 사람이 접근할 수 없는 별도의 서버에 로그인하는 것이 좋습니다.

또한 루트 비밀번호를 제공하지 말고 루트로 SSH 로그인을 허용하지 않는 것이 좋습니다. 대신, 로그인한 사용자에게만 자신의 계정을 허용하고 루트로 만드세요 sudo su. 또한 auditd는 어떤 사용자가 무엇을 했는지 추적할 수 있습니다.

관련 정보