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
: 홈X$ sudo useradd jenkins # jenkins 라는 유저 등록
$ 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일 기준으로 일수로 표시 |