본문 바로가기
모의해킹 침해대응 과정/Linux 기초

리눅스 기초때기 2일차. 기타 관리용 명령어 / WC, SU, SUDO,LAST,WHO,W

by 알거음슴 2021. 3. 31.

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 같은 경우는 실시간 모니터링시 아주 많이 활용될 수 있음으로! 항상 익혀두도록 하자!