Journey to Security/리눅스

사용자/그룹/로그인 관련 명령어

Cordilog 2026. 3. 19. 17:28

1. who : 로그인 사용자

  • 시스템에 로그인한 사용자를 확인
  • 로그파일 중에서 /var/run/utmp 파일을 참조
  • 사용자가 로그인을 할 때 /var/run/utmp 파일에 정보가 기록된다. 

 

[linuxadmin@localhost ~]$ ll /var/run/utmp
-rw-rw-r--. 1 root utmp 2304  3월 19 14:10 /var/run/utmp
[linuxadmin@localhost ~]$ strace
-bash: strace: 명령어를 찾을 수 없음
[linuxadmin@localhost ~]$ sudo dnf -y install strace

[linuxadmin@localhost ~]$ strace who 2> /dev/stdout | grep var

 

[linuxadmin@localhost ~]$ strace who 2> /dev/stdout | grep utmp

 

who는 /var/run/utmp 파일을 참고한다는 것을 알 수 있다. 

 

2. w : 로그인 상태

 

각 필드의 의미

  • 14:24:03 : 현재 시간
  • up  5:27 : 시스템 가동 시간 5시간 27초
  • 2 users : 현재 로그인 사용자 수
  • load average : 0.00, 0.00, 0.00      -> /proc/loadavg
    • 첫 번째 : 최근 1분 평균 부하
    • 두 번째: 최근 5분 평균 부하
    • 세 번째: 최근 15분 평균 부하
    • [linuxadmin@localhost ~]$ cat /proc/loadavg 로 확인 가능
      0.00 0.00 0.00 1/240 429201

 

 

3. users : 사용자 목록

시스템에 로그인한 사용자의 정보를 출력한다.

 

[linuxadmin@localhost ~]$ users
linuxadmin linuxadmin
[linuxadmin@localhost ~]$ sudo useradd user1
[sudo] linuxadmin의 암호:
[linuxadmin@localhost ~]$ sudo passwd user1
user1 사용자의 비밀 번호 변경 중
새 암호:

새 암호 재입력:
passwd: 모든 인증 토큰이 성공적으로 업데이트 되었습니다.
[linuxadmin@localhost ~]$ users
linuxadmin linuxadmin user1

 

새로 만든 사용자 user1로 ssh 로그인

 

 

[linuxadmin@localhost ~]$ who
linuxadmin tty1         2026-03-19 08:56
linuxadmin pts/0        2026-03-19 09:02 (192.168.100.1)  --> 접속한 호스트의 ip 주소
user1    pts/1        2026-03-19 14:31 (192.168.100.1)  --> 접속한  호스트의 ip 주소

 

4. logname : 로그인 이름

로그인한 사용자의 이름을 출력한다.

[linuxadmin@localhost ~]$ logname
linuxadmin

 

[user1@localhost ~]$ logname
user1

 

5. last : 로그인 기록

정상적으로 로그인을 하거나 재부팅하면 그 정보를 /var/log/wtmp 파일에 저장한다.

last 명령은 /var/log/wtmp 파일을 참조해서 출력한다. 

 

last가 어떤 파일을 참조하는지 찾아본다. 

[linuxadmin@localhost ~]$ strace last 2> /dev/stdout | grep /var

 

/var/log/wtmp 파일을 참조하는 것을 알 수 있다. 이 파일은 바이너리 파일(data 파일)이라서 cat으로 확인할 수 없음. 


[linuxadmin@localhost ~]$ last

 

user1    pts/1        192.168.100.1    Thu Mar 19 14:31   still logged in

linuxadm pts/1        192.168.100.1    Thu Mar 19 09:53 - 14:10  (04:17)

 

-> linuxadmin 계정이 pts/1 터미널로 192.168.100.1에서 접속했고, 09:30에 로그인해서 14:10에 로그아웃했고 총 사용 시간은 4시간 17분이다.

 

reboot   system boot  5.14.0-611.5.1.e Thu Mar 19 08:56   still running

 

-> 시스템이 Thu Mar 19 08:56 에 부팅되었고, 현재까지 계속 실행중이다.

 

6. lastb : 실패 기록

[linuxadmin@localhost ~]$ sudo strace lastb 2> /dev/stdout |grep var

 

[linuxadmin@localhost ~]$ ll /var/log/btmp
-rw-rw----. 1 root utmp 1536 Mar 18 17:51 /var/log/btmp   -> read 권한이 없어서 에러가 난 것.

 

로그인 실패를 기록하고 실패한 로그인 정보를 확인할 수 있다.

보안 점검에 자주 사용된다. 

이 파일은 바이너리 형태로 저장되고 이 파일을 보는 전용 명령어가 lastb이다.

 

sudo 명령어는 리다이렉션을 사용할 수 없다.

[linuxadmin@localhost ~]$ sudo > /var/log/btmp
-bash: /var/log/btmp: Permission denied

 

/dev/null 파일을 원본 파일에 복사하면 0byte로 초기화 된다.

[linuxadmin@localhost ~]$ sudo cp /dev/null /var/log/btmp

[linuxadmin@localhost ~]$ ll /var/log/btmp

-rw-rw----. 1 root utmp 0 Mar 19 15:15 /var/log/btmp

 

권한이 없으므로 에러가 발생함

[linuxadmin@localhost ~]$ lastb
lastb: cannot open /var/log/btmp: Permission denied

 

[linuxadmin@localhost ~]$ ssh -l testuser 192.168.100.3
testuser@192.168.100.3's password:
Permission denied, please try again.

 

[linuxadmin@localhost ~]$ sudo lastb
testuser ssh:notty    192.168.100.3    Thu Mar 19 15:17 - 15:17  (00:00)
testuser ssh:notty    192.168.100.3    Thu Mar 19 15:17 - 15:17  (00:00)

 

btmp begins Thu Mar 19 15:17:14 2026

 

 

 

7. useradd : 사용자 추가

시스템에 사용자를 생성한다.

[linuxadmin@localhost ~]$ sudo useradd user1

[linuxadmin@localhost ~]$ sudo passwd user1

