Backend/LINUX

[Chapter1] 리눅스의 추억14(feat. 막힘없이 실무까지)

GreatSaiyaman 2022. 7. 31. 22:42

본 포스팅은 2020년에 작성했던 포스팅입니다, blog를 이관하게 되어 재포스팅 하였습니다.


아래 포스팅은 제가 수강하였던 동영상 강의, 각종 블로그 혹은 공식 홈페이지에서 습득한 자료들 제 나름대로 재구성하여 포스팅 한 자료입니다. 잘못된 내용이 있을 수도 있습니다. 최대한 글 읽으시는 시간이 헛되지 않게 검토하여 올리겠습니다. 편하게, 재미있게 제 글을 읽어주셨으면 좋겠습니다. 틀린 부분이 있으면 댓글이나 메일 주시면 수정하여 놓겠습니다. 제 글을 읽어주셔서 감사합니다^^

- 목차 -

Chapter1. 리눅스 맛보기

Chapter2. 리눅스 활용하기

Chapter3. 리눅스 개발 및 운영하기


안녕하세요. 요새 지속적으로 리눅스에 대한 포스팅을 하고 있는데요.

리눅스에 대해 포스팅하며 스스로 더 확실하게 깨우친 사실은 ... 리눅스의 세계는 정말 끝이 없다는 것입니다.

그래서 이런 생각이 들었습니다.

"내가 과연 리눅스에 관련된 어떠한 작업을 한다고 자신 있게 말할 수가 있을까?"

라는 생각이요.하지만 자주 쓰는 명령어는 정해져 있다고 생각을 해보면 또

"으음.. 그래.. 대부분 이러한 종류의 명령어만 쓰니까..."

라고 생각해 볼 수도 있습니다만...

요새 들어서 무언가를 안다고 확실하게 말하는 것이 이렇게 힘든 것이었나?라는 생각을 해봅니다 ㅎㅎ;;

Chapter1에 대한 포스팅이 거의 막바지에 이르렀습니다.

조금 더 포스팅을 한 후 기존에 이어나가던 알고리즘 관련된 포스팅을 지속적으로 연재할 계획입니다.

Chapter2는 아마도 쉘 스크립트를 위주로 실무에서 사용하게 될 배치 스크립트나, 크론 텝에 등록할 스크립트 위주로 짜보는 포스팅이 위주가 되지 않을까 싶습니다.

아마 그래서 Chapter1에서 습득한 이론적인 내용을 바탕으로 Chapter2에서는 적극적으로 실무에 도입하여 실질적으로 어떠한 문제가 있고 어떠한 명령어가 어떠한 식으로 응용되는지와 같은 내용이 주를 이룰 듯합니다.

오늘은, 사용자 모니터링에 대해서 알아볼까 합니다.

예전에 리눅스는 멀티유저를 고려한 접속 환경이라고 말씀드린 적이 있습니다.

그렇다면, 여러 명이 동시에 접속을 했다가 나갔다가 할 수도 있다는 건데요.

그런 부분이 궁금할 때 사용하실 명령어가 있습니다. 바로 아래의 명령어입니다.

(35). 사용자 모니터링

(35)-1. 현재 접속해있는 사람 확인하기

brandon@brandon-VirtualBox:~$ users
brandon brandon

제가 현재 터미널창을 이용해서 Virtual Box에 있는 리눅스에 로컬에서 두 개의 터미널창을 띄워서 연결해두고 있는데요. 두 터미널 창 모두 brandon이라는 계정을 이용해서 연결하여 사용하고 있습니다. 그래서 users라고 명령어를 입력하면 현재 실시간으로 접속해 있는 사람이 나옵니다. 명령어가 직관적인 것 같네요.

 

(35)-2.who

brandon@brandon-VirtualBox:~$ who
brandon  pts/0        2020-09-18 14:46 (192.168.232.1)
brandon  :0           2020-09-18 14:46 (:0)
brandon@brandon-VirtualBox:~$ who -H
NAME     LINE         TIME             COMMENT
brandon  pts/0        2020-09-18 14:46 (192.168.232.1)
brandon  :0           2020-09-18 14:46 (:0)
 
 

who 명령어는 누가 언제 접속했는지 조금 더 자세하게 알려줍니다.

pts는 외부 접속을 위한 가상 터미널을 이야기합니다.

tty 단어도 자주 보셨을 것 같은데요. 간단하게 설명을 드리면 아래와 같습니다.

tty: Tele type writer: 콘솔 및 터미널 환경을 뜻합니다.

pty: Psedo terminal: 가상 터미널 환경을 뜻합니다.

pts: Psedo terminal slave: 원격 터미널 환경을 뜻합니다.

(35)-3. 위에서 언급한 2번보다 조금 더 자세히 알고 싶으신 경우에는 w 한 글자를 치시면 아래와 같이 나옵니다.

