[명령] adduser, usermod, 유저정보, deluser, /etc/passwd, /etc/shadow, chpasswd

markyang92·2021년 5월 14일
0

linux (ubuntu/debian)

목록 보기
5/37
post-thumbnail

User, Group

User

  • Linux에서 User, Group이 있으며, 실제로 User는 uid, Group은 gid로 구분한다.
    • 예: 위 계정(pllpokko)의 uid = 1001, gid = 1001
  • User기본 그룹(gid)에 속하고, 다른 그룹에 소속되고 싶으면 2차 그룹으로 들어가는 것이지 gid를 바꾸는 것이 아니다.

Group

  • sudo 그룹을 예를 들어보면,
    • sudo 그룹(gid = 27)은 parallels, pllpokko 라는 User를 멤버로 가지고 있다.
      • sudo 그룹은 '그룹'일 뿐, uid가 없는 즉, User가 아니다.
    • sudo 그룹은 말그대로 sudo 권한을 가지고 있다.
      - 이 그룹의 멤버들은 sudo 권한을 가지게 된다.

2차 그룹

  • User는 기본 그룹(gid)을 가지면서, 2차 적으로 다른 그룹에 속할 수 있다.(gid가 바뀌는게 아님!!)
  1. $ sudo usermod -G <그룹> <계정>: 유저 계정2차 그룹은 '딱 한개만' 들어가게 함
  2. $ sudo usermod -aG <그룹> <계정>: 유저 계정 2차 그룹 '여러개' 들어갈 수 있게함


sudo 권한은 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부터 배정해준다.

+ uid/gid 강제 지정

  • uid/gid 강제 지정 추가후 생성
$ 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 라는 유저 등록
  • UID, GID는 자동 배정
  • 홈 디렉토리 경로는 지정되어 있지만, 실제로 만들지는 않음

$ usermod: user 관리

  • usermod: usermod임! mode가 아님!!!!
usermod 예제들설명ex
모두 sudo 권한이 필요하다--
usermod [현재 계정] -l [바꿀 계정]계정명을 바꿀 계정명 으로 변경합니다.
(사용 권장하지 않음)
usermod -u [지정할 UID] [USER]USERUID지정할 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그룹에 user ID 추가
$ sudo usermod -aG sudo <USER_ID[,USER_ID2,...]>

---- 사용 예 ----
$ sudo usermod -aG sudo pllpokko	# pllpokko는 USER ID
  • 여러 ID에 sudo 권한을 부여 하려면 ,로 구분하면 된다.

여기 까지는 pllpokko라는 유저가 sudo 명령을 사용가능 하나 유저 password 요구한다.


/etc/passwd

  • 유저의 정보는 /etc/passwd 파일을 출력해보면 확인 가능
cat /etc/passwd

root:x:0:0:root:/root:/bin/bash
 ①  ②③④   ⑤    ⑥     ⑦

① 필드 1 : 사용자명
② 필드 2 : 패스워드(/etc/shadow 파일에 암호화되어 있음)
③ 필드 3 : 사용자 계정 uid
④ 필드 4 : 사용자 계정 gid
⑤ 필드 5 : 사용자 계정 이름(정보)
⑥ 필드 6 : 사용자 계정 홈 디렉토리
⑦ 필드 7 : 사용자 계정 로그인 쉘

  • x: 초기 UNIX 시스템에서 사용자 암호를 저장하던 항목이다. 요즘은 보안상의 이유로 사용자 암호를 /etc/shadow 파일에 별도로 보관한다. 이 항목은 역사적인 이유로 이전 프로그램과의 호환성을 위해 그대로 유지하고 있다.
  • UID: 사용자 ID 번호. 시스템이 사용자를 구별하기 위해 사용하는 번호이다.
    • 0~999, 65534: reserved UID. 시스템 사용자를 위한 UID이다.
      • 0(root), 1(daemon), 2(bin; 명령어 관리위한 계정), 7(lp; 프린트 서비스 관련 계정), 65534(nobody; 사용자의 UID로 NFS와 관련된 계정)
    • 1000~: 일반 사용자들의 UID는 1000번부터 부여된다.
    • 로그인 ID가 다르더라도 UID가 같다면 같은 사용자로 판단
  • GID: 그룹 ID. 리눅스에서는 사용자는 무조건 하나 이상의 그룹에 소속된다. 사용자의 기본 그룹은 사용자를 등록할 때 정해지며, 특별히 소속 그룹을 정하지 않으면 자동적으로 로그인 ID가 그룹으로 등록된다.

