본문 바로가기

CentOS/Study

[Study18]Linux 알면 좋은 유용한 관리 명령어 - who / w / exit

반응형

who 명령어

who 명령어를 사용하면 누가 로그인되어 있는지, 어떤 장치를 사용하고 있는지, 언제 로그인했는지, 어디에서 로그인했는지 등의 정보를 확인할 수 있습니다. /var/run/utmp 파일의 내용을 출력합니다.

 

[명령어 형식]

# who      /* 현재 시스템에 접속 중인 모든 사용자 */
# who -r   /* 현재 사용자의 Runlevel 확인 */
# who am i /* 로그인한 사용자 정보 확인 */
# who -H   /* 헤드라인과 같이 출력 */
# whoami   /* 현재 사용자명 확인 , 유효사용자를 확인한다*/

who 명령어는 리눅스 환경에서 시스템 관리에 필수적인 도구입니다.

이 명령어는 현재 시스템에 로그인한 사용자의 로그인 이름, 터미널 라인 및 로그인 시간을 포함한 정보를 표시합니다. who 명령어에는 이러한 기본 정보를 비롯하여 출력을 사용자 정의할 수 있는 여러 옵션이 있습니다.

예를 들어 -r 옵션은 시스템의 현재 runlevel을 표시하는 데 사용할 수 있으며, -H 옵션은 출력과 함께 헤드라인을 표시하는 데 사용할 수 있습니다.

또한, whoami 명령어를 사용하면 현재 사용자의 이름을 표시할 수 있습니다.

이러한 옵션을 사용하여 시스템 관리자는 시스템의 현재 상태와 사용 상황에 대한 자세한 정보를 얻을 수 있습니다.

who 명령어는 강력한 도구이지만, 사용할 때 주의해야 합니다.

특히, 시스템 관리자는 시스템에 현재 로그인한 사용자에 대한 정보를 표시하는 것의 보안적인 영향을 인식해야 합니다.

이러한 정보는 공격자가 시스템에 무단으로 액세스하는 데 사용될 수 있습니다.

이러한 위험을 피하기 위해 who 명령어에 대한 액세스를 인가된 사용자에게만 제한하고, 의심스러운 활동을 감지하기 위해 사용을 주의 깊게 모니터링해야 합니다.

요약하면, who 명령어는 리눅스 환경에서 시스템 관리에 다양한 용도로 사용되는 유용한 도구입니다.

여러 옵션을 사용하여 현재 시스템에 로그인한 사용자와 시스템의 현재 상태와 사용 상황에 대한 자세한 정보를 얻을 수 있습니다.

그러나 who 명령어를 사용할 때 주의할 필요가 있으며, 시스템에 현재 로그인한 사용자에 대한 정보를 표시하는 것과 관련된 보안 위험성을 인식해야 합니다.

 

[명령어 옵션]

옵션 설명
-i idle time 과 함께 사용자 출력
-m who 명령을 실행한 사용자 표시
-q 사용자 이름과 사용자수 출력
-w 각 사용자의 메시지 설정 상태 출력
-T 각 사용자의 메시지 설정 상태 출력
-H 헤드라인 정보 표시
-r run-level 확인

 

who 명령어 실습

192.168.10.252 서버에 설치되어 있는 telnet 서비스로 접속을 하여 현재 사용자에 대하여 확인해보자.

 

[TERM1] fedora 사용자의 윈도우

# telnet 192.168.10.252 
-> fedora 사용자로 로그인

$ id
uid=1001(fedora) gid=1001(fedora) groups=1001(fedora) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

위 명령을 실행하면 현재 로그인한 사용자의 ID가 출력됩니다. 다음으로, 아래 명령어를 실행하여 현재 디렉터리가 어디인지 확인해보겠습니다.

 

$ pwd
/home/fedora

pwd 명령은 "print working directory"의 약자로, 현재 작업 중인 디렉터리의 전체 경로를 출력합니다.

마지막으로, tty 명령어를 사용하여 현재 터미널이 어떤 것인지 확인해보겠습니다.

 