brandon@brandon-VirtualBox:~$ w
 15:55:41 up  1:13,  2 users,  load average: 0.06, 0.03, 0.00
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
brandon  pts/0    192.168.232.1    14:46    0.00s  0.16s  0.01s w
brandon  :0       :0               14:46   ?xdm?  26.17s  0.00s /usr/lib/gdm3/gdm-x-session --run-script env GNOME_SHELL_SESSION_MODE=ubuntu gnome-session --s​
 
 

이곳에서는 서버의 현재 시간, 서버 부팅 이후 시스템 작동시간, 서버 총 접속자 수 접속자 별 서버 평균 부하율 등등을 알 수 있습니다.

(35)-4. 누가 언제 어디서부터 로그인했는지, 하고 있는지 로그인 상세정보

brandon@brandon-VirtualBox:~$ last
brandon  :0           :0               Fri Sep 18 14:46   still logged in
brandon  pts/0        192.168.232.1    Fri Sep 18 14:46   still logged in
reboot   system boot  4.15.0-117-gener Fri Sep 18 14:42   still running
brandon  pts/19       192.168.232.1    Fri Sep 18 03:28 - 14:42  (11:13)
brandon  pts/18       :0               Thu Sep 17 20:12 - 14:42  (18:29)
brandon  pts/4        192.168.232.1    Thu Sep 17 14:44 - 14:42  (23:57)
brandon  tty7         :0               Thu Sep 17 14:43 - down   (23:58)
reboot   system boot  4.15.0-117-gener Thu Sep 17 14:43 - 14:42  (23:59)
brandon  pts/6        192.168.232.1    Wed Sep 16 20:12 - crash  (18:30)
brandon  tty7         :0               Wed Sep 16 20:03 - crash  (18:39)
reboot   system boot  4.15.0-117-gener Wed Sep 16 20:03 - 14:42 (1+18:38)
brandon  tty7         :0               Wed Sep 16 19:48 - crash  (00:15)
reboot   system boot  4.15.0-117-gener Wed Sep 16 19:43 - 14:42 (1+18:58)
brandon  pts/18       192.168.58.1     Tue Sep  8 22:04 - crash (7+21:38)
harry    pts/19       192.168.58.1     Tue Sep  8 22:02 - crash (7+21:40)
brandon  pts/18       192.168.58.1     Tue Sep  8 19:32 - 22:04  (02:31)
brandon  tty7         :0               Tue Sep  8 19:30 - crash (8+00:13)
reboot   system boot  4.15.0-112-gener Tue Sep  8 19:29 - 14:42 (9+19:12)​
 
 

3번까지의 명령어들이 현재 접속되어 있는 사용자들에 대한 정보를 출력하는 명령어라고 한다면, last 명령어는 지난 로그인의 흔적들을 출력해 줍니다. 우와. 리눅스를 포스팅하면서 여러 가지 실험해보려고 접속했던 기록들이 다 나오네요 덜덜

(35)-5. 특정 사용자 추적

brandon@brandon-VirtualBox:~$ last harry
harry    pts/19       192.168.58.1     Tue Sep  8 22:02 - crash (7+21:40)

wtmp begins Tue Sep  8 19:29:21 2020

계정의 이름을 알고 있다면, last 뒤에 인자를 넘겨서 위와 같이 특정 사용자에 대한 로그인 기록을 살펴보는 것도 할 수 있습니다. 그리고 이런 것이 가능하다면 로그인 실패에 대한 추적도 가능하다는 것을 유추해볼 수 있을 텐데요.

(35)-6. 로그인 실패 추적하기

brandon@brandon-VirtualBox:~$ sudo lastb
[sudo] password for brandon: 
Sorry, try again.
[sudo] password for brandon: 
brandon  ssh:notty    192.168.232.1    Fri Sep 18 03:28 - 03:28  (00:00)
randon   ssh:notty    192.168.232.1    Wed Sep 16 20:12 - 20:12  (00:00)
Brandon  ssh:notty    192.168.232.1    Wed Sep 16 20:12 - 20:12  (00:00)
Brandon  ssh:notty    192.168.232.1    Wed Sep 16 20:12 - 20:12  (00:00)
Brandon  ssh:notty    192.168.232.1    Wed Sep 16 20:11 - 20:11  (00:00)
Brandon  ssh:notty    192.168.232.1    Wed Sep 16 20:11 - 20:11  (00:00)
Brandon  ssh:notty    192.168.232.1    Wed Sep 16 20:11 - 20:11  (00:00)
Brandon  ssh:notty    192.168.232.1    Wed Sep 16 20:11 - 20:11  (00:00)
brandon  tty7         :0               Wed Sep 16 20:03 - 20:03  (00:00)
brandon  tty7         :0               Wed Sep 16 19:48 - 19:48  (00:00)
brandon  tty7         :0               Tue Sep  8 19:30 - 19:30  (00:00)
brandon  tty7         :0               Tue Sep  8 19:29 - 19:29  (00:00)

btmp begins Tue Sep  8 19:29:34 2020

lastb라는 명령어를 사용하면 위와 같이 로그인에 실패한 흔적들이 나오게 됩니다.

