useradd와 adduser 차이
useradd와 adduser 명령어는 리눅스에서 사용자 계정을 생성하는 데 사용되지만, 몇 가지 중요한 차이점이 있습니다. useradd는 기본적인 사용자 계정만 생성하고, 홈 디렉토리 생성, 비밀번호 설정, 쉘 설정 등을 사용자가 직접 해야 합니다. 반면, adduser는 좀 더 사용자 친화적으로, 계정 생성 시 필요한 정보를 대화형으로 입력받고, 기본적인 설정들을 자동으로 처리해줍니다. 즉, adduser는 useradd를 기반으로 하여 사용자에게 더 편리한 인터페이스를 제공하는 래퍼(wrapper) 명령어라고 할 수 있습니다. useradd 명령어의 특징:
- 저수준 명령어:
시스템에서 사용자를 추가하는 기본적인 기능만을 제공합니다. - 옵션 사용:
모든 설정을 옵션으로 지정해야 합니다. 예를 들어, 홈 디렉토리 생성, 초기 비밀번호 설정, 기본 쉘 설정 등을 직접 지정해야 합니다. - 자동 설정 없음:홈 디렉토리나 초기 설정 파일 등을 자동으로 생성하지 않습니다.
adduser 명령어의 특징:
- 사용자 친화적:
계정 생성 시 필요한 정보를 대화형으로 입력받아 사용자가 쉽게 계정을 생성할 수 있도록 돕습니다. - 자동 설정:
홈 디렉토리 생성, 비밀번호 설정, 기본 쉘 설정 등을 자동으로 처리해줍니다. - 래퍼 명령어:
useradd를 기반으로 사용자에게 편리한 인터페이스를 제공합니다. - 대부분의 배포판에서 기본 제공:Ubuntu, Debian과 같은 많은 리눅스 배포판에서 기본적으로 제공됩니다.
예시:useradd를 사용하여 계정을 생성하려면 다음과 같이 다양한 옵션을 사용해야 합니다:
코드
sudo useradd -m -d /home/testuser -s /bin/bash testuser
-m 옵션은 홈 디렉토리를 생성하고, -d 옵션은 홈 디렉토리 경로를 지정하며, -s 옵션은 기본 쉘을 지정합니다. adduser를 사용하여 계정을 생성하려면 간단하게 다음과 같이 입력하면 됩니다:
코드
sudo adduser testuser
이후에는 adduser가 사용자에게 필요한 정보를 대화형으로 질문하여 계정을 생성합니다.
결론:
useradd는 기본적인 사용자 계정 생성 명령어이고, adduser는 useradd를 기반으로 사용자에게 더 편리한 인터페이스를 제공하는 래퍼 명령어입니다. 특별한 이유가 없다면 adduser를 사용하여 사용자 계정을 생성하는 것이 더 편리하고 권장됩니다.
GI
useradd와 adduser는 둘 다 리눅스에서 사용자를 생성하는 명령어이지만, 몇 가지 중요한 차이점이 있습니다. useradd는 저수준(low-level)의 기본 명령어인 반면, adduser는 useradd를 기반으로 한 고수준(high-level)의 셸 스크립트입니다.
useradd
useradd는 사용자를 생성하는 데 필요한 최소한의 작업만 수행하는 기본 명령어입니다. 이 명령어는 다음과 같은 특징을 가집니다.
- 기본 기능: 새로운 사용자를 생성하고, /etc/passwd, /etc/shadow, /etc/group 파일에 해당 정보를 추가합니다.
- 비대화형: 별도의 질문 없이 명령어에 지정된 옵션에 따라 사용자를 생성합니다. 따라서 스크립트에서 자동화된 사용자 생성이 필요할 때 주로 사용됩니다.
- 수동 설정 필요: 홈 디렉터리, 사용자 셸, 그룹 등 대부분의 속성을 사용자가 직접 옵션을 통해 지정해야 합니다. 예를 들어, -m 옵션을 사용하지 않으면 홈 디렉터리가 생성되지 않습니다.
- 일반적인 사용법: sudo useradd [옵션] [사용자이름]
adduser
adduser는 useradd의 기능을 포괄하는 셸 스크립트로, 사용자가 더 편리하게 계정을 생성할 수 있도록 도와줍니다. 이 명령어는 다음과 같은 특징을 가집니다.
- 대화형: 사용자를 생성하는 과정에서 홈 디렉터리, 전체 이름, 암호 등을 대화식으로 물어봅니다.
- 자동 설정: 기본적으로 홈 디렉터리를 생성하고, 기본 셸을 할당하며, 사용자 이름과 같은 이름의 그룹을 자동으로 만듭니다.
- 편리성: useradd에 비해 사용자가 설정해야 할 부분이 적어, 초보자가 사용하기에 더 편리합니다.
- 일반적인 사용법: sudo adduser [사용자이름]
핵심 차이점 요약
| 특징 | useradd | adduser |
| 명령어 종류 | 저수준 바이너리 | 고수준 셸 스크립트 |
| 작동 방식 | 비대화형 | 대화형 |
| 자동화 | 스크립트에서 사용하기 용이 | 수동 사용자 생성에 적합 |
| 자동 설정 | 수동으로 옵션 지정 필요 | 홈 디렉터리, 그룹 등을 자동 생성 |
| 주로 사용되는 시스템 | RHEL, CentOS 등 | Debian, Ubuntu 등 |
useradd 명령어를 사용하여 UID, GID, 셸을 지정해 계정을 추가하는 예시와 /etc/passwd 파일에서의 결과는 다음과 같습니다.
useradd 명령어 사용 예시
useradd는 기본적으로 홈 디렉터리를 생성하지 않으므로 -m 옵션을 함께 사용해 주어야 합니다.
sudo useradd -u 2000 -g 500 -s /bin/bash -m user2000
위 명령어의 각 옵션은 다음과 같습니다.
- sudo: 관리자 권한으로 명령어를 실행합니다.
- useradd: 사용자를 추가하는 명령어입니다.
- -u 2000: **사용자 ID (UID)**를 2000으로 지정합니다.
- -g 500: **기본 그룹 ID (GID)**를 500으로 지정합니다.
- -s /bin/bash: 로그인 셸을 /bin/bash로 지정합니다.
- -m: 사용자의 홈 디렉터리(home/user2000)를 생성합니다.
- user2000: 추가할 사용자의 이름입니다.
/etc/passwd 파일의 결과
위 명령어를 실행한 후, cat /etc/passwd 명령어를 입력하면 파일의 마지막 부분에 새로 추가된 user2000 계정 정보가 다음과 같이 나타납니다.
user2000:x:2000:500::/home/user2000:/bin/bash
이 계정 정보는 :(콜론)을 기준으로 다음과 같은 항목들로 구성됩니다.
- user2000: 사용자 이름
- x: 암호화된 비밀번호 (실제 암호는 /etc/shadow 파일에 저장)
- 2000: UID (사용자 ID)
- 500: GID (기본 그룹 ID)
- (비어있음): GECOS (사용자 전체 이름, 전화번호 등) 필드
- /home/user2000: 홈 디렉터리 경로
- /bin/bash: 로그인 셸 경로
sudo (SuperUser Do) 🦸♂️
sudo는 리눅스에서 일반 사용자가 관리자(root) 권한으로 명령어를 실행할 수 있게 해주는 명령어입니다. 기본적으로 시스템 관리자(root)만 실행할 수 있는 명령어(예: 패키지 설치, 시스템 설정 변경)를, sudo를 사용하면 일반 사용자도 자신의 비밀번호를 입력하여 임시로 root 권한을 획득해 실행할 수 있습니다.
- 사용법: sudo [실행할 명령어]
- 주요 특징:
- 임시 권한: sudo를 통해 실행된 명령어만 root 권한을 가지며, 사용자의 기본 셸(shell) 권한은 변하지 않습니다.
- 로그 기록: sudo를 사용한 모든 기록은 /var/log/auth.log 등에 남으므로, 누가 어떤 관리자 명령어를 실행했는지 추적할 수 있습니다.
- 세션 유지: 한 번 비밀번호를 입력하면 일정 시간(기본 15분) 동안은 다시 비밀번호를 입력하지 않아도 sudo 명령을 사용할 수 있습니다.
su (Switch User) 🔄
su는 다른 사용자로 전환하는 명령어입니다. 주로 su만 입력하여 root 사용자로 전환하는 데 사용됩니다.
- 사용법: su [전환할 사용자명]
- 주요 특징:
- 영구 권한: su 명령으로 root로 전환하면, 셸 전체가 root 권한으로 바뀌고 exit 명령을 입력하기 전까지 root 권한이 유지됩니다.
- root 비밀번호 필요: su를 통해 root로 전환하려면 root 계정의 비밀번호를 알아야 합니다. (이것이 sudo와의 가장 큰 차이점입니다.)
- 보안 위험: root 계정의 비밀번호를 여러 사람이 공유하게 되므로 보안상 취약할 수 있습니다.
sudo vs. su 비교
| 특징 | sudo | su |
| 권한 획득 | 명령어 1회만 root 권한으로 실행 | 셸 전체를 다른 사용자로 전환 |
| 필요 비밀번호 | 자신의 비밀번호 | 전환할 사용자의 비밀번호<br>(주로 root 비밀번호) |
| 보안성 | 우수 (기록이 남고, 비밀번호 공유 불필요) | 취약 (root 비밀번호 공유 가능성) |
| 사용 편의성 | 복잡한 관리 작업에 부적합 | 여러 관리 명령어를 연속으로 실행할 때 편리 |
결론: 어떤 명령어를 사용해야 할까?
현대 리눅스 시스템에서는 sudo를 사용하는 것이 권장됩니다.
- 보안: sudo는 root 비밀번호를 공유하지 않아도 되며, 모든 활동을 로그로 남겨 누가 어떤 작업을 했는지 명확하게 알 수 있습니다.
- 세분화된 권한 관리: sudoers 파일을 통해 특정 사용자에게 특정 명령어에 대한 root 권한만 부여하는 등 세밀한 권한 제어가 가능합니다.
su는 부득이하게 root 권한으로 여러 작업을 연속적으로 수행해야 할 때만 사용하고, 일반적인 상황에서는 sudo를 사용하는 것이 바람직합니다.
'기타' 카테고리의 다른 글
| 06. FG BG nohup & (0) | 2025.08.28 |
|---|---|
| 05. 파일 복사 / 이동 (0) | 2025.08.28 |
| 04. 파일 권한 및 파일 관리 (2) | 2025.08.28 |
| 03. 프로세스 (관리) (0) | 2025.08.28 |
| 02. shell과 환경변수 (2) | 2025.08.28 |