
uid, Group은 gid로 구분한다.
위 계정(pllpokko)의 uid = 1001, gid = 1001gid)에 속하고, 다른 그룹에 소속되고 싶으면 2차 그룹으로 들어가는 것이지 gid를 바꾸는 것이 아니다.
gid = 27)은 parallels, pllpokko 라는 User를 멤버로 가지고 있다.uid가 없는 즉, User가 아니다.sudo 권한을 가지고 있다.sudo 권한을 가지게 된다.
gid)을 가지면서, 2차 적으로 다른 그룹에 속할 수 있다.(gid가 바뀌는게 아님!!)$ sudo usermod -G <그룹> <계정>: 유저 계정의 2차 그룹은 '딱 한개만' 들어가게 함$ sudo usermod -aG <그룹> <계정>: 유저 계정 2차 그룹 '여러개' 들어갈 수 있게함
$ usermod -aG sudo <USER>
$ adduser : 홈O$ sudo adduser <USER ID>
$ useradd와 다르게 홈디렉터리 만들어줌$ sudo adduser pllpokko # pllpokko라는 계정 추가
Adding user `pllpokko' ...
Adding new group `pllpokko' (1000) ...
Adding new user `pllpokko' (1000) with group `pllpokko' ...
UID와 GID를 따로 지정하지 않으면, 1000부터 배정해준다.
$ sudo adduser --uid <UID> [--ingroup <GROUP> | --gid <GID>] <USER ID>
--uid <UID>: 사용자 UID를 강제로 지정한다.--ingroup <GROUP>: 새로운 유저를 추가하며, 유저는 동일한 이름의 그룹에 포함된다. 하지만 이 옵션을 사용하면 <GROUP>그룹에 강제 포함된다. 아래 --gid 옵션과는 mutually exclusive option--gid <GID>: 강제로 GID에 포함 시킨다. 위 --ingroup 옵션과는 mutually exclusive option$ useradd : 홈X
useradd의 기본 옵션 | |
|---|---|
-u | 기존 사용자 UID 다음번째 UID 생성 |
-g | 사용자 이름과 동일한 그룹 생성 |
-c | Comment 없음 |
-d | /home/$USER 디렉토리 생성 |
-s | /bin/bash 지정 |
useradd 사용 예$ useradd -u 1000 -g users -c "Test User" -d /users/user01 -s /bin/ksh user01| short 옵션 | long 옵션 | 설명 |
|---|---|---|
| --badnames | 잘못된 이름 확인 하지 않음 | |
| -b | --base-dir BASE_DIR | 새 계정의 홈 디렉토리에 대한 base 디렉토리 |
| --btrfs-subvolume-home | 홈 디렉토리를 BTRFS 서브볼륨으로 사용 | |
| -c | --comment COMMENT | 주석 정보 |
| -d | --home-dir HOME_DIR | 새 계정의 홈 디렉토리 |
| -D | --defaults | print or change default useradd configuration |
| -e | --expiredate EXPIRE_DATE | 계정 만료 날짜 |
| -f | --inactive INACTIVE | 새로운 계정의 암호 미사용 기간 |
| -g | --gid GROUP | 새로운 계정의 기본 그룹 이름 또는 ID |
| -G | --groups GROUPS | 새로운 계정의 보조 그룹 목록 |
| -h | --help | display this help message and exit |
| -k | --skel SKEL_DIR | use this alternative skeleton directory |
| -K | --key KEY=VALUE | override /etc/login.defs defaults |
| -l | --no-log-init | 마지막로그와 실패 로그 데이터베이스에 사용자 추가하지 않음 |
| -m | --create-home | 사용자 홈 디렉토리 생성 |
| -M | --no-create-home | 사용자 홈 디렉토리 생성X |
| -N | --no-user-group | 사용자 이름과 동일한 그룹 생성하지 않음 |
| -o | --non-unique | 중복된 (비고유) UID로 사용자 생성 허용 |
| -p | --password PASSWORD | 새로운 계정의 암호화된 비밀번호 |
| -r | --system | 시스템 계정 생성 |
| -R | --root CHROOT_DIR | chroot로 들어갈 디렉토리 경로 |
| -P | --prefix PREFIX_DIR | /etc 디렉토리 하위에 위치한 파일들이 있는 prefix 디렉토리 |
| -s | --shell SHELL | 새 계정의 로그인 쉘 |
| -u | --uid UID | 새 계정의 UID |
| -U | --user-group | 사용자 이름과 동일한 그룹 생성 |
| -Z | --selinux-user SEUSER | 특정 SELinux 사용자 매핑을 위한 SEUSER 사용 |
| --extrausers | 추가 사용자 데이터베이스 사용 |
$ usermod: user 관리| usermod 예제들 | 설명 | ex |
|---|---|---|
| 모두 sudo 권한이 필요하다 | - | - |
usermod [현재 계정] -l [바꿀 계정] | 계정명을 바꿀 계정명 으로 변경합니다. (사용 권장하지 않음) | |
usermod -u [지정할 UID] [USER] | USER의 UID를 지정할 UID로 넣어 바꿈 | $ usermod -u 2002 mookymooky 계정의 UID를 2002로 바꾼다. |
| usermod -c <"이름"> <계정> | 계정의 이름을 변경합니다. | |
| usermod -d <"경로"> <계정> | 계정의 홈 디렉터리를 변경합니다. | |
| usermod -s <"셸"> <계정> | 계정의 로그인 기본 셸을 변경합니다. | |
| usermod -e <날짜> <계정> | 계정이 해당 날짜에 만료되도록 합니다. | $ sudo usermod -e 2018-05-01 myuser |
| usermod -g <그룹> <계정> | 사용자의 GID(기본 그룹)을 변경합니다. | $ sudo usermod -g pllpokko2 pllpokkopllpokko2그룹 <- pllpokko포함! ![]() |
| usermod -G <그룹> <계정> | 사용자의 GID는 그대로 두고, 사용자를 또 다른 그룹에 등록시킨다. | 1. $ sudo usermod -G sudo dhyang 2. $ sudo usermod -G wheel dhyang![]() ![]() - sudo그룹에선 빠지고 wheel 그룹에만 들어가있다. |
| usermod -aG <그룹> <계정> | 사용자의 GID는 그대로 두고 사용자가 또 다른 그룹에 등록되어 있는 상태에서 또다시 그룹에 등록 시킨다 | $ sudo usermod -aG sudo pllpokkosudo 그룹에 pllpokko user를 추가 $ usermod -aG staff,docker jenkinsstaff,docker 그룹에 jenkins user추가 $ sudo usermod -aG sudo dhyang$ sudo usermod -aG wheel dhyang- 위에 -G 옵션만 썼을 때와는 다르게 둘다 들어가있음 ![]() |
$ sudo usermod -aG sudo <USER_ID[,USER_ID2,...]>
---- 사용 예 ----
$ sudo usermod -aG sudo pllpokko # pllpokko는 USER ID
,로 구분하면 된다.여기 까지는 pllpokko라는 유저가 sudo 명령을 사용가능 하나 유저 password 요구한다.
/etc/passwd 파일을 출력해보면 확인 가능cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
① ②③④ ⑤ ⑥ ⑦
① 필드 1 : 사용자명
② 필드 2 : 패스워드(/etc/shadow 파일에 암호화되어 있음)
③ 필드 3 : 사용자 계정 uid
④ 필드 4 : 사용자 계정 gid
⑤ 필드 5 : 사용자 계정 이름(정보)
⑥ 필드 6 : 사용자 계정 홈 디렉토리
⑦ 필드 7 : 사용자 계정 로그인 쉘