$ tty
/dev/pts/[NUMBER]
[NUMBER]는 부여받는 터미널 번호에 따라 다르다.

위 명령을 실행하면 부여받은 터미널 번호가 출력됩니다. [NUMBER]는 부여받는 터미널 번호에 따라 다릅니다.

 

[TERM2] root 사용자의 윈도우

이번에는 root 사용자로 로그인한 후 who 명령어를 실행해보겠습니다.

# who
root     pts/1        Feb 10 15:47 (192.168.0.1)          /* Putty로 로그인하여 작업중 */
root     pts/2        Feb 10 16:34 (192.168.0.1)
fedora   pts/[NUMBER] Feb 10 22:50 (192.168.0.1)
root     :0           Feb 10 12:44
root     pts/3        Feb 10 21:33 (192.168.0.1)

위 명령을 실행하면 다음과 같은 결과가 출력됩니다.

 

(명령어 출력 결과 해석)
-------------------+--------------------------
필드 설명            |
-------------------+--------------------------
root               | 사용자 정보
pts/1              | 제어 터미널
Feb 10 15:47       | 로그인 시간
192.168.0.1        | 원격호스트
-------------------+--------------------------

위 결과에서 root 사용자가 pts/1 터미널에서 Putty를 사용하여 작업 중이라는 것을 알 수 있습니다.

 

who 명령어 실습

이번에는 ssh 명령어를 사용하여 root 사용자로 로그인한 후 who 명령어를 실행해보겠습니다.

# ssh root@192.168.10.252
The authenticity of host '192.168.10.252 (192.168.10.252)' can't be established.
RSA key fingerprint is 3b:25:5b:9a:ae:0f:ba:fc:85:66:73:d4:fc:e2:78:c6.
Are you sure you want to continue connecting (yes/no)? yes 
Warning: Permanently added '192.168.10.252' (RSA) to the list of known hosts.
root@172.16.9.249's password: (centos)
Last login: Thu Jan  9 11:38:41 2014 from 192.168.10.200

위 명령어를 실행하면 root 사용자로 로그인할 수 있습니다.

 

# hostname
server2.example.com

hostname 명령어를 실행하면 현재 호스트 이름이 출력됩니다.

 

# id
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

위 명령을 실행하면 root 사용자의 UID와 GID, 그리고 소속 그룹 등의 정보가 출력됩니다.

 

# tty
/dev/pts/4

tty 명령어를 실행하면 현재 터미널이 /dev/pts/4임을 확인할 수 있습니다.

 

마지막으로, 다시 who 명령어를 실행해보겠습니다.

# who
root     :0           2014-02-12 22:29
root     pts/1        2014-02-12 22:29 (:0.0)
root     pts/2        2014-02-13 10:29 (linux205.example.com)
root     pts/3        2014-02-13 10:31 (linux206.example.com)
root     pts/4        2014-02-13 10:29 (linux249.example.com)
root     pts/5        2014-02-13 10:29 (linux208.example.com)
root     pts/6        2014-02-13 10:29 (linux218.example.com)
root     pts/7        2014-02-13 10:29 (linux201.example.com)
root     pts/8        2014-02-13 10:30 (linux207.example.com)
root     pts/9        2014-02-13 10:30 (linux219.example.com)
root     pts/10       2014-02-13 10:30 (linux214.example.com)
root     pts/11       2014-02-13 10:31 (linux200.example.com)
..... (중략) .....

# exit 
#

위 명령을 실행하면 현재 시스템에 접속 중인 모든 사용자의 정보를 확인할 수 있습니다.

 

w 명령어

w 명령어는 시스템에 로그인한 사용자가 현재 어떤 명령어를 실행 중인지 확인하는 명령어입니다.

이 명령어는 /proc 디렉토리에서 사용자 정보와 실행 중인 명령어 정보를 추출합니다.

w 명령어를 사용하면 사용자 이름, 로그인 시간, 유휴 시간, TTY, 로그인 위치, 현재 실행 중인 명령어 등의 정보를 확인할 수 있습니다. 이 정보는 현재 시스템 상태를 파악하는 데 도움이 됩니다.

