리눅스/실습

리눅스 실습(2) - 계정 관련(소유권, 권한 등) 실습-1

dbswjdahr 2025. 10. 29. 14:33

useradd, adduser - 사용자를 생성하는 명령어

사용자를 추가하면 계정 관련 정보를 cat /etc/passwd를 통해 확인할 수 있는데, 0번인 root와 1000번부터 시작인 사용자 계정, 그 사이에 여러 시스템 계정(nginx, ftp, sshd, mysql 등)이 있는 걸 확인이 가능하다. nginx, mysql 등은 패키지 설치 시 자동으로 생성된다. 필드의 구조로는 사용자명:비밀번호(안 보임):UID:GID:Description:홈디렉터리:사용쉘 로 구성되어 있다.

현재 레드햇 계열인 Alma에선(Rocky도 같다) useradd랑 adduser의 명령어의 결과가 동일하게 동작하는 것으로 확인된다. useradd는 단순히 사용자를 추가하는 명령어, adduser는 useradd 명령어를 기반으로 Perl 스크립트로 재구성하여 사용자를 간단하게 대화형 인터페이스로 사용자 정보를 입력하여 설정해 줄 수 있는 명령어로 알고 있었다. 따라서 useradd가 찐이고 사용자만 만들어지는 것이라 생각했었는데,

adduser test1 ← 이것과 useradd test2 ← 이것의 실행 후, cat /etc/passwd, ls /home을 하였더니 동일하게 구성된 것을 알 수 있었다. 이것도 우분투와 레드햇의 차이?지 않나 싶다. (우분투에선 useradd하면 사용자만 추가되고 홈디렉터리는 안 보였었다.) ls -al로 자세하게 확인해 보니 사용자 설정파일인 .bashrc와 .bash_profile 등도 추가된 걸 보니 차이가 없었다.

왜 이런지 알아보니 단순히 심볼릭 링크로 참조하는 형식이기에 완전히 같은 동작을 한다는 얘기를 들을 수 있었다. 실제로 아래처럼 명령어로 확인해 보니 그런 것을 알 수 있었다

[root@localhost ~]# ls -l /usr/sbin/*add*
-rwxr-xr-x. 1 root root   3079 Apr  4  2023 /usr/sbin/addgnupghome
-rwxr-xr-x. 1 root root  15848 Feb 13  2025 /usr/sbin/addpart
lrwxrwxrwx. 1 root root      7 Nov  4  2024 /usr/sbin/adduser -> useradd
-rwxr-xr-x. 1 root root  74608 Nov  4  2024 /usr/sbin/groupadd
-rwxr-xr-x. 1 root root  20064 Oct 29  2024 /usr/sbin/ipmaddr
-rwxr-xr-x. 1 root root 145456 Nov  4  2024 /usr/sbin/useradd

그렇다면, Ubuntu 환경에서는 이거랑 다를까? 내 예상이 맞다면 최소한 위 결과처럼은 안 나와야 할 것이다. 또, 단순히 사용자가 추가되는 것이 아닌 이유가 /etc/default 밑에 있는 useradd 명령어의 기본 설정 파일에서 알 수 있었다. (자동으로 계정 구성이 되는 이유)

[root@localhost ~]# cat /etc/default/useradd
# useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes

 

여기서는 skel이란 게 있는데, .bash* 등 홈디렉터리에 기본적으로 생기는 환경 구성  파일들이다

[root@localhost ~]# ls -al /etc/skel/ ## 이를 통해 어디서 왔는지 알 수 있다
total 24
drwxr-xr-x.  2 root root   62 Oct 28 18:13 .
drwxr-xr-x. 87 root root 8192 Oct 29 00:47 ..
-rw-r--r--.  1 root root   18 Oct 29  2024 .bash_logout
-rw-r--r--.  1 root root  144 Oct 29  2024 .bash_profile
-rw-r--r--.  1 root root  522 Oct 29  2024 .bashrc

 


groupadd - 그룹을 생성하는 명령어

그룹은 여러 사용자를 묶어 권한을 관리하기 위해 사용된다. 그룹별로 역할을 정하고, 해당 그룹에 속한 사용자들에게 파일에 대한 접근을 어디까지 허용하고 제한할지 정할 때 쓰인다. groupadd으로 그룹을 만들고 useradd나 usermod와 같이 연계해 사용한다.
-g <GID> 를 추가하면 그룹번호 지정, -r를 추가해 사용하면 시스템 번호(1000미만) 랜덤 할당이 된다.

기본으로 useradd 실행 시 자동으로 이름과 같은 그룹이 부여된다. 이번에는 groupadd testgroup1으로 그룹 하나를 만들고 새로운 사용자를 생성하면서 그룹을 붙였다. -G를 사용하면 기본그룹은 놔두고 보조그룹이 생기고, -g를 사용하면 기본그룹으로 정해버린다.