/etc/shadow 파일에 별도로 보관한다. 이 항목은 역사적인 이유로 이전 프로그램과의 호환성을 위해 그대로 유지하고 있다.
root 사용자의 경우 UID, GID 모두 0이다.
nobody 사용자는 권한이 없는 사용자다. 프로세스가 nobody로 실행이 될 수는 있지만 시스템에 어떤 것도 기록할 수 없다.$ passwd/etc/passwd와 소통하여 변경함$ passwd <user>를 사용하면, 다른 <user>의 비밀번호를 바꿀 수 있다.root:~ $ passwd jenkins # jenkins의 패스워드를 바꾼다.
$ chpasswdecho '아이디:패스워드' | chpasswd
아이디의 비밀번호를 바로 바꿔버린다.echo "root:1234" | chpasswd # root의 pw를 1234로 바꿔버린다.
echo "jenkins:3333" | chpasswd # jenkins의 pw를 3333로 바꿔버린다.
echo "${user}:${pw}" | chpasswd # 쉘 변수 ${user}의 비밀번호를 쉘 변수 ${pw}로 바꾼다.
/etc/group/etc/group 파일은 그룹 ID를 정의한다.root:*:0:juser
daemon:*:1:
bin:*:2:
sys:*:3:
adm:*:4:
disk:*:6:juser,beazley
nogroup:*:65534:
user:*:1000:
: 에 의해 구분되며 아래의 정보를 포함한다.$ groups
$USER는 parallels인데, 자기 자신 그룹인 parallels에도 속하고 adm, cdrom, sudo, dip, plugdev, lxd 그룹에도 속함getty와 login/dev/tty1을 실행할 경우 보통 다음과 같은 형태로 나타난다.$ ps ao args | grep getty
/sbin/getty 38400 tty1
getty는 login 프로그램으로 전환되면서 비밀번호를 요구한다.login은 exec()를 사용하여 셸로 전환한다.요즘 대부분의 사용자들은 gdm과 같은 그래픽 인터페이스를 통해 로그인하거나, SSH 원격 접속한다.
gdm, ssh 모두 getty나 login을 사용하지 않는다.
대부분 PAM이 제어한다.
$ deluser: 계정명으로 삭제$ sudo deluser <계정 명> [--remove-home] [--remove-all-files]