w 명령어는 w 뒤에 사용자 이름을 추가해 해당 사용자가 현재 실행 중인 명령어만을 확인할 수도 있습니다.

예를 들어, w user01 명령어를 입력하면 user01 사용자가 실행 중인 명령어 정보만을 확인할 수 있습니다.

w 명령어는 서버의 보안 강화를 위해 악의적인 사용자를 감시하는 데에도 사용됩니다.

w 명령어를 이용해 현재 시스템에 로그인한 사용자 정보를 확인하고, 악의적인 사용자를 찾아내는 등의 작업을 수행할 수 있습니다.

 

[명령어 형식]

# w

위 명령어는 현재 로그인한 사용자의 활동을 보여줍니다.

추가로, 아래와 같이 사용자 이름을 지정하여 해당 사용자의 활동을 볼 수도 있습니다.

 

# w user01

이 명령어는 시스템 사용자들 간의 활동 모니터링을 위해 사용됩니다. 시스템 관리자에게는 매우 유용한 도구입니다.

 

# w
10:34:14 up 28 min,  3 users,  load average: 0.00, 0.01, 0.01
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
root     :0                        10:07   ?xdm?  12.60s  0.19s /usr/bin/gnome-ses
root     pts/1    :0.0             10:10    0.00s  0.03s  0.00s w
root     pts/3    :0.0             10:27    7:00   0.02s  0.02s bash

시스템이 28분 동안 구동 중이며 현재 3명의 사용자가 로그인되어 있습니다.

로드 평균은 0.00, 0.01, 0.01로 낮은 수준입니다.

"root" 사용자는 그래픽 인터페이스에 로그인되어 있으며, 두 개의 터미널 세션에도 로그인되어 있습니다.

첫 번째 터미널 세션은 대기 중이고, 두 번째 세션은 "bash" 쉘을 실행 중입니다.

"w" 명령어는 시스템 사용량과 사용자 활동 정보를 제공합니다.

 

'w' 명령어 실습

이번 섹션에서는 서로 다른 운영체제에서 다른 사용자 계정으로 'w' 명령어를 사용하는 방법을 실습해봅니다.

 

[TERM1] root 사용자 윈도우

우선 putty 프로그램을 열고, 리눅스 서버(192.168.10.252)에 연결합니다. 다음 로그인 정보를 사용하여 로그인합니다:

-> putty 프로그램을 통해 리눅스 서버(192.168.10.252)에 접속
login : root
passwd : (redhat)

 

[TERM2] fedora 사용자 윈도우

Fedora 사용자는 터미널에서 다음 명령어를 입력합니다:

# ssh fedora@192.168.10.252

 

'fedora' 사용자의 비밀번호를 입력하면 로그인됩니다. 이후, 다음 명령어를 사용하여 웹 콘솔을 활성화합니다.

systemctl enable --now cockpit.socket

 

[TERM3] user01 사용자 윈도우

user01 계정이 있는 Windows 컴퓨터의 터미널을 열고 다음 명령어를 입력하여 로그인합니다:

# telnet localhost

 

로그인 후, 다음 명령어를 사용하여 '/etc/passwd' 파일을 엽니다.

$ vi /etc/passwd

 

[TERM4] root 사용자 윈도우(분석하는 터미널)

마지막으로, root 권한을 가진 터미널을 열고 'w' 명령어를 입력하여 시스템의 모든 사용자 계정 상태를 확인합니다.

# w
10:43:47 up 38 min,  7 users,  load average: 0.00, 0.03, 0.01
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
root     :0                        10:07   ?xdm?  14.78s  0.19s /usr/bin/gnome-ses
root     pts/1    :0.0             10:10    2:56   0.03s  0.00s ssh fedora@localho
root     pts/3    :0.0             10:27   48.00s  0.02s  0.00s telnet localhost
root     pts/2    172.16.9.1       10:39    3:43   0.01s  0.01s -bash
fedora   pts/4    localhost.locald 10:40    2:51   0.01s  0.01s -bash
user01   pts/5    localhost.locald 10:42   48.00s  0.04s  0.03s vim /etc/passwd
root     pts/6    :0.0             10:43    0.00s  0.01s  0.00s w