[linuxadmin@localhost ~]$ sudo useradd user2

[linuxadmin@localhost ~]$ sudo passwd user2
[linuxadmin@localhost ~]$ sudo useradd user3

[linuxadmin@localhost ~]$ sudo passwd user3

ssh user1@192.168.100.3

ssh user2@192.168.100.3

ssh user3@192.168.100.3

 

 

🔵사용자 정보 보는 법: 

1️⃣ 사용자의 홈 디렉터리가 /home/ 밑에 생성된다.

[linuxadmin@localhost ~]$ ls -F /home 

-F : 디렉터리는 슬래시로 표시

 

2️⃣ 사용자의 정보가 1줄 추가된다.

[linuxadmin@localhost ~]$ tail -4 /etc/passwd

 

3️⃣ 사용자의 그룹 정보가 1줄 추가된다. 

[linuxadmin@localhost ~]$ tail -n 4 /etc/group

 

4️⃣ 사용자의 비밀번호 정보가 1줄 추가된다. 

[linuxadmin@localhost ~]$ sudo tail -n 4 /etc/shadow -> 일반 사용자는 볼 수 없음.

 

5️⃣ 사용자의 그룹 비밀번호 정보가 1줄 추가된다.

[linuxadmin@localhost ~]$ sudo tail -n 4 /etc/gshadow -> 일반 사용자는 볼 수 없음.

 

6️⃣ 각 사용자의 메일함이 /var/spool/mail 디렉터리에 만들어진다.

[linuxadmin@localhost ~]$ ll /var/spool/mail

 

🔵 각 파일의 권한 정보

[linuxadmin@localhost ~]$ ll /etc/{passwd,shadow,group,gshadow}

 

8. usermod : 사용자 수정

사용자에 대한 정보를 변경한다.

usermod 명령어를 기반으로 사용자 정보를 변경한다.

[linuxadmin@localhost ~]$ sudo usermod -s /bin/sh user3

 

vi를 기반으로 변경하는 방법도 있음. : 

[linuxadmin@localhost ~]$ sudo vipw

- sudo vi /etc/passwd 로 직접 접근하는 것은 위험함. 반드시 vipw로 접근해야 함.

 

You have modified /etc/passwd.
You may need to modify /etc/shadow for consistency.
Please use the command 'vipw -s' to do so.

 

-> 사용자 이름 안바뀌었으면 무시해도 됨. 

 

9. userdel : 사용자 삭제

시스템에서 사용자를 삭제한다. 

사용자 삭제할 때는 로그아웃을 시켜야 함.


[linuxadmin@localhost ~]$ sudo userdel user1
userdel: user user1 is currently used by process 429705

 

로그아웃 방법

  • exit
  • logout
  • cntrl + D

[linuxadmin@localhost ~]$ sudo userdel -r user1
[linuxadmin@localhost ~]$ sudo userdel -r  user2
[linuxadmin@localhost ~]$ sudo userdel -r  user3

 

tail /etc/passwd로 확인

 

10. groupadd : 그룹 추가

[linuxadmin@localhost ~]$ sudo groupadd project1
[linuxadmin@localhost ~]$ sudo groupadd project2
[linuxadmin@localhost ~]$ sudo groupadd project3

 

/etc/group과 /etc/gshadow 에 추가됨.

** /etc/passwd, /etc/shadow에는 그룹 정보가 추가되지 않는다. (특정 사용자가 속한 그룹에 대한 정보는 나옴)

 

[linuxadmin@localhost ~]$ sudo tail -n 5 /etc/group

 

[linuxadmin@localhost ~]$ sudo tail -n 5 /etc/gshadow

 

 

11. groupmod : 그룹 수정

1. -g  : 그룹 id를 변경 : groupmod -g 그룹ID 대상그룹

[linuxadmin@localhost ~]$ sudo groupmod -g 1005 project3

 

2. -n : 이름 변경 : groupmod -n 새이름 원래이름

[linuxadmin@localhost ~]$ sudo groupmod -n prj3 project3

 

12. groupdel : 그룹 삭제

[linuxadmin@localhost ~]$ sudo groupdel project1

[linuxadmin@localhost ~]$ sudo groupdel project1

[linuxadmin@localhost ~]$ sudo groupdel project1

 

없는 그룹을 삭제하면 에러가 난다.

 

이때 메시지는 Standard Error(stderr)로 출력한다.

 

13. chage : 계정/비밀번호 만료 설정

1. 사용자 생성하면 시스템 변화:

  • /etc/{passwd,shadow,group,gshadow}에 1줄 추가됨
  • /home/user 홈 디렉터리 생성
  • /var/spool/mail/user 메일함 생성

[linuxadmin@localhost ~]$ sudo useradd user1

[linuxadmin@localhost ~]$ sudo passwd user1
Changing password for user user1.
...
passwd: all authentication tokens updated successfully.

 

 

계정 만료 날짜가 지나면 로그인이 금지된다. 

 

2. 사용자 계정 만료하는 2가지 방법

1️⃣ 사용자 생성 후 chage로 계정 만료 설정

  • sudo useradd 사용자ID
  • sudo change -E YYYY-MM-DD 사용자ID

[linuxadmin@localhost ~]$ sudo chage -l user1

현재 계정 만료일이 없음

 

[linuxadmin@localhost ~]$ sudo chage -E 2026-05-01 user1
[linuxadmin@localhost ~]$ sudo chage -l user1

 

2️⃣ 사용자를 생성할 때 계정만료를 설정할 수도 있다.

 

[linuxadmin@localhost ~]$ sudo useradd -e 2026-05-01 user2

[linuxadmin@localhost ~]$ sudo passwd user2
...
passwd: all authentication tokens updated successfully.

 

 

3. chage -I : 비밀번호 만료 설정 

 

[linuxadmin@localhost ~]$ sudo useradd user3

[linuxadmin@localhost ~]$ sudo passwd user3
Changing password for user user3.
...
passwd: all authentication tokens updated successfully.

 

[linuxadmin@localhost ~]$ chage --help

**비밀번호 정책

