whoami -> 로그인해서 사용하고 있는 계정
-> root
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 였는데 보안상의 문제로 지금의 설정으로 바뀌었다고 함.
cat /etc/default/useradd -> useradd -D 해도 나옴
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)
useradd test1
cat /etc/passwd | grep test1
-> 만든 계정 나옴
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 지정한 경로에 나옴
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 사용
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
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
[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
-> 확인
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 최근에 패스워드를 설정/변경한 날짜 (1970 년 1 월 1 일 기준으로 계산 date -d "1970-01-01 + 19076 day")
:0 패스워드를 변경할 수 없는 기간(0 이면 변경할 수 있음)
:99999 패스워드를 사용할 수 있는 기간(99999 이면 계속 사용 가능)
(1970 년 1 월 1 일 기준으로 계산, 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 키 필요성
동일한 패스워드 문자를 해시하면 동일한 해시 값이 나오는 문제가 발생한다.
그렇기 때문에 해시값을 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 키 사용했으니..
[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
[root@Client1 /root]# groupadd test
[root@Client1 /root]# cat /etc/group | tail -1
-> test:x:1006:
[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
전부 1006번
groups 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