특수 사용자

  • root 사용자의 경우 UID, GID 모두 0이다.

  • nobody 사용자는 권한이 없는 사용자다. 프로세스가 nobody로 실행이 될 수는 있지만 시스템에 어떤 것도 기록할 수 없다.
    • 로그인 할 수 없는 사용자들을 의사-사용자(pseudo-users)라고 부른다.
    • 이들은 로그인 할 수 없지만 시스템은 그 사용자 ID로 프로세스를 시작할 수 있다.
    • 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

  • Unix의 groups는 특정 사용자들하고만 파일을 공유하고, 그 외 모든 사람들의 접근은 허용하지 않게 할 수 있다.
  • /etc/group 파일은 그룹 ID를 정의한다.
root:*:0:juser
daemon:*:1:
bin:*:2:
sys:*:3:
adm:*:4:
disk:*:6:juser,beazley
nogroup:*:65534:
user:*:1000:
  • : 에 의해 구분되며 아래의 정보를 포함한다.
    그룹명:그룹_비밀번호:그룹ID:추가회원

자신이 속한 그룹

$ groups

  • 현재 $USERparallels인데, 자기 자신 그룹인 parallels에도 속하고 adm, cdrom, sudo, dip, plugdev, lxd 그룹에도 속함

gettylogin

  • getty는 터미널에 연결되어 로그인 프롬프트를 나타내는 프로그램이다.
    • 대부분의 리눅스 시스템에서 getty는 시스템이 가상 터미널에 로그인할 때만 사용하는 것이라서 복잡하지 않다.
    • 프로세스 목록에서 /dev/tty1을 실행할 경우 보통 다음과 같은 형태로 나타난다.
$ ps ao args | grep getty
/sbin/getty 38400 tty1
  • 38400: baud rate

  1. 로그인 명을 입력하면 gettylogin 프로그램으로 전환되면서 비밀번호를 요구한다.
  2. 정확한 비밀번호를 입력하면 loginexec()를 사용하여 셸로 전환한다.

요즘 대부분의 사용자들은 gdm과 같은 그래픽 인터페이스를 통해 로그인하거나, SSH 원격 접속한다.
gdm, ssh 모두 gettylogin을 사용하지 않는다.
대부분 PAM이 제어한다.


유저 삭제

$ deluser: 계정명으로 삭제

$ sudo deluser <계정 명> [--remove-home] [--remove-all-files]

$ userdel: UID로 삭제

  • 해당 유저 삭제
$ sudo userdel <제거할 UID>

/etc/shadow

  • /etc/shadow: 암호화된 패스워드와 패스워드 설정 정책이 기재되어 있음

algorithmidalgorithm_idsalt$encrypted_password

  • $1: User 명
  • $2: 암호 해시 id, 번호에 따라 아래의 의미를 나타 냄
    • $1: MD5 (가장 취약한 일방향 해쉬, 요즘 안쓰임)
    • $2: BlowFish
    • $5: SHA-256
    • $6: SHA-512
FieldDescription
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일 기준으로 일수로 표시

불필요한 계정들

  • /etc/shadow에서 두 번째 필드를 '*'을 걍 삽입한다.
profile
pllpokko@alumni.kaist.ac.kr

0개의 댓글