Maximum number of days between password change          : 99999

-I, --inactive INACTIVE       set password inactive after expiration to INACTIVE

 

** 현재 3월 19일

[linuxadmin@localhost ~]$ sudo chage -M 2 user3

[linuxadmin@localhost ~]$ sudo chage -I 5 user3

[linuxadmin@localhost ~]$ sudo chage -l user3

 

Last password change                                    : Mar 19, 2026  <--비밀번호 마지막 변경 날짜
Password expires                                        : Mar 21, 2026  <-- 마지막 변경날짜 + M (비밀번호 최대 사용일)
Password inactive                                       : Mar 26, 2026  <-- 비밀번호 만료일 + I (유예기간)

 

 

4. chage -d : 사용자 로그인 시 비밀번호 강제로 변경하게 설정

Last password change  부분을 0으로 설정한다. 

 

[linuxadmin@localhost ~]$ sudo chage -d 0 user1
[linuxadmin@localhost ~]$ sudo grep user1 /etc/shadow

user1:$6$rounds=100000$tickWFmv9IKiwrdx$8mmZNYbHMa18633BkuDeVd1EC65AlXgjCFiyGuDKEcht0ZzKiOyl5TwWGKWGzZD8bO5xv02qs76G14qCGRI.a0:0:0:99999:7:::

 

다시 로그인 시도해본다.

[linuxadmin@localhost ~]$ ssh -l user1 192.168.100.3

 

강제로 비밀번호 재설정 -> 비밀번호 재설정 안하면 로그아웃된다.

 

다시 로그인 시도한다.

[linuxadmin@localhost ~]$ ssh -l user1 192.168.100.3

 

1글자 암호 등 쉬운 암호는 설정이 안된다. 

 

사전에 있는 단어나 8자 이하도 설정이 안된다.

 

5. chage -M : 비밀번호 최대 사용일 변경

[linuxadmin@localhost ~]$ sudo passwd -S user1
[sudo] password for linuxadmin:
user1 PS 2026-03-20 0 99999 7 -1 (Password set, SHA512 crypt.)
[linuxadmin@localhost ~]$ sudo chage -M 30 user1
[linuxadmin@localhost ~]$ sudo passwd -S user1
user1 PS 2026-03-20 0 30 7 -1 (Password set, SHA512 crypt.)

 

결과 확인

[linuxadmin@localhost ~]$ sudo chage -l user1

 

6. chage -E : 계정 만료일 설정

  • chage 사용할 때 : -E
  • passwd 사용할 때 : -e

[linuxadmin@localhost ~]$ sudo chage -E 2026-12-25 user1

 

chage -l로 확인 (passwd -S 로는 Account expires 정보를 볼 수 없음)

[linuxadmin@localhost ~]$ sudo chage -l user1

 

date 명령어로 현재 날짜를 계정 만료일 다음날로 변경해서 계정이 잠기는 것을 테스트한다.

 

[linuxadmin@localhost ~]$ date
Fri Mar 20 11:31:02 AM KST 2026
[linuxadmin@localhost ~]$ sudo date 12261800     <-12월 26일 18시

 

다시 로그인 해본다. 
[linuxadmin@localhost ~]$ ssh -l user1 192.168.100.3

 

계정이 만료되어 로그인이 되지 않는다.

 

날짜를 원래대로 돌리면 로그인이 다시 된다.

[linuxadmin@localhost ~]$ sudo date 03201138    <- 3월 20일 11시 38분

 

13. passwd : 비밀번호 관련 명령어

[linuxadmin@localhost ~]$ grep linuxadmin /etc/passwd
linuxadmin:x:1000:1000:linuxadmin:/home/linuxadmin:/bin/bash
[linuxadmin@localhost ~]$ grep -A 5 linuxadmin /etc/passwd
linuxadmin:x:1000:1000:linuxadmin:/home/linuxadmin:/bin/bash
user1:x:1001:1001::/home/user1:/bin/bash
user2:x:1002:1002::/home/user2:/bin/bash
user3:x:1003:1003::/home/user3:/bin/bash

[linuxadmin@localhost ~]$ grep -B 5 linuxadmin /etc/passwd
systemd-coredump:x:999:999:systemd Core Dumper:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
sssd:x:998:997:User for sssd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/usr/share/empty.sshd:/usr/sbin/nologin
chrony:x:997:996:chrony system user:/var/lib/chrony:/sbin/nologin
linuxadmin:x:1000:1000:linuxadmin:/home/linuxadmin:/bin/bash

 

[linuxadmin@localhost ~]$ ll /etc/{passwd,shadow}
-rw-r--r--. 1 root root 1076  3월 19 17:15 /etc/passwd
----------. 1 root root 1156  3월 19 17:22 /etc/shadow

 

/etc/shadow 파일 필드 기본값을 보기 위해 먼저 사용자를 모두 삭제하고 다시 생성한다. 

*사용자 삭제는 한명씩 가능

[linuxadmin@localhost ~]$ sudo userdel -r user1

[linuxadmin@localhost ~]$ sudo userdel -r user2

[linuxadmin@localhost ~]$ sudo userdel -r user3

[linuxadmin@localhost ~]$ sudo grep user1 /etc/shadow


user1:!!:20532:0:99999:7:::

