Linux 계정 생성 및 관리

이동명·2023년 10월 26일
0

Cent OS

목록 보기
3/13
post-thumbnail

리눅스 계정

  • root 로그인이 가능한 관리자 계정, 모든 권한을 수행할 수 있다.
  • system 시스템 운영에 필요한 계정, 로그인이 불가능하다.
  • user 로그인이 가능한 일반 계정, 모든 권한을 수행할 수 없다. (권한이 제한되어 있음)
whoami -> 로그인해서 사용하고 있는 계정
-> root

계정 관련 파일

  • /etc/passwd 계정 전체 정보를 관리하는 파일
  • /etc/shadow 계정 패스워드 정보 및 계정 사용 관련 기간를 관리하는 파일
  • /etc/group 계정 그룹 정보를 관리하는 파일
cat /etc/passwd | head -1
->  root:x:0:0:root:/root:/bin/bash

출력된 값을 찢어서 해석해보자

root - 계정 이름
x - 패스워드, /etc/shadow 파일에서 관리 -> 출력이 안되고 x 로 되어있음.(예전 linux에선 나왔다고 한다)
0 - 계정 식별자(UID)
0 - 그룹 식별자(GID)
root - 계정 주석
/root - 계정 홈 디렉토리
/bin/bash - 계정이 사용하는 쉘 유형


cat /etc/passwd | grep ^user
-> 

user1:x:1001:1001::/home/user1:/bin/bash
user2:x:1002:1002::/home/user2:/bin/bash

이 값도 찢어보자

user1 - 계정 이름
x - 패스워드, /etc/shadow 파일에서 관리
1001 - 계정 식별자(UID)
1001 - 그룹 식별자(GID)
:: - 계정 주석, 현재 주석 설정이 없음
/home/user1 - 계정 홈 디렉토리
/bin/bash - 계정이 사용하는 쉘 유형


pwunconv
cat /etc/passwd | grep ^root
->
root:$6$SgMHvIfeF77pREHv$I3z/.A1cndO/PHxcbm32SwKfJTv/4BIZEfM.JdLVZltnV3OXdS6WXCWfNV8miI3RbVuyQ
sIBlwaWREXnsDMvN1:0:0:root:/root:/bin/bash

이렇게 password 를 노출 할 수 있음. 원래는 centOS 5 이하에서는 이게 default 였는데 보안상의 문제로 지금의 설정으로 바뀌었다고 함.

/etc/default/useradd

  • 계정 생성시 필요한 기본값 정보들이 설정되어 있는 파일이다.

cat /etc/default/useradd -> useradd -D 해도 나옴

/etc/skel

  • 계정 생성시 계정 홈 디렉토리에 복사되는 파일 및 디렉토리를 관리하는 디렉토리이다
ls -a /etc/skel
-> . .. .bash_logout .bash_profile .bashrc .mozilla .vimrc

ls -a /home/user1
-> . .. .bash_logout .bash_profile .bashrc .mozilla .vimrc

ls -a /home/user2
-> . .. .bash_logout .bash_profile .bashrc .mozilla .vimrc

- /etc/skel 디렉토리에 'readme.txt' 파일을 생성한다.

echo 1111 > /etc/skel/readme.txt
ls -a /etc/skel 
-> . .. .bash_logout .bash_profile .bashrc .mozilla .vimrc readme.txt

- test 계정을 생성하여 홈 디렉토리를 확인한다.

useradd test
ls -a /home/test
-> . .. .bash_logout .bash_profile .bashrc .mozilla .vimrc readme.txt

- 생성되는 계정에 대해서 공통적으로 적용되는 내용과 파일 및 디렉토리가 있다면, /etc/skel 디렉토리에  작업을 미리 하면 된다. 
(Ex : 공지사항 문서, .bashrc, .bash_profile, .bash_logout)

계정 생성

  • 기본값으로 test1 계정 생성
useradd test1

cat /etc/passwd | grep test1
-> 만든 계정 나옴
  • 홈 디렉토리를 /var/test2 으로 test2 계정 생성
useradd -d /var/test2 test2

cat /etc/passwd | grep test*-
->
test1:x:1003:1003::/home/test1:/bin/bash
test2:x:1004:1004::/var/test2:/bin/bash