이 명령어는 사용자 이름, TTY 장치, 로그인 시간 및 실행 중인 프로세스와 같은 정보를 표시합니다.

 

[EX2] 악의적인 사용자 로그아웃 시키기

[TERM4] 관리자 윈도우

w 명령어를 사용해서 현재 시스템에 로그인한 사용자 정보를 확인할 수 있습니다.

이를 이용해서 악의적인 사용자를 찾아내거나 감시하는 데에도 사용할 수 있습니다.

 

# w
10:43:47 up 38 min,  7 users,  load average: 0.00, 0.03, 0.01
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
root     :0                        10:07   ?xdm?  14.78s  0.19s /usr/bin/gnome-ses
root     pts/1    :0.0             10:10    2:56   0.03s  0.00s ssh fedora@localho
root     pts/3    :0.0             10:27   48.00s  0.02s  0.00s telnet localhost
root     pts/2    172.16.9.1       10:39    3:43   0.01s  0.01s -bash
fedora   pts/4    localhost.locald 10:40    2:51   0.01s  0.01s -bash
user01   pts/5    localhost.locald 10:42   48.00s  0.04s  0.03s vim /etc/passwd
root     pts/6    :0.0             10:43    0.00s  0.01s  0.00s w

사용자 이름, TTY 장치, 로그인 시간, 실행 중인 프로세스 등의 정보를 확인할 수 있습니다.

 

# w user01
10:48:23 up 42 min,  7 users,  load average: 0.00, 0.02, 0.00
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
user01   pts/5    localhost.locald 10:42    5:24   0.04s  0.03s vim /etc/passwd

특정 사용자에 대한 정보를 확인하고 싶을 때는 w 명령어 뒤에 사용자 이름을 지정해 주면 됩니다.

 

# while true
> do
> echo
> echo "============`date`============"
> w user01
> sleep 2
> done

while 루프를 사용하여 주기적으로 w 명령어를 실행하면 사용자 정보를 실시간으로 감시할 수 있습니다.

 

# ps -u user01    (# ps -fu user01)
PID TTY          TIME CMD
 8064 pts/5    00:00:00 bash
 8100 pts/5    00:00:00 vim

특정 사용자가 실행 중인 프로세스 정보를 확인하고 싶을 때는 ps 명령어를 사용하면 됩니다.

 

# kill -9 8064

특정 사용자의 프로세스를 강제로 종료하고 싶을 때는 kill 명령어를 사용하면 됩니다.

위의 예시들을 이용해서 악의적인 사용자를 찾아내거나, 악의적인 사용자가 실행한 프로세스를 종료할 수 있습니다.

 

원격서버에 접속하는 방법은 다음과 같습니다.

접속 후에는 서버의 이름, 사용자, 작업 디렉토리를 확인할 수 있습니다.

# ssh 172.16.9.252
# hostname
# id
# pwd

 

관리 서버에 접속하는 방법은 다음과 같습니다.

자신이 관리하는 서버에 접속하여 오늘 로그인/로그아웃한 사용자 정보를 확인할 수 있습니다.

또한, 현재 접속되어 있는 사용자와 해당 사용자가 수행하는 명령어도 확인할 수 있습니다.

 

# last
# who
# w

위의 방법을 통해 빠르고 쉽게 서버에 접속하고 사용자 정보를 확인할 수 있습니다.

이렇게 유용한 명령어들을 알아두면 서버 관리에 많은 도움이 될 것입니다.

 

exit 명령어

exit 명령어는 현재 실행 중인 프로세스(현재 쉘)를 종료하는 데 사용됩니다.

종료 시에는 종료 상태값을 반환합니다.

종료 상태값은 이전에 실행한 명령어가 성공적으로 실행되었는지 여부를 나타내며, 0은 성공, 1부터 255까지는 비정상적인 종료를 나타냅니다.

 