Username | Password | Last password change | Minum | Maximum  | Warning days | Inactive | Expire | Reserved

 

  • username : 사용자를 생성할 때 이미 지정되어 있음.
  • Password : 기본값 없음
  • Last password change : 사용자를 생성한 오늘 날짜에 해당하는 일 수 (1970년 1월 1일부터 계산)
  • Minimum : 비밀번호 변경하면 최소 며칠을 써야된다는 기준 - 보안상 언제든 바꿀수 있어야 하기에 기본값이 0으로 설정되어있음 
  • Maximum : 기본값은 274년(99999)로 설정되어 있음. 반드시 변경해야 한다. 변경하지 않으면 취약점으로 처리한다.
  • Warning days : 비밀번호 만료 7일 전부터 로그인하면 경고가 출력됨.  
  • Inactive : 기본값 없음.
    • 설정이 없는 경우 : Rocky Linux 9의 기본값은 없음. 
      • 비밀번호가 만료되지 않은 경우 : 정상적으로 로그인 된다.
      • 비밀번호가 만료된 경우 : 로그인을 하면 비밀번호를 강제로 재지정
        • 이전 비밀번호를 물어본 후 비밀번호가 맞으면 강제로 다시 재설정
          • 새로운 비밀번호를 설정하면 : 비밀번호가 변경되고 로그아웃 후에 재설정한 비밀번호로 다시 로그인.
          • 새로운 비밀번호를 설정하지 않은 경우 : 로그아웃된다.
        • 이전 비밀번호를 물어본 후 비밀번호가 맞지 않으면 로그아웃된다.
    • 설정이 있는 경우 :  
      • 비밀번호가 만료되지 않은 경우 : 정상적으로 로그인
      • 비밀번호가 만료된 경우 : 유예기간이 동작하며, 유예기간(Inactive 설정값) 동안 변경할 수 있게 정상적으로 로그인이 된다. 
        • 유예기간동안 비밀번호를 변경했을 경우 : 새로운 비밀번호를 설정하면 비밀번호가 새롭게 설정되고 Last password change 필드에 변경된 일수가 기록되고 다시 카운트가 된다.
        • 유예기간동안 비밀번호를 변경하지 않고 유예기간이 끝난 경우 : 유예기간이 끝나는 순간 계정이 잠기고 로그인을 못함.
          -> 이때는 반드시 root(슈퍼유저)만이 사용자의 계정을 풀어줄 수 있다. 
  • Expire :  사용자 계정 만료 기간. 이 기간이 지나면 로그인을 할 수 없다. -> 관리자가 풀어줘야 함. 기본값 없음. 
  • Reserved : 사용 안함 (비어있음)

=> UPLmMWIE로 순서 암기

 

요약표

순서 필드명 주요 내용
1 사용자명 로그인 ID. /etc/passwd 파일의 첫 번째 필드와 일치.
2 암호 암호화된 패스워드 (SHA-512 등) / 기본값은 없다.
만약 이 필드가 !!나 *로 되어 있다면 암호가 설정되지 않았거나 계정이 잠긴(Lock) 상태를 의미한다.
3 최종 변경일 1970.01.01 기준 경과 일수
4 최소 일수 암호를 한 번 변경한 후, 다시 변경하기 위해 기다려야 하는 최소 기간이다.
보통 0으로 설정되어 있는데, 이는 언제든 즉시 변경 가능하다는 뜻이다.
5 최대 일수 변경한 암호를 사용할 수 있는 최대 기간이다.
이 기간이 지나면 사용자는 암호를 반드시 변경해야 한다. 보통 99999로 설정되어 있으면 무제한이나 다름없다.
6 Warning days 암호 유효 기간(Maximum)이 만료되기 몇 일 전부터 로그인 시 경고 메시지를 보여줄 것인지 결정한다.
보통 7일이 기본값이다.
7 Inactive
(불용 기간)
만료 후 계정 폐쇄 전 유예 기간
이 기간 내에는 로그인은 안 되더라도 암호 변경을 통해 계정 회복이 가능하지만, 이 기간마저 지나면 관리자가 풀어줘야 한다.
8 계정 만료일 계정 자체가 만료되어 사용할 수 없게 되는 절대적인 날짜다.
3번 필드와 마찬가지로 1970년 1월 1일 기준의 일수로 표시된다.
9 Reserved(예약) 사용 안 함 (예약 영역)

 

** sudo의 단점 : sudo를 사용하는 관리자의 비번을 획득하면 루트가 뚫림

 

user1의 패스워드를 변경한다.

 

[linuxadmin@localhost ~]$ sudo passwd user1
[sudo] password for linuxadmin:
...
passwd: all authentication tokens updated successfully.

 

grep 명령어로 shadow 파일을 확인한다.

[linuxadmin@localhost ~]$ sudo grep user1 /etc/shadow


user1:$6$rounds=100000$tickWFmv9IKiwrdx$8mmZNYbHMa18633BkuDeVd1EC65AlXgjCFiyGuDKEcht0ZzKiOyl5TwWGKWGzZD8bO5xv02qs76G14qCGRI.a0:20532:0:99999:7:::

 

$ 6 : SHA512 알고리즘

$ rounds=100000 : 라운드 수(돌리는 횟수)

$tickWFmv9IKiwrdx : salt 

$8mmZNYbHMa18633BkuDeVd1EC....... : 해시 비밀번호

 

ssh 로 user1계정에 로그인 해본다.

 

 

1. passwd -l : 사용자 계정의 비밀번호를 잠근다.

(/etc/passwd 파일의 비밀번호 필드에 !!를 추가해서 전체 암호를 다르게 설정한다.)

 

다시 linuxadmin 계정에서 user1 계정에 락을 건다.

[linuxadmin@localhost ~]$ sudo passwd -l user1

 

shadow 파일을 다시 확인해본다.

[linuxadmin@localhost ~]$ sudo grep user1 /etc/shadow

 

user1:!!$6$rounds=100000$tickWFmv9IKiwrdx$8mmZNYbHMa18633BkuDeVd1EC65AlXgjCFiyGuDKEcht0ZzKiOyl5TwWGKWGzZD8bO5xv02qs76G14qCGRI.a0:20532:0:99999:7:::

 

비밀번호가 !!로 바뀌었다. (비밀번호 없음)

 

비밀번호가 없어서 ssh 로그인이 막힌다.

 

 

2.  passwd -u : 비밀번호 락을 푼다.

[linuxadmin@localhost ~]$ sudo passwd -u user1
Unlocking password for user user1.

 

다시 ssh 로그인 해본다.

 

정상적으로 로그인 된다. 

 

 

3. passwd -S : 패스워드 상태 정보

[linuxadmin@localhost ~]$ sudo passwd -S user1


user1 PS 2026-03-20 0 99999 7 -1 (Password set, SHA512 crypt.)

SHA-2 (Secure Hash Algorithm 2)

 