제가 손이 삐꾸라서 로그인에 실패한 흔적들이 나오네요 ㅎㅎㅎ;;

누군가가 계속 남의 아이디로 로그인을 하려고 한다거나 그런 것을 추적하기에 좋을 것입니다.

이런 것이 가능하다면, 사용자별로 무엇을 했는지 추적할 수 있지 않을까요?

가능합니다!

(35)-7. 사용자 별 명령어 추적

brandon@brandon-VirtualBox:~$ sudo find / -name ".bash_*" 2> /dev/null
/snap/core/9993/etc/skel/.bash_logout
/snap/core18/1885/etc/skel/.bash_logout
/etc/skel/.bash_logout
/home/brandon/.bash_logout
/home/brandon/.bash_history
/home/harry/.bash_logout

위에 보시면 .bash_history라는 파일이 보이실 겁니다.

편집기를 이용해서 들어가 보면....

brandon@brandon-VirtualBox:~$ vim .bash_history
ps -ef | grep "\dev"
ps -ef | grep "/dev"
ps -ef | grep 8080
ps -ef | grep ":80"
ps -ef | grep ":80" | grep -v "grep"
ps -ef | grep 8080  | grep -v "grep"
ps -ef | grep 8080
ps -ef | grep 8080  | grep -v "grep"
ls -l
ls -l | sort -k2n
ls -l | sort -k2n -k5n
ls -l | sort -k2n -k5n > sort-result.txt
ls
vim sort-result.txt
sort -k1n -k2n < sort-result.txt
sort -k1 -k2 < sort-result.txt
sort -k1n -k2n < sort-result.txt
ls -al | sort -k1n -k2n
ls -lh | sort -k1n -k2n
ls -lh | sort -k1n -k2n > test-search-directory-result.txt
ls -al test-search-directory-result.txt
cat test-search-directory-result.txt
.
.
.

정말 옛날에 썼던 명령어부터 나옵니다. 만약, 마지막부터 보고 싶으시면..... tail 명령어를 활용하시면 되는데요.

그냥 tail을 쓰셔도 되고 실시간으로 데이터가 찍히는 못 부을 보고 싶으신 분은 -f 명령어를 같이 주시면 됩니다.

저는 제목도 같이 출력되는 걸 좋아해서 verbose 옵션을 같이 줘볼게요.

brandon@brandon-VirtualBox:~$ tail -fv .bash_history
==> .bash_history <==
cat /etc/apt/sources.list
dls -l /var/lib/apt/lists
ifconfig
ls -l /etc/apt/apt.conf.d
cat /etc/apt/sources.list
apt update
sudoapt update
sudo apt update
sudo apt upgrade
dpkg -l

bash_history의 경우 명령어의 사용 기록이 메모리에 올라가있다가 사용자가 나간 후에 bash_history에 쌓인다고 합니다. 아마 명령어에 대한 흔적을 정확하게 사용자가 나간 후에 기록하기 위해서 가 아닌가 싶네요 ㅎㅎ.

(35)-8. 명령어 실시간 모니터링에 이어서, 로그인 실시간 모니터링하기

tail -f /var/log/auth.log

brandon@brandon-VirtualBox:/var/log$ tail -f auth.log
Sep 18 22:30:06 brandon-VirtualBox sudo: pam_unix(sudo:session): session closed for user root
Sep 18 22:30:37 brandon-VirtualBox sudo:  brandon : TTY=pts/0 ; PWD=/etc ; USER=root ; COMMAND=/usr/bin/find / -name .bash_*
Sep 18 22:30:37 brandon-VirtualBox sudo: pam_unix(sudo:session): session opened for user root by brandon(uid=0)
Sep 18 22:30:38 brandon-VirtualBox sudo: pam_unix(sudo:session): session closed for user root
Sep 18 22:31:38 brandon-VirtualBox sudo:  brandon : TTY=pts/0 ; PWD=/home/brandon ; USER=root ; COMMAND=/usr/bin/find / -name .bash_*
Sep 18 22:31:38 brandon-VirtualBox sudo: pam_unix(sudo:session): session opened for user root by brandon(uid=0)
Sep 18 22:31:39 brandon-VirtualBox sudo: pam_unix(sudo:session): session closed for user root
Sep 18 22:45:48 brandon-VirtualBox sudo:  brandon : TTY=pts/0 ; PWD=/var/log ; USER=root ; COMMAND=/usr/bin/find . -name log
Sep 18 22:45:48 brandon-VirtualBox sudo: pam_unix(sudo:session): session opened for user root by brandon(uid=0)
Sep 18 22:45:48 brandon-VirtualBox sudo: pam_unix(sudo:session): session closed for user root

 

sudo에 대한 검증 기록까지 전부 조회할 수 있습니다.

다음 시간에는 시스템 로그에 대한 분석을 도와주는 툴에 대해서 알아보도록 하겠습니다.

감사합니다.

Thanks for reading!