[명령어 형식]

# exit [Number] /* 값을 지정해준다면 0은 정상종료, 1~255는 비정상 종료 */

위의 명령어는 프로그램의 종료를 제어하는 데 사용됩니다.

이 명령어를 사용하여 종료 코드를 지정할 수 있습니다. 종료 코드를 지정하지 않으면 기본값으로 0이 사용됩니다.

이 명령어는 프로그램을 종료하기 전에 설정해주어야 합니다.

또한, 종료 상태를 나타내기 위한 값으로 0 이외의 숫자를 사용할 수 있습니다.

 

서브 쉘 종료 해보자

예시 코드에서, 서브 쉘을 종료하는 방법에 대한 예시를 볼 수 있습니다.

"ps" 명령어를 사용하여 현재 실행 중인 프로세스를 보여주고, PID 값이 21224인 쉘 하나만 실행 중임을 확인할 수 있습니다.

# ps
PID TTY          TIME CMD
21224 pts/11   00:00:00 bash

 

두 번째 "bash" 명령어로 나타냅니다.

# bash

 

"ps"를 다시 실행하면 두 개의 쉘이 실행 중인 것을 확인할 수 있습니다.

두 번째 쉘의 PID는 21316입니다.

# ps
PID TTY          TIME CMD
21224 pts/11   00:00:00 bash
21316 pts/11   00:00:00 bash

 

서브 쉘을 종료하려면 "exit" 명령어를 입력하면 됩니다.

# exit
exit

 

"ps"를 다시 실행하면 PID 값이 21224인 원래 쉘로 돌아온 것을 확인할 수 있습니다.

# ps
PID TTY          TIME CMD
21224 pts/11   00:00:00 bash

 

서버에 접속 후 로그 아웃

서버에 접속하는 방법은 다양합니다.

이 예시에서는 ssh 명령어를 사용하여 172.16.9.252 서버에 접속하는 방법을 보여줍니다.

# ssh 172.16.9.252
root 사용자로 접속합니다.

# hostname
접속한 서버의 호스트 이름을 확인할 수 있습니다.

# id
현재 사용자의 아이디를 확인할 수 있습니다.

# pwd
현재 디렉토리의 경로를 확인할 수 있습니다.

# ps
현재 실행 중인 프로세스 정보를 확인할 수 있습니다.

# exit
서버에서 로그아웃합니다.

 

서버에 접속하는 방법은 매우 중요합니다.

정확한 접속 방법을 알면 서버 관리에 큰 도움이 됩니다. 또한, 서버에서 실행 중인 프로세스를 확인하고, 로그아웃하는 방법도 알아 놓으면 유용합니다.

이 예시에서는 su 명령어를 사용하여 다른 사용자로 전환하는 방법에 대해 알아보겠습니다.

보안 상의 이유로, 관리자 권한으로 로그인한 사용자가 다른 사용자로 전환하여 명령어를 실행해야 할 경우가 있습니다.

이때 su 명령어를 사용합니다.

su 명령어를 사용하여 다른 사용자로 전환하면, 해당 사용자의 권한으로 명령어를 실행할 수 있습니다.

이때, 전환 후에는 다시 원래 사용자로 전환해야 합니다.

다음은 su 명령어를 사용하여 다른 사용자로 전환하고, 다시 원래 사용자로 전환하는 예시입니다.

 

# su – user01
$ ps
$ exit
#

위 예시에서, su 명령어를 사용하여 user01 사용자로 전환합니다.

이후 ps 명령어를 사용하여 현재 실행 중인 프로세스를 확인합니다.

이후, exit 명령어를 사용하여 전환된 사용자인 user01에서 다시 원래 사용자로 전환합니다.

su 명령어를 사용하여 다른 사용자로 전환하는 방법으로는 다른 사용자의 비밀번호를 입력하는 방법과, sudo 명령어를 사용하여 관리자 권한으로 명령어를 실행하는 방법이 있습니다.

반응형