패스워드에 락을 걸고 다시 확인해본다.

 

[linuxadmin@localhost ~]$ sudo passwd -l user1
[linuxadmin@localhost ~]$ sudo passwd -S user1

user1 LK 2026-03-20 0 99999 7 -1 (Password locked.)  --> 락이 걸렸다.

 

다시 락을 해제한다.

[linuxadmin@localhost ~]$ sudo passwd -u user1

 

14. lastlog : 마지막 로그인 확인

15. loginctl : 로그인 세션 확인

 

16. hostname : 호스트명 확인

FQDN(Fully Qualified Domain Name) 으로 전체 도메인 이름을 출력한다. 

[linuxadmin@localhost ~]$ hostname
localhost.localdomain

  • 호스트 이름부터 도메인 이름까지 전체를 다 적은 이름. (호스트명.도메인명)
  • www.naver.com,  www.daum.net,  cafe.naver.com
  • localhost.localdomain은 기본값이고, 네트워크 장비에서 Switch, Router 기본 이름으로 보이는 것과 동일하다.
  • localhost.localdomain일 때  /etc/hostname에 저장되지 않는다.
  • FQDN을 설정해야 /etc/hostname/에 저장된다.

 

17. hostnamectl : 호스트명 설정/확인

 

[linuxadmin@localhost ~]$ hostnamectl hostname
localhost

 

[linuxadmin@localhost ~]$ hostnamectl status

 

현재 hostname은 unset 으로 되어있다.

 

[linuxadmin@localhost ~]$ sudo hostnamectl set-hostname www.myhost.com

 

[linuxadmin@localhost ~]$ sudo hostnamectl hostname www.myhost2.com

 

hostname 명령어로 확인

[linuxadmin@localhost ~]$ hostname
www.myhost2.com
[linuxadmin@localhost ~]$ cat /etc/hostname
www.myhost2.com

 

로그아웃 했다가 다시 로그인하면 프롬프트가 바뀐다.

 

 

[linuxadmin@www ~]$ hostname
www.myhost2.com
[linuxadmin@www ~]$ echo hostname > test.txt
[linuxadmin@www ~]$ cat test.txt
hostname
[linuxadmin@www ~]$ echo $(hostname) > test.txt
[linuxadmin@www ~]$ cat test.txt
www.myhost2.com

 

 

명령어를 해석한 결과를 test.txt에 저장한다.

이런 원리로 루트 계정에서 리다이렉션으로 (>> /etc/hosts )파일에 추가할 수 있지만, sudo 명령으로는 리다이렉션이 안돼서 여기서는 vi 편집기로 추가하는걸로 한다. 

 

[linuxadmin@www ~]$ cat /etc/hosts

확인 결과 현재 hots 파일에 없다.

 

[linuxadmin@www ~]$ sudo vi /etc/hosts

 

vi 편집해서 다시 조회해보면 ip와 도메인이 나온다.

 

 

18. id : UID/GID 확인

  . 자신의 사용자/그룹 정보를 출력한다.
    $ id
    uid=1000(linuxadmin) gid=1000(linuxadmin) groups=1000(linuxadmin),10(wheel) context=unconfined ...(생략)...
    $ grep linuxadmin /etc/{passwd,group}
    /etc/passwd:linuxadmin:x:1000:1000:linuxadmin:/home/linuxadmin:/bin/bash
    /etc/group:wheel:x:10:linuxadmin
    /etc/group:linuxadmin:x:1000:

 

19. whoami : 현재 사용자

현재 사용자를 확인한다.
    $ whoami
    linuxadmin

    Same as id -un.
    $ id -un
    linuxadmin

 

20. groups : 소속 그룹

자신이 속한 그룹을 확인한다.
    $ groups
    linuxadmin wheel

    $ id -Gn
    linuxadmin wheel

 

    $ groups root 
    $ groups root user1 
    $ groups root user1 linuxadmin

21. newgrp : 그룹 전환

  • 셸을 새롭게 실행하면서 그룹을 변경한다.
  • 현재 로그인 사용자는 그대로 유지하면서 기본 그룹만 변경하여 새로운 셸을 시작하는 명령어이다.

  newgrp 를 이용해서 기본 그룹을 wheel 그룹으로 변경한다.
      . newgrp를 이용하면 현재 셸에서 기본 그룹(primary group) 을 다른 그룹으로 변경할 수 있다.
      . newgrp 을 하면 변경되는 2가지
        - 새로운 셸이 실행된다.
          기존 셸 위에 새 셸이 하나 더 실행되므로 SHLVL 값이 증가한다.
        - 기본그룹이 wheel 그룹으로 변경된다..

 

id 명령어 출력 결과

  • gid: 기본 그룹
  • groups: 기본 그룹 + 보조 그룹

 

[linuxadmin@www ~]$ echo $SHLVL
1
[linuxadmin@www ~]$ id
uid=1000(linuxadmin) gid=1000(linuxadmin) groups=1000(linuxadmin),10(wheel) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023


[linuxadmin@www ~]$ newgrp wheel
[linuxadmin@www ~]$ echo $SHLVL
2


[linuxadmin@www ~]$ id
uid=1000(linuxadmin) gid=10(wheel) groups=10(wheel),1000(linuxadmin) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[linuxadmin@www ~]$ exit
exit
[linuxadmin@www ~]$ echo $SHLVL
1


[linuxadmin@www ~]$ id
uid=1000(linuxadmin) gid=1000(linuxadmin) groups=1000(linuxadmin),10(wheel) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

 

 

 

 

[linuxadmin@www ~]$ id
uid=1000(linuxadmin) gid=1000(linuxadmin) groups=1000(linuxadmin),10(wheel) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[linuxadmin@www ~]$ touch file1.txt

[linuxadmin@www ~]$ ll file1.txt
-rw-r--r--. 1 linuxadmin linuxadmin 0 Mar 24 09:41 file1.txt

 

[linuxadmin@www ~]$ newgrp wheel
[linuxadmin@www ~]$ id
uid=1000(linuxadmin) gid=10(wheel) groups=10(wheel),1000(linuxadmin) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

