uid
, Group은 gid
로 구분한다.pllpokko
)의 uid = 1001
, gid = 1001
gid
)에 속하고, 다른 그룹에 소속되고 싶으면 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
: 홈Xuseradd 의 기본 옵션 | |
---|---|
-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 mooky mooky 계정의 UID를 2002로 바꾼다. |
usermod -c <"이름"> <계정> | 계정의 이름을 변경합니다. | |
usermod -d <"경로"> <계정> | 계정의 홈 디렉터리를 변경합니다. | |
usermod -s <"셸"> <계정> | 계정의 로그인 기본 셸을 변경합니다. | |
usermod -e <날짜> <계정> | 계정이 해당 날짜에 만료되도록 합니다. | $ sudo usermod -e 2018-05-01 myuser |
usermod -g <그룹> <계정> | 사용자의 GID(기본 그룹)을 변경합니다. | $ sudo usermod -g pllpokko2 pllpokko pllpokko2그룹 <- 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 pllpokko sudo 그룹에 pllpokko user를 추가 $ usermod -aG staff,docker jenkins staff,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의 패스워드를 바꾼다.
$ chpasswd
echo '아이디:패스워드' | 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일 기준으로 일수로 표시 |