test2 는 /var/test2 지정한 경로에 나옴
  • 홈 디렉토리를 /var/test3 으로 생성 및 'sh' 쉘으로 test3 계정 생성
useradd -d /var/test3 -s /bin/sh test3

cat /etc/passwd | grep test*
-> test3:x:1005:1005::/var/test3:/bin/sh
bash shell 이 아니라 origin shell 사용
  • 계정 만료 날짜 및 주석을 설정하여 test4 계정 생성
useradd -e 2030-12-24 -c "hong gil dong" test4

cat /etc/shadow | grep test*
-> test4:!!:19661:0:99999:7::22272:
1970-01-01 기준으로 22272만큼 지난날짜가 만료날짜

인증

date -d "1970-01-01 + 22272 days"
-> 2030. 12. 24. () 00:00:00 KST

  • 계정 식별자를 2000 으로 test5 계정 생성
useradd -u 2000 test5

# cat /etc/passwd | grep test*
-> test5:x:2000:2000::/home/test5:/bin/bash

계정 수정

계정 쉘 변경


usermod -s /bin/bash test3
-> bash 쉘로 변경하고싶음.

계정 만료 기간 삭제 및 주석 변경


usermod -e "" -c "park chan ho" test4

계정 식별자 및 그룹 식별자 변경


usermod -u 1007 test5
groupmod -g 1007 test5

계정 삭제

  • '-r' 옵션을 사용하면 계정 홈 디렉토리까지 삭제한다
[root@Client1 /root]# userdel -r test1
[root@Client1 /root]# userdel -r test2
[root@Client1 /root]# userdel -r test3
[root@Client1 /root]# userdel -r test4
[root@Client1 /root]# userdel -r test5

cat /etc/passwd | grep test 
-> 확인

'/etc/shadow' 파일

  • /etc/shadow 파일 내용 해석

cat /etc/shadow | grep ^user1 -> user1 로 시작하는거 

->  user1:$6$qkvedE0tpNbgpOvK$FBivf.wQR2dBJhxugmf..U3hgkdaloBI8d0S.JqpUU/aP6uPG8LEKEMLLyKYJAtEtI5pY7z
czZpBdkD8zRpiZ0:19076:0:99999:7:::

해석해보자..

user1 계정

:$6 : SHA-512

$qkvedE0tpNbgpOvK : Salt 키(Hash값이 동일하게 나오는걸 방지 하기 위함)

$FBivf.wQR2dBJ ~ 중간 생략 ~ : SHA-512 를 이용하여 솔트키+패스워드를 해시값으로 생성한 계정패스워드

:19076 최근에 패스워드를 설정/변경한 날짜 (197011 일 기준으로 계산 date -d "1970-01-01 + 19076 day")

:0 패스워드를 변경할 수 없는 기간(0 이면 변경할 수 있음)

:99999 패스워드를 사용할 수 있는 기간(99999 이면 계속 사용 가능)
 (197011 일 기준으로 계산, date -d "1970-01-01 + 99999 day")
 
:7 패스워드 기간 만료 7 일전 알림

:: 계정 만료 기간

패스워드 날짜 및 기간 기본값 변경


[root@Client1 /root]# useradd test
[root@Client1 /root]# passwd test



cat /etc/shadow | grep test
-> test:$6$2c5ouDGZs5cNFW9l$lrIi4tlfXpg5ZPHzDIABANAhrT0WeJHDEMnxCreLWlKmGfioKsdeKOrDVIBrgB1QzuTsETyDDeYPEM3LQjQzc1:19661:0:99999:7:::

chage test

test 의 사용기한 정보를 바꿉니다

 암호의 최소 유효 기간 [0]: 3 ( 3일 동안 못바꿈 )
 암호의 최대 유효 기간 [99999]: 14
 마지막으로 암호를 바꾼 날 (YYYY-MM-DD) [2022-03-25]: 엔터
 암호 사용만료 예고 [7]: 14
 암호를 사용할 수 없음 [-1]: 10
 계정 만료 날짜 (YYYY-MM-DD) [-1]: 2030-12-24
 
 위 처럼 설정해주고..
 
 cat /etc/shadow | grep test 
 -> 
 test:$6$MkqRRUb3EtVmOtJI$kHge0WomjJ3Pr6dTEYOzcLUyzty.2PbcVeWcYwkhRBFlVtCqp8eT2gIVrvX1cikWuQeY6