[linuxadmin@www ~]$ touch file2.txt
[linuxadmin@www ~]$ ll file2.txt
-rw-r--r--. 1 linuxadmin wheel 0 Mar 24 09:41 file2.txt

 

 

 

[linuxadmin@www ~]$ newgrp root
Password:
newgrp: failed to crypt password with previous salt: Invalid argument
[linuxadmin@www ~]$ ll /etc/gshadow
----------. 1 root root 456 Mar 23 12:45 /etc/gshadow
[linuxadmin@www ~]$ ll /etc/shadow
----------. 1 root root 1222 Mar 23 12:33 /etc/shadow
[linuxadmin@www ~]$ sudo head /etc/gshadow

 

 

[linuxadmin@www ~]$ newgrp user1
Password:
newgrp: failed to crypt password with previous salt: Invalid argument

 

 

🟦 newgrp으로 기본 그룹 변경 후 파일 생성해서 그룹 소유권 확인하기

 

현재 기본 그룹은 linuxadmin

[linuxadmin@www ~]$ echo $SHLVL
1
[linuxadmin@www ~]$ id
uid=1000(linuxadmin) gid=1000(linuxadmin) groups=1000(linuxadmin),10(wheel) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

 

user1로 그룹을 변경한다.
[linuxadmin@www ~]$ newgrp user1
Password:    <--user1 그룹에 설정한 비밀번호를 입력


[linuxadmin@www ~]$ echo $SHLVL    
2          <-- 그룹이 변경되어 새로운 셸이 열림


[linuxadmin@www ~]$ id
uid=1000(linuxadmin) gid=1001(user1) groups=1001(user1),10(wheel),1000(linuxadmin) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023   <---기본 그룹이 user1로 바뀜.

 

파일을 생성하면 user1로 파일이 생성된다. 

 

[linuxadmin@www ~]$ ll file3.txt
-rw-r--r--. 1 linuxadmin user1 0 Mar 24 11:29 file3.txt

 

기본 그룹이 변경되었으므로 파일을 생성할 때 그룹이 기본그룹인 user1로 생성되었다. 

 

22. passwd : 비밀번호 변경

자신의 비밀번호와 다른 사용자의 비밀번호를 변경할 수 있다.

 

  • 자신의 비밀번호는 변경이 가능하다.

일반 사용자는 자신의 비밀번호를 볼 수 없다.

[linuxadmin@www ~]$ ll /etc/shadow
----------. 1 root root 1222 Mar 23 12:33 /etc/shadow

 

sudo로 shadow 파일에 있는 비밀번호를 확인한다.
[linuxadmin@www ~]$ sudo grep linuxadmin /etc/shadow
[sudo] password for linuxadmin:
linuxadmin:$6$DuzqZ8R/hkYSI0jt$pfEkfKi9jvUoqq4mj4XEMBE6wh.jIRfAdGX1wyKNhitUoq/KrIY6NYmaAPXmD1zwMtfSJxEcl6AZ2MaYBKr290::0:99999:7:::

 

[linuxadmin@www ~]$ passwd
    Changing password for user linuxadmin.
    Current password:   <--- 비밀번호가 틀리면 종료된다.
    passwd: Authentication token manipulation error
[linuxadmin@www ~]$ passwd
    Changing password for user linuxadmin.
    Current password:  <--- 비밀번호가 일치하면 새로운 비밀번호를 입력받는다.
    New password:
    Retype new password:
    passwd: all authentication tokens updated successfully.

 

비밀번호(해시값)가 변경된 것을 확인한다. 

[linuxadmin@www ~]$ sudo grep linuxadmin /etc/shadow

linuxadmin:$6$rounds=100000$6YypYhS2i8veN9/4$uGjwSICcLFvZmjq9.Re4UF111/Vuc3DL...:20536:0:99999:7:::

  • 다른 사용자의 비밀번호는 root 권한이 있어야 변경이 가능하다.

[linuxadmin@www ~]$ passwd user1
passwd: Only root can specify a user name.

 

23. gpasswd : 그룹 관리

(그룹 비밀번호는 실무에서는 많이 안쓴다.)

 

[linuxadmin@www ~]$ gpasswd --help
Usage: gpasswd [option] GROUP

 

/etc/gshadow 파일에 접근 권한이 없기 때문에 root가 아닌 일반 유저 관리자가 사용하기 위해서는 sudo를 사용해야 한다. 

[linuxadmin@www ~]$ ll /etc/gshadow
----------. 1 root root 417  3월 24 11:15 /etc/gshadow   <-- 슈퍼유저(root) 권한이 필요함. 

  • /etc/gshadow 필드
    • 그룹명:암호:그룹관리자:그룹멤버
    • 그룹 비밀번호에 !가 있으면 그룹에 비밀번호가 없다는 뜻. 
    • 그룹 관리자에 값이 없으면 그룹 관리자가 없는 것이다.
    • 그룹멤버에 값이 없으면 그룹 멤버는 생성된 사용자 이외에는 없는 것이다.

 

** 사용자 생성 및 삭제 자동화 스크립트는 아래 포스팅 참고

https://nanujahope.tistory.com/276
$ delete-users-uid1001.sh

 

🟦 gpasswd : 그룹 비밀번호 변경 

 

1) 먼저 사용자를 두 개 만든다.

[linuxadmin@www ~]$ sudo useradd user1
[sudo] linuxadmin의 암호:
[linuxadmin@www ~]$ sudo useradd user2

 

2) /etc/group에서 생성된 그룹을 확인한다. 
[linuxadmin@www ~]$ tail -n 3 /etc/group
linuxadmin:x:1000:
user1:x:1001:
user2:x:1002:

 

3) /etc/gshadow에서 생성된 그룹을 확인한다. 현재 비밀번호가 설정되어 있지 않다.
[linuxadmin@www ~]$ sudo tail -n 3 /etc/gshadow

linuxadmin:!::
user1:!::
user2:!::

 

4) user1 그룹의 비밀번호를 설정한다.

