wc
파일 내 문자수, 단어수, 그리고 라인수를 확인할 대 사용하는 CMD / 주로 데이터를 수집할 때 자주 활용됨
1. 형식 및 출력내용
[wc] [OPTIONS] [file]
* 출력내용
[root@server1 /test]# wc /etc/passwd
49 117 2760 /etc/passwd
49 = 라인수
117 = 단어수
2760 = 문자수
2. 옵션
wc -l : 라인수 만 출력
wc -w : 단어수 만 출력
wc -c : 문자수 만 출력
3. 실습
* 다른 명령어와 조합할때 다양한 데이터를 원하는 용도로 수집할 수 있다.
1) cat 과 합쳐서 시스템 사용자 수를 확인해보자
[root@server1 /test]# cat /etc/passwd | wc -l
49
* 즉 49라는 값을 확인가능하다.
2) ps 와 합쳐서 실행중인 프로세스의 수를 확인하자
[root@server1 /test]# ps -ef | wc -l
292
* 즉 49라는 값을 확인가능하다.
3) rpm -a 와 합쳐서 설치되어 있는 패키지의 수를 확인해보자
[root@server1 /test]# rpm -qa | wc -l
1368
* 즉 1368 개라는것이 확인 가능하다.
4) ps -ef | grep httpd | wc -l 를 활용하여 apache.count를 해보자
[root@server1 /test]# ps -ef | grep httpd
root 7243 1 0 12:56 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 7251 7243 0 12:56 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 7252 7243 0 12:56 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 7253 7243 0 12:56 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 7254 7243 0 12:56 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
root 7598 2816 0 13:00 pts/0 00:00:00 grep --color=auto httpd
[root@server1 /test]# ps -ef | grep httpd | wc -l
6
* 해당 결과값을 지속 수집할 경우 apache 의 자료를 그래프등으로 앞으로의 경향이나 과거 기록등을 데이터 수집하고 분석할 수 있다.
[참고] 데이터 수집(Data Gathering) 예
cat /etc/passwd | wc -l
rpm -qa | wc -l
ps -ef | grep httpd | wc -l
cat /var/log/messages | grep 'Feb 13' | grep 'Started Telnet Server' | wc -l
df -h / | tail -1 | awk '{print $5}'
cat /var/log/messages | grep 'Mar 31' | grep 'Start Telnet Server' | wc -l
su
사용자를 변경할 수 있다.
즉 일반사용자1 -> 일반사용자2 or 일반사용자 -> 관리자 or 관리자 -> 일반사용자 인 격이다.
1. 형식
[su] [OPTIONS] [USERNAME]
2. 옵션
su : 환경변수를 유지한 체로 쉘내에서 사용자를 변경한다
su - : 대시기호 사용시 환경변수를 버리고 변경 사용자의 환경변수를 받아와서 사용자 변경을한다
3. 실습
1) su 를 활용하여 쉘 내에서 사용자를 변경한다
[root@server1 ~]# cd /etc
[root@server1 /etc]# su fadora
[fadora@server1 /etc]$ id
uid=1000(fadora) gid=1000(fadora) groups=1000(fadora)
[fadora@server1 /etc]$ echo $PATH
/home/fadora/.local/bin:/home/fadora/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/root/bin
* 관리자만 가지고 있는 /root/bin 의 값을 포함한채로 사용자가 수정되었다.
2) su - 를 활용하여 환경변수를 포기하고 사용자를 변경한다.
[root@server1 ~]# cd /etc
[root@server1 /etc]# su - fadora
[fadora@server1 ~]$ id
uid=1000(fadora) gid=1000(fadora) groups=1000(fadora)
[fadora@server1 ~]$ echo $PATH
/home/fadora/.local/bin:/home/fadora/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin
[fadora@server1 ~]$
* 위와 다르게 관리자가 가지고 있는 /root/bin 의 값이 사라져있는게 확인가능하다.
-> 즉 일반적으로 스위칭시에는 su - 를 활용해야 깔끔하게 이전사용자의 환경변수가 없는 채로 변경처리가 가능하다.
[참조] ssh(or telnet) 와 su - 는 결국 같은 의미이나, su -의 경우 더욱 빠르게 전환이 가능하다.
sudo
관리자 권한으로 파일을 실행할 수 있도록 하는 CMD (windows 의 관리자권한으로 실행과 유사)
1. 형식
[su] [OPTIONS] [CMD]
* /etc/sudoers.d 파일내 sodo 를 이용하여 관리자 권한으로 실행 가능한 명령어들의 집합
* wheel 그룹. 내 속해있을 경우 sudo CMD 를 활용할 시 root 와 동일한 권한을 가짐. 일반 유저의 경우 wheel 그룹 내 포함시키지 않을것.
2. 옵션
sudo -l : 사용자가 root 권한으로 수행할 수 있는 명령어를 확인할 때 사용함.
sudo -i : 관리자 권한으로 상승할 수 있다. (주어진 명령어 내에서)
3. 실습
* 일반 사용자가 wheel 그룹에 속해있지 않을경우 . 그룹에 속하도록 하는 방법
root 사용자에서 usermod -aG wheel USERNAME 으로 부여 가능하다.
1) fadora 사용자에서 /etc/shadow 파일을 열어보자.
[fadora@server1 ~]$ cat /etc/shadow
cat: /etc/shadow: 허가 거부
[fadora@server1 ~]$ sudo cat /etc/shadow
[sudo] fadora의 암호:
root:$6$aOe2IgPFVE31kN8p$LMOsjdkMu30ZtO0yJNujvxSSx7pzwBR2FGNrCP39E1FsXUnXPosqhXThVWgduiv3b0TMnN1mur2F56/RA4Dwc.::0:99999:7:::
* 열리는걸 확인할 수 있다.
2) fadora 사용자가 관리자의 권한을 얻어보자.
[fadora@server1 ~]$ id
uid=1000(fadora) gid=1000(fadora) groups=1000(fadora),10(wheel)
[fadora@server1 ~]$ sudo -i
[root@server1 ~]# id
uid=0(root) gid=0(root) groups=0(root)
[참조] su - root 와 sudo 의 차의
- su - root 의 경우는 말그대로 root 의 모든 권한을 얻기에 시스템을 망가뜨릴수도, 어떤 제약없이 돌아다닐수도 있다 그래서 root 의 권한은 필요하되 필요에 의한 업무만 지정해주고 싶을 경우 sudo 명령어를 활용하여 제약을 준 상태로 임시 root권한을 부여할 수 있다 . 즉
- root 암호를 공유할 필요가 없다. -> 사용자의 암호를 입력함.
- 사용자가 관리자권한으로 수행하는 명령어의 제한을 둘 수 있다 . -> /etc/sudoers.d 로 관리함
id
실제 또는 유효 UID 와 GID 를 출력한다.
1. 형식
[id]
2. 옵션
id -u : effeictive user id만 출력
id -g : 오로지 그룹 ID만 출력한다
id -G : 추가 그룹만 출력한다.
id -n : ID 번호 대신 사용자 명 또는 그룹명으로 출력한다 종속관계가 있음으로 기본옵션들에 추가적으로 이용된다
3. 활용
* 기본적으로 모든 사용자는 그룹에 속해있어야한다. 기본 그룹을 primary 그룹이라 하고. secondly 그룹은 이후 추가된 그룹들이라고 보면된다.
* groups
사용자의 그룹 또는 다른사용자의 그룹을 확인한다. 문제는 ID CMD 에 모든것이 나옴으로 크게 쓰이지는 않는다.
last
사용자들의 로그인 한 기록들을 확인한다.
1. 형식
[last] [OPTIONS]
2. 옵션
last -i : ip 정보를 표기
last -n : last 의 출력량을 n 수 만큼만 화면에 출력한다.
last -f : 지정한 파일에서 정보를 불러온다 ( last 출력의 기본값 : /var/log/wtmp )
3. 실습
1) main VM 과 server2 VM 으로 server1 VM 으로 접속 후 last -i 를 입력해보자
[root@server1 ~]# last -i
root pts/2 192.168.10.30 Wed Mar 31 15:36 still logged in
fadora pts/1 192.168.10.10 Wed Mar 31 15:35 still logged in
....... 중략 ........
wtmp begins Tue Mar 30 14:16:24 2021
* root 와 fadora 사용자가 지금 로그인 되어있는점을 확인할 수 있다. 또한 last 명령어는 기본적으로 wtmp 파일을 참조하여 출력한다.
[참고] fadora pts/1 192.168.10.10 Wed Mar 31 15:35 - 16:30 (00:03) 를 바탕으로 출력결과 해석
fadora : 로그인 사용자의 이름
pts/1 : 로그인시 할당받은 터미널 번호
192.168.10.10 : 원격 호스트 (IP)
Wed Mar 31 15:35 - 16.30 : 로그인 시간 - 로그아웃 시간
(00:03) : 시스템에 접속 한 기간
[참고] /var/log/wtmp.*(날자) : 로그인과 로그아웃한 정보가 있는 파일
* 위 파일은 text 형태가 아닌 DB 형태임으로 cat 으로 읽을 수 없다 .
2) 오늘 file.log 를 삭제한 사용자를 찾아보자
key1 - 어제 파일이 지워졋다 ( last | grep '오늘 날자' )
key2 - 지워진 파일의 이름은 file.log다 ( cat ~/.bash_hisrotry / cat ~/.bash_hisrotry | grep 'file.log' | grep rm )
key 1,2 를 기반으로 찾아보자
① (server1) 작업 준비
cd /test
chmod 777 /test
touch file.log
② (server2) fedora 사용자로 server2로 로그인
telnet 192.168.10.20
fedora 사용자로 로그인
③ (server2) fedora 사용자로 중요한 파일을 지우기
rm -rf /test/file.log
ls /test
-> file.log 파일이 지워졌는지 확인
이후 위의값을 활용하여 범인을 색출해보도록 하자.
lastlog
마지막 로그인 정보만 표기함
1. 형식
[lastlog] [OPTIONS]
2. 옵션
lastlog -u [USERNAME] : 특정 사용자의 lastlog 기록을 보여줌
[참고] /var/log/lastlog 내에 해당 정보가 기록되어있다.
lastb
사용자들의 로그인 실패된 기록들을 볼수 있다.
1. 형식
[lastb] [OPTIONS]
* 위 내용을 해석한다기 보단 해당 내용이 출력될 경우 로그인 실패기록이 출력된다는 계념으로 이해하는것이 좋다
내용이 많이 출력되는경우에는 공격자의 지속적인 공격이 시도되고 있음으로 이해할 수 있다.
[참고] /var/log/btmp 내에 해당 정보가 기록되어있다.
who
로그인한 사람들을 보여준다.
1. 형식
[who] [OPTIONS]
2. 옵션
who : 현재 시스템에 접속 중인 모든 사용자
who -a : 시스템 부팅시간 런레벨등 자세한 정보를 표기한다.
who am i : 로그인한 사용자 정보 확인
whoami : 현재 사용자명 확인
3. 실습
* who 명령어 정보 해석하기 fadora pts/1 2021-03-31 16:44 (::ffff:192.168.10.10)
fadora : 로그인한 사용자명
pts/1 : 로그인시 할당받은 터미널 tty
2021-03-31 16:44 : 로그인 한 시간.
(::ffff:192.168.10.10) : 원격 호스트 IP
[참조] /var/run/utmp 내에 해당 정보를 확인할 수 있다.
w
로그인된 사용자들의 명령어 기록 확인
1. 형식
[w] [USERNAME]
[참조] 사용자 수행 명령어 모니터링 하기
while true
> do
> w -i user01
> sleep 2
> done
시 2초(sleep time)간격으로 지속적인 모니터링으로 w를 이용할 수 있다.
* w -i user01 에 어떤 CMD가 오느냐에 따라서 원하는 값을 원하는 시간마다 원하는 만큼 지속적인 모니터링을 할 수 있다. 매우 좋은 구문. clear를 섞어도 되고 echo "=========`date`===========" 등 섞어서도 사용 가능하다.
last구문, who구문, w 같은 경우는 실시간 모니터링시 아주 많이 활용될 수 있음으로! 항상 익혀두도록 하자!
'모의해킹 침해대응 과정 > Linux 기초' 카테고리의 다른 글
리눅스 기초때기 3일차. 파일 속성 정보 관리(Permission) / CHOWN, CHGRP, CHMOD,UMASK (0) | 2021.04.01 |
---|---|
리눅스 기초때기 3일차. / VI 편집기 (0) | 2021.04.01 |
리눅스 기초때기 2일차. / CAT, MORE, HEAD,TAIL (0) | 2021.03.31 |
리눅스 기초때기 2일차 파일 관리 / TOUCH, CP, MV, RM (0) | 2021.03.30 |
리눅스 기초때기 1일차 디렉토리 관리 / LS, MKDIR, RMDIR (0) | 2021.03.30 |