dCsfZz3HYTAWNy7F/:19394:3:14:14:10:22272:

끝에 바뀐 모습.

Salt 키를 이용한 해시값 생성

Salt 키 필요성

  • 동일한 패스워드 문자를 해시하면 동일한 해시 값이 나오는 문제가 발생한다.

  • 그렇기 때문에 해시값을 Rainbow Table(평문과 해시값이 매칭된 정보)에 매칭시켜 평문 패스워드 문자를 예측할 수 있다.


echo "centos" | sha512sum -> "centos"라는 문자열을 SHA-512 해시 값으로 변환하여 출력
-> 0ea213161dfd62dee1e4cc1f7341f3091e75f8d45b6d37256ebaa96d0e0bedd382fea9f04e05a4e791c1a629d91876e6f09154ec7dd1c9609abff83cb22e48f3  -


echo "centos" | sha512sum | cut -c1-64
->
"centos" 문자열을 SHA-512 해시로 변환하고, 그 해시 값을 출력한 뒤 처음 64자를 추출하여 보여줌

-> 0ea213161dfd62dee1e4cc1f7341f3091e75f8d45b6d37256ebaa96d0e0bedd3


[root@Client1 /root]# perl -e 'print crypt("centos","\$6\$123\$") . "\n"' > user1.txt
[root@Client1 /root]# perl -e 'print crypt("centos","\$6\$456\$") . "\n"' > user2.txt 

둘 다 똑같을 것이다.

[root@Client1 /root]# perl -e 'print crypt("centos","\$6\$123\$") . "\n"' > user1.txt
[root@Client1 /root]# perl -e 'print crypt("centos","\$6\$456\$") . "\n"' > user2.txt 

cat user1.txt
-> $6$123$HOFtEBUxYT7oKzBHYhjdLQkKC2GqJ2mFBGdedkYXmoSvp/Aca5HEuStkZuTWjas4k0IsjB9uz.fZo1TSdRpCh.

cat user2.txt
-> $6$456$J8QKFpVN4lxSHxdc6Cv3dR5/CSL32u/8/hyOcLFXg4fUpVUHjMGQKhUej93Dqb/FVPMO5.YuLK6/A6VqY6W
XL0

둘이 다를 수 밖에 없음 salt 키 사용했으니..

group 추가/변경/삭제


[root@Client1 /root]# useradd test1
[root@Client1 /root]# useradd test2
[root@Client1 /root]# useradd test3
[root@Client1 /root]# cat /etc/passwd | grep test*


->

test1:x:1003:1003::/home/test1:/bin/bash
test2:x:1004:1004::/home/test2:/bin/bash
test3:x:1005:1005::/home/test3:/bin/bash

  • 'groupadd' 명령어를 이용하여 그룹을 추가할 수 있다.

[root@Client1 /root]# groupadd test
[root@Client1 /root]# cat /etc/group | tail -1

-> test:x:1006:
  • 'groupmod' 명령어와 '-n' 옵션을 이용하여 그룹 이름을 변경할 수 있다.

[root@Client1 /root]# groupmod -n testuser test
[root@Client1 /root]# cat /etc/group | tail -1

-> testuser:x:1006:

groups test1 test2 test3

->

test1 : test1
test2 : test2
test3 : test3

  • 여러 사용자를 하나의 그룹으로 구성하는 경우

[root@Client1 /root]# usermod -g testuser test1
[root@Client1 /root]# usermod -g testuser test2
[root@Client1 /root]# usermod -g testuser test3

cat /etc/passwd | grep test*
->

test1:x:1003:1006::/home/test1:/bin/bash
test2:x:1004:1006::/home/test2:/bin/bash
test3:x:1005:1006::/home/test3:/bin/bash

전부 1006groups test1 test2 test3
->

test1 : testuser
test2 : testuser
test3 : testuser

  • 사용자 계정을 여러개의 그룹으로 구성하는 경우

[root@Client1 /root]# groupadd linux1
[root@Client1 /root]# groupadd linux2
[root@Client1 /root]# groupadd linux3
[root@Client1 /root]# useradd -g linux1 -G linux2,linux3 centos

groups centos

-> centos : linux1 linux2 linux3
profile
Web Developer

0개의 댓글