[linuxadmin@www ~]$ sudo gpasswd user1
[sudo] password for linuxadmin:
Changing the password for group user1
New Password:
Re-enter new password:

 

5) 설정된 비밀번호를 확인한다.

[linuxadmin@www ~]$ sudo grep user1 /etc/gshadow
user1:$6$Q7DwyaUE85VFXrQZ$k1QC.2kB7TMmtgDRYd8CkEzgtujmzDs8uBgAl3vsqANwkuUaG5WIVbo6hchXFO21DMEeTGFtumlz.gEmiNv.M/::

 

🟦 생성된 사용자를 출력하는 두 가지 방법

사용자를 3개 더 만든다. 

 

[linuxadmin@www ~]$ sudo useradd user3
[sudo] password for linuxadmin:
[linuxadmin@www ~]$ sudo useradd user4
[linuxadmin@www ~]$ sudo useradd user5

 

1) awk로 UID 1001 이상인 사용자를 출력한다.
[linuxadmin@www ~]$ awk -F : '$3 >= 1001 && $1 != "nobody" {print $1}' /etc/passwd
user1
user2
user3
user4
user5

 

2) /etc/passwd 파일에서 확인한다.

[linuxadmin@www ~]$ grep user /etc/passwd

🟦 gpasswd -a : 그룹에 멤버 추가 

사용법: sudo gpasswd -a 사용자 그룹

그룹에 멤버를 추가하는 다른 방법: 

groupmod

 

1) linuxadmin 사용자를 user1 그룹에 포함시킨다.

[linuxadmin@www ~]$ sudo gpasswd -a linuxadmin user1
[sudo] password for linuxadmin:
Adding user linuxadmin to group user1

 

사용자가 그룹에 멤버로 포함되면 2개의 파일에 멤버가 저장된다. 

  • /etc/group
  • /etc/shadow

2) /etc/group 확인
[linuxadmin@www ~]$ grep ^user1 /etc/group  <--user1로 시작하는 줄을 잡기

user1:x:1001:linuxadmin

 

3) /etc/gshadow 확인

[linuxadmin@www ~]$ sudo grep ^user1 /etc/gshadow    <--user1로 시작하는 줄을 잡기

user1:$6$Q7DwyaUE85VFXrQZ$k1QC.2kB7TMmtgDRYd8CkEzgtujmzDs8uBgAl3vsqANwkuUaG5WIVbo6hchXFO21DMEeTGFtumlz.gEmiNv.M/::linuxadmin

 

4) /etc/group과 /etc/gshadow를 한 번에 확인할 수도 있다. 

[linuxadmin@www ~]$ sudo grep ^user1 /etc/{group,gshadow}

 

5) user2, user3 멤버를 user1 그룹에 추가한다. 

[linuxadmin@www ~]$ sudo gpasswd -a user2 user1
Adding user user2 to group user1
[linuxadmin@www ~]$ sudo gpasswd -a user3 user1
Adding user user3 to group user1

 

6) group, gshadow 파일에서 확인한다.

[linuxadmin@www ~]$ sudo grep ^user1 /etc/{group,gshadow}
/etc/group:user1:x:1001:linuxadmin,user2,user3
/etc/gshadow:user1:$6$Q7DwyaUE85VFXrQZ$k1QC.2kB7TMmtgDRYd8CkEzgtujmzDs8uBgAl3vsqANwkuUaG5WIVbo6hchXFO21DMEeTGFtumlz.gEmiNv.M/::linuxadmin,user2,user3

 

🟦 gpasswd -d : 그룹에서 멤버 삭제

1) user2 사용자를 user1 그룹에서 제거한다.

[linuxadmin@www ~]$ sudo gpasswd -d user2 user1
Removing user user2 from group user1

 

2) group, gshadow에서 확인한다.

[linuxadmin@www ~]$ sudo grep ^user1 /etc/{group,gshadow}
/etc/group:user1:x:1001:linuxadmin,user3
/etc/gshadow:user1:$6$Q7DwyaUE85VFXrQZ$k1QC.2kB7TMmtgDRYd8CkEzgtujmzDs8uBgAl3vsqANwkuUaG5WIVbo6hchXFO21DMEeTGFtumlz.gEmiNv.M/::linuxadmin,user3

 

🟦 gpasswd -A : 그룹 관리자 지정

  • 그룹의 관리자는 /etc/group 에는 존재하지 않고 /etc/gshadow 에만 존재한다.
  • -A 옵션으로 그룹에 관리자를 추가하면 멤버 여부와 상관없이 관리자로 추가가 된다.

1. 그룹 멤버 중 한명을 그룹 관리자로 지정하는 경우

1) linuxadmin을 user1 그룹의 관리자로 지정한다.

[linuxadmin@www ~]$ sudo gpasswd -A linuxadmin user1
[sudo] password for linuxadmin:

 

2) gshadow에서 관리자 확인

[linuxadmin@www ~]$ sudo grep ^user1 /etc/gshadow
user1:$6$Q7DwyaUE85VFXrQZ$k1QC.2kB7TMmtgDRYd8CkEzgtujmzDs8uBgAl3vsqANwkuUaG5WIVbo6hchXFO21DMEeTGFtumlz.gEmiNv.M/:linuxadmin:linuxadmin,user3

 

2. 그룹 멤버가 아닌 사용자를 그룹 관리자로 지정하는 경우

1) 현재 user2 그룹에는 다른 멤버가 없다.

[linuxadmin@www ~]$ sudo grep ^user2 /etc/{group,gshadow}
/etc/group:user2:x:1002:
/etc/gshadow:user2:!::

2) user2 그룹에는 멤버가 user2밖에 없다.

    (user2 사용자를 생성하면 사용자 이름과 동일한 그룹이 생성되고, user2 그룹이 user2 사용자의 기본 그룹이 된다.)

[linuxadmin@www ~]$ grep user2 /etc/passwd
user2:x:1002:1002::/home/user2:/bin/bash

 

3) linuxadmin을 user2 그룹의 관리자로 추가한다.