$ userdel: UID로 삭제$ sudo userdel <제거할 UID>
/etc/shadow: 암호화된 패스워드와 패스워드 설정 정책이 기재되어 있음salt$encrypted_password
$1: User 명$2: 암호 해시 id, 번호에 따라 아래의 의미를 나타 냄| Field | Description |
|---|---|
| 1번 필드 | User 명 |
| 2번 필드 | ![]() $암호 해시$salt$encrypted_password$암호해시 - $1: MD5 (가장 취약한 일방향 해쉬, 요즘 안쓰임) - $2: BlowFish - $5: SHA-256 - $6: SHA-512 $salt - 각 해시에 첨가할 랜덤 값. 이 랜덤 값에 따라 해시의 값이 바뀜 $encrypted_password - 각 알고리즘과 salt로 패스워드를 암호화한 값 특수 기호 - *: 패스워드가 잠긴 상태, 로그인 불가. 별도의 인증방식을 사용해 로그인 할 수는 있음- !: 패스워드가 잠긴 상태이고 로그인을 할 수 없음. 또는 사용자를 생성하고 패스워드를 설정하지 않은 상태- empty : 패스워드가 설정되지 않았지만 로그인이 가능합니다. |
| 3번 필드 | 마지막으로 패스워드를 변경한 날을 1970년 1월 1일 기준 일 수 표시예시는 마지막으로 패스워드를 변경한 날이 1970년 1월 1일 이후 18829일 후 |
| 4번 필드 | 패스워드 최소 사용기간패스워드를 변경한 이후 최소 이 정도의 기간은 써야한다는 것을 의미 |
| 5번 필드 | 패스워드 최대 사용기간 90일을 권장 |
| 6번 필드 | 경고, 패스워드 만료 이전에 경고할 경고 일수를 의미 |
| 7번 필드 | 비활성화, 패스워드가 만료된 이후에 계정이 잠기기 전까지 비활성 일수(date) |
| 8번 필드 | 만료일, 계정 만료일 필드. 1970년 1월 1일 기준으로 일수로 표시 |
