Bash 버전 4.N은 시스템 로그에 명령 기록을 기록할 수 있는 것으로 보이지만 이 기능을 구성하는 방법에 대한 정보를 찾을 수 없습니다.
, 및 트랩을 사용하여 해킹을 제공하는 몇 페이지를 읽었으며 PROMPT_COMMAND
사용 가능한 패치가 있다는 것을 알고 있지만 이제 내장되어 있으므로 이것이 필요하지 않습니다.
캡처 명령을 사용할 수 있다는 것을 알고 있지만 auditd
bash/syslog 조합을 사용하고 싶습니다.
답변1
이 접근 방식이 정확히 당신이 찾고 있는 것 같습니다. 이에 대해서는 다음 제목의 기사에서 설명합니다.Bash 포렌식 기능 향상.
발췌:
그와 이 주제를 논의하면서 저는 법의학 조사를 개선하기 위해 명령 기록을 세부적으로 조정할 수 있는 방법이 있다는 것을 깨달았습니다. 2009년에도 글을 썼습니다.블로그Bash의 게시물은 Bash 명령 기록을 원격 Syslog 서버로 보내는 몇 가지 아이디어를 제공합니다. 내 웹 로그를 확인해 보니 이 블로그 게시물이 지난 30일 동안 1000회 이상의 방문을 기록하며 여전히 인기를 끌고 있습니다! 내 블로그 게시물은 오래되었습니다. Bash는 버전 4.1부터 기본적으로 Syslog를 지원하지만 대부분의 배포판에서는 활성화되어 있지 않습니다. 이 기능을 사용하려면 셸을 다시 컴파일해야 합니다.
나는 이것이 그다지 편리하지 않다고 생각하지만, 장점은 사용자가 이를 비활성화할 수 없다는 것입니다(쉘을 다른 쉘이나 다른 Bash 바이너리로 전환하지 않는 한). config-top.h에 "SYSLOG_HISTORY"를 정의하기만 하면 됩니다.
$ vi config-top.h #define SYSLOG_HISTORY #if defined (SYSLOG_HISTORY) # define SYSLOG_FACILITY LOG_USER # define SYSLOG_LEVEL LOG_INFO #endif ./configure make install
따라서 이 기능은 Bash 4.1+에서 사용할 수 있지만 가장 널리 사용되는 배포판에서는 기본적으로 Bash로 컴파일되지 않을 수 있습니다.
주어진 Bash가 어떤 옵션으로 컴파일되었는지 확인할 수 있는 방법을 찾지 못했기 때문에 이 질문에 대답하려면 .spec
Bash RPM을 빌드할 때 사용된 업스트림 파일(예: Redhat 배포판)을 살펴보는 것이 좋습니다. Debian 기반 배포판에서도 사용할 수 있습니다.
확인을 위해 .spec
CentOS 7.2.1511과 함께 제공된 Bash 파일을 살펴봤지만 이 기능을 활성화하지 않습니다.
$ grep configure bash.spec
%configure --with-bash-malloc=no --with-afs
- Use the configure macro instead of calling ./configure directly
나만의 RPM을 굴려보세요
위 세부 사항의 요지를 기반으로 나만의 Bash를 구축하기 위해 취한 단계는 다음과 같습니다.
소스 다운로드 및 설치시작하나 다운로드했어요소스 속도(SRPM)CentOS 7.x용 배시. 다운로드한 후 내 rpmbuild
디렉토리 에 설치했습니다 .
$ rpmdev-setuptree
$ rpm -ivh bash-4.2.46-20.el7_2.src.rpm
수리하다
파일이 rpmbuild/SPEC
& 로 추출됩니다 rpmbuild/SOURCES
. 이제 tar.gz
다음 단계를 사용하여 압축이 풀린 Bash 파일의 내용을 복사합니다.
$ cd rpmbuild/SOURCES
$ tar zxf bash-4.2.tar.gz
$ cp -prf bash-4.2 bash-4.2-orig
$ cd bash-4.2
편집하여 rpmbuild/SOURCES/bash-4.2/config-top.h
다음과 같이 만드세요.
/* Define if you want each line saved to the history list in bashhist.c:
bash_add_history() to be sent to syslog(). */
#define SYSLOG_HISTORY
#if defined (SYSLOG_HISTORY)
# define SYSLOG_FACILITY LOG_LOCAL1
# define SYSLOG_LEVEL LOG_DEBUG
#endif
함수를 편집 하고 다음과 같이 rpmbuild/SOURCES/bash-4.2/bashhist.c
만드세요 .bash_syslog_history
void
bash_syslog_history (line)
const char *line;
{
char trunc[SYSLOG_MAXLEN];
if (strlen(line) < SYSLOG_MAXLEN)
syslog (SYSLOG_FACILITY|SYSLOG_LEVEL, "HISTORY: PID=%d UID=%d USER=%s CMD=%s", getpid(), current_user.uid, current_user.user_name, line);
else
{
strncpy (trunc, line, SYSLOG_MAXLEN);
trunc[SYSLOG_MAXLEN - 1] = '\0';
syslog (SYSLOG_FACILITY|SYSLOG_LEVEL, "HISTORY: PID=%d UID=%d USER=%s CMD(TRUNCATED)=%s", getpid(), current_user.uid, current_user.user_name, trunc);
}
}
이제 .patch
두 파일에 대한 변경 사항이 포함된 파일을 생성합니다.
$ cd $HOME/rpmbuild/SOURCES
$ diff -Npru bash-4.2-orig bash-4.2 > bash_history_rsyslog.patch
$HOME/rpmbuid/SPEC/bash.spec
다음 줄을 SPEC 파일의 적절한 위치에 추가 합니다.
# history syslog
Patch144: bash_history_rsyslog.patch
...
...
%patch144 -p1 -b .history_rsyslog
세워
이제 빌드하세요.
$ cd $HOME/rpmbuild/SPEC
$ rpmbuild -ba bash.spec
빌드의 끝은 다음과 같습니다.
...
Processing files: bash-debuginfo-4.2.46-20.el7.centos.x86_64
Provides: bash-debuginfo = 4.2.46-20.el7.centos bash-debuginfo(x86-64) = 4.2.46-20.el7.centos
Requires(rpmlib): rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1 rpmlib(CompressedFileNames) <= 3.0.4-1
Checking for unpackaged file(s): /usr/lib/rpm/check-files /home/vagrant/rpmbuild/BUILDROOT/bash-4.2.46-20.el7.centos.x86_64
Wrote: /home/vagrant/rpmbuild/RPMS/x86_64/bash-4.2.46-20.el7.centos.x86_64.rpm
Wrote: /home/vagrant/rpmbuild/RPMS/x86_64/bash-doc-4.2.46-20.el7.centos.x86_64.rpm
Wrote: /home/vagrant/rpmbuild/RPMS/x86_64/bash-debuginfo-4.2.46-20.el7.centos.x86_64.rpm
Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.nGworU
+ umask 022
+ cd /home/vagrant/rpmbuild/BUILD
+ cd bash-4.2
+ rm -rf /home/vagrant/rpmbuild/BUILDROOT/bash-4.2.46-20.el7.centos.x86_64
+ exit 0
설치하다
완료되면 생성된 RPM을 설치할 수 있습니다.
$ sudo rpm -ivh --force $HOME/rpmbuild/RPMS/x86_64/bash-4.2.46-20.el7.centos.x86_64.rpm
Preparing... ################################# [100%]
Updating / installing...
1:bash-4.2.46-20.el7.centos ################################# [100%]
rsyslog 구성
이제 rsyslog /etc/rsyslog.conf
구성을 수정합니다.
$ sudo vim /etc/rsyslog.conf ... ... $ModLoad imudp $UDPServerRun 514 $ModLoad imtcp $InputTCPServerRun 514 ... ... #### 전역 지침#### $template IpTemplate,"/var/log/bash-log/%FROMHOST-IP%.log" *.* ?IP 템플릿 &~ ... ...
그런 다음 Rsyslog를 다시 시작하십시오.
$ sudo systemctl restart rsyslog
테스트 및 확인
이제 새로운 Bash 인스턴스를 루트로 실행하고 몇 가지 명령을 실행하세요.
$ sudo -Es
$ ls
그리고 로그 파일을 추적합니다 /var/log/bash-log/127.0.0.1.log
.
$ tail /var/log/bash-log/127.0.0.1.log
2018-07-19T23:23:37.568131-04:00 centos7 bash: HISTORY: PID=12511 UID=1000 USER=vagrant CMD=sudo -Es
2018-07-19T23:23:37.573825-04:00 centos7 sudo: vagrant : TTY=pts/0 ; PWD=/home/vagrant/rpmbuild/SOURCES ; USER=root ; COMMAND=/bin/bash
2018-07-19T23:23:37.589258-04:00 centos7 systemd-logind: Got message type=signal sender=org.freedesktop.DBus destination=n/a object=/org/freedesktop/DBus interface=org.freedesktop.DBus member=NameOwnerChanged cookie=4454 reply_cookie=0 error=n/a
2018-07-19T23:23:37.590633-04:00 centos7 dbus[588]: [system] Activating service name='org.freedesktop.problems' (using servicehelper)
2018-07-19T23:23:37.590806-04:00 centos7 dbus-daemon: dbus[588]: [system] Activating service name='org.freedesktop.problems' (using servicehelper)
2018-07-19T23:23:37.592160-04:00 centos7 dbus[588]: [system] Activated service 'org.freedesktop.problems' failed: Failed to execute program /lib64/dbus-1/dbus-daemon-launch-helper: Success
2018-07-19T23:23:37.592311-04:00 centos7 dbus-daemon: dbus[588]: [system] Activated service 'org.freedesktop.problems' failed: Failed to execute program /lib64/dbus-1/dbus-daemon-launch-helper: Success
2018-07-19T23:23:37.602174-04:00 centos7 systemd-logind: Got message type=signal sender=org.freedesktop.DBus destination=n/a object=/org/freedesktop/DBus interface=org.freedesktop.DBus member=NameOwnerChanged cookie=4455 reply_cookie=0 error=n/a
2018-07-19T23:23:38.520300-04:00 centos7 bash: HISTORY: PID=12585 UID=0 USER=root CMD=ls
2018-07-19T23:23:49.210406-04:00 centos7 bash: HISTORY: PID=12585 UID=0 USER=root CMD=tail /var/log/bash-log/127.0.0.1.log
CMD=...
이 로그에 몇 줄이 표시되어 있습니까 ? 방금 실행한 명령은 ls
& 입니다 tail
.
사전 구축?
이 문제를 겪고 있는 사람들을 돕기 위해 나는 Copr의 수정 사항을 사용하여 Bash RPM을 자유롭게 구축했습니다.