[linuxadmin@www ~]$ sudo gpasswd -A linuxadmin user2

 

4) etc/gshadow 네 번째 필드에 linuxadmin이 관리자로 추가된다. 
[linuxadmin@www ~]$ sudo grep ^user2 /etc/{group,gshadow}
/etc/group:user2:x:1002:
/etc/gshadow:user2:!:linuxadmin:

 

하지만 user2 그룹의 멤버로는 포함되지 않는다. 

linuxadmin 사용자가 로그아웃하고 다시 로그인을 해서 id를 확인하면,

[linuxadmin@www ~]$ id
uid=1000(linuxadmin) gid=1000(linuxadmin) groups=1000(linuxadmin),10(wheel),1001(user1) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023   <--- 보조그룹(1002)이 없음. 

 

3. 그룹 관리자를 여러명 지정

sudo gpasswd -A ADMIN,ADMIN2, ...그룹

 

1) linuxadmin, user1, user2를 user5 그룹의 관리자로 지정한다.

[linuxadmin@www ~]$ sudo gpasswd -A linuxadmin,user1,user2 user5

 

2) /etc/gshadow에서 확인한다.

[linuxadmin@www ~]$ sudo grep user5 /etc/{group,gshadow}
/etc/group:user5:x:1005:
/etc/gshadow:user5:!:linuxadmin,user1,user2:

 

🟦 gpasswd -M : 그룹 멤버 지정

[linuxadmin@www ~]$ sudo gpasswd -M user1,user2,user3,user4 user5

 

[linuxadmin@www ~]$ sudo grep ^user5 /etc/{group,gshadow}
/etc/group:user5:x:1005:user1,user2,user3,user4
/etc/gshadow:user5:!:linuxadmin,user1,user2 --> 관리자 :user1,user2,user3,user4-->멤버

 

 

🔴 멤버를 등록할 수 없는 경우: 

 

[linuxadmin@www ~]$ sudo grep ^user3 /etc/{group,gshadow}
/etc/group:user3:x:1003:
/etc/gshadow:user3:!::

[linuxadmin@www ~]$ sudo gpasswd -M '' user3
[linuxadmin@www ~]$ sudo grep ^user3 /etc/{group,gshadow}
/etc/group:user3:x:1003:
/etc/gshadow:user3:!::

[linuxadmin@www ~]$ gpasswd -M user1  user3
gpasswd: Permission denied.
[linuxadmin@www ~]$ sudo grep ^user3 /etc/{group,gshadow}
/etc/group:user3:x:1003:
/etc/gshadow:user3:!::

 

linuxadmin이  user3 그룹의 관리자 그룹에 포함되어 있지 않기 때문에 멤버를 등록할 수 없다. 

멤버 등록은 슈퍼유저(root) 또는 일반 유저라면 그룹 관리자만 가능하기 때문이다. 

 

이런 경우, 슈퍼유저(root) 권한으로 하면 가능하다. 

[linuxadmin@www ~]$ sudo gpasswd -M user1 user3
[sudo] linuxadmin의 암호:
[linuxadmin@www ~]$ sudo grep ^user3 /etc/{group,gshadow}
/etc/group:user3:x:1003:user1
/etc/gshadow:user3:!::user1

 

🔴 관리자 그룹에 포함되어 있는 경우, 사용자를 멤버로 등록할 수 있다. 

 

1) user5 그룹의 멤버 리스트를 '없음'으로 초기화한다. 

[linuxadmin@www ~]$ sudo gpasswd -M '' user5   

 

2) user5 그룹의 멤버 필드가 비어있다. 
[linuxadmin@www ~]$ sudo grep ^user5 /etc/{group,gshadow}
/etc/group:user5:x:1005:
/etc/gshadow:user5:!:linuxadmin,user1,user2:

 

3) user5 그룹에 user3 사용자를 멤버로 등록하니 잘 된다. 

[linuxadmin@www ~]$ gpasswd -a user3 user5
사용자 user3을(를) user5 그룹에 등록 중

 

4) user5 그룹에 user3이 멤버로 추가된 것을 확인할 수 있다. 
[linuxadmin@www ~]$ sudo grep ^user5 /etc/{group,gshadow}
/etc/group:user5:x:1005:user3
/etc/gshadow:user5:!:linuxadmin,user1,user2:user3

 

** linuxadmin 사용자는 user5 그룹의 관리자이기 때문에 user3 사용자를 user5 그룹에 멤버로 추가할 수 있는 것이다. 

 

결론: 그룹 관리자는 멤버를 추가/삭제할 수 있는 권한이 있다. 

 

 

🟢 초기화 : 셸 스크립트를 이용해 모든 그룹을 삭제한다. 

[linuxadmin@www ~]$ sudo delete-users-uid1001.sh

[sudo] linuxadmin의 암호:
userdel: group user1 not removed because it has other members.

 

UID 1001 이상인 사용자를 삭제하려고 하면 user1 그룹에 linuxadmin 사용자가 속해 있기 때문에 삭제되지 않는다.

user1 사용자는 삭제가 되지만 user1 그룹은 삭제되지 않는다. 

[linuxadmin@www ~]$ grep user1 /etc/passwd
[linuxadmin@www ~]$ grep user1 /etc/group

 

삭제되지 않은 user1 그룹을 groupdel로 따로 삭제한다.

[linuxadmin@www ~]$ sudo groupdel user1    
[linuxadmin@www ~]$ grep user1 /etc/group

[linuxadmin@www ~]$

 

50. root 비밀번호 초기화

 

루트 권한으로 시스템을 종료한다.
[linuxadmin@www ~]$ sudo shutdown -h now

 

부팅하자마자 바탕화면 클릭 + Esc 키를 누러서 멈춘다.

E 키를 누른다.

 

swap 뒤로 커서를 옮겨서 rd.break 입력하고 ctrl + X

 

 

mount -0 remount,rw /sysroot

chroot /sysroot

echo 1 | passwd --stdin root    <--패스워드를 1로 초기화

 

 

touch /.autorelabel

reboot -f

 

https://cafe.naver.com/linuxmasternet/32449