[root@localhost ~]# useradd -G testgroup1 test3
[root@localhost ~]# id test3
uid=1003(test3) gid=1003(test3) groups=1003(test3),1004(testgroup1)

[root@localhost ~]# useradd -g testgroup1 test4
[root@localhost ~]# id test4
uid=1004(test4) gid=1004(testgroup1) groups=1004(testgroup1)

 

생성 시 말고 이미 있는 사용자에게 그룹을 붙일 때는 usermod 명령어를 사용한다. 마찬가지로 -g를 쓰면 주그룹을 바꾸고 -G는 보조그룹을 바꾼다. 보조그룹을 여러개로 두고 싶으면 -aG를 사용해서 보조그룹을 덮어쓰지 않고 추가할 수 있다.

[root@localhost ~]# id test1
uid=1001(test1) gid=1001(test1) groups=1001(test1)
[root@localhost ~]# usermod -g testgroup1 test1 ## 기본그룹이 바뀐다
[root@localhost ~]# id test1
uid=1001(test1) gid=1004(testgroup1) groups=1004(testgroup1)

[root@localhost ~]# id test3
uid=1003(test3) gid=1003(test3) groups=1003(test3),1004(testgroup1)
[root@localhost ~]# usermod -G testgroup2 test3  ## 보조그룹이 덮어 씌워짐
[root@localhost ~]# id test3
uid=1003(test3) gid=1003(test3) groups=1003(test3),1005(testgroup2)

[root@localhost ~]# id test4
uid=1004(test4) gid=1004(testgroup1) groups=1004(testgroup1)
[root@localhost ~]# usermod -aG testgroup2 test4 ## 보조그룹이 추가(append)됨
[root@localhost ~]# id test4
uid=1004(test4) gid=1004(testgroup1) groups=1004(testgroup1),1005(testgroup2)

현재 그룹에 속한 멤버들이 누가 있는지 알고 싶으면 /etc/group을 확인하면 된다. 사용자별로 기본그룹을 확인하려면 id 명령어나 /etc/passwd의 GID로도 확인이 가능하다.

[root@localhost ~]# tail -5 /etc/group
test1:x:1001:
test2:x:1002:
testgroup1:x:1004:test3 ## 기본그룹으로 변경한 test1은 안 뜨는 게 확인된다
test3:x:1003:
testgroup2:x:1005:test3,test4

 


userdel, groupdel - 사용자 및 계정을 삭제하는 명령어

삭제하고 싶은 유저나 그룹이 있으면 이 명령어를 쓸 수 있다. 
userdel -r <유저명> 사용 시 관련된 모든 파일(홈디렉터리, 메일 스풀)을 깔끔하게 삭제시켜준다. -r 없이 그냥 지우면 남아있음.
현재 사용자 상태에 관계 없이 무조건 지우고 싶다면 -f 옵션으로 강제로 삭제도 가능하지만 권장하진 않는다. root랑 시스템 계정도 삭제가 가능하긴 하지만 치명적인 시스템 손상을 야기할 수 있으므로 하지 않아야 한다.

다음은 모의로 root 삭제 후 복구를 진행한 것이다.

[test1@localhost ~]$ sudo userdel -rf root ## 강제로 root를 삭제 시도
[sudo] password for test1:
userdel: user root is currently used by process 1
userdel: root mail spool (/var/spool/mail/root) not found 
## 이후 /etc/passwd를 살펴보면 root 줄이 사라진다. 터미널을 닫고 루트로 접근하면 막힘

[test1@localhost ~]$ sudo mkdir -p /root ## 사라진 root의 홈디렉터리를 다시 만든다
[test1@localhost ~]$ sudo cp /etc/passwd- /etc/passwd ## 계정 파일 백업
[test1@localhost ~]$ sudo cp /etc/skel/.* /root/ ## 사라진 계정 설정 파일을 다시 불러온다.

이후 다시 sudo -i, 재부팅 후에도 root 로그인이 정상적으로 작동이 된다. 이전에 가지고 있던 모든 데이터가 싹 날아간 건 어쩔 수 없지만 이외 부분은 이전과 동일했다.

groupdel의 경우, 기본그룹으로 지정된 사용자가 있으면 기본적으로 삭제되지 않는다. 보조그룹에만 있을 경우 삭제 가능
마찬가지로 -f옵션을 주면 강제로 삭제되어 /etc/group 에서도 사라진다. 또한, root, 시스템 그룹은 삭제하지 말아야 한다. /etc/group- 백업 파일이 기본적으로 존재하여 중요한 그룹이 사라질 경우 백업 시도할 수 있다.