@ 04_계정 생성 및 관리
1. 리눅스 계정
- root 로그인이 가능한 관리자 계정, 모든 권한을 수행할 수 있다.
- system 시스템 운영에 필요한 계정, 로그인이 불가능하다.
- user 로그인이 가능한 일반 계정, 모든 권한을 수행할 수 없다. (권한이 제한되어 있음)
2. 계정 관련 파일
- /etc/passwd 계정 전체 정보를 관리하는 파일
- /etc/shadow 계정 패스워드 정보 및 계정 사용 관련 기간를 관리하는 파일
- /etc/group 계정 그룹 정보를 관리하는 파일
cat /etc/passwd
cat /etc/shadow
cat /etc/group
root 계정 이름
x 패스워드, /etc/shadow 파일에서 관리
0 계정 식별자(UID)
0 그룹 식별자(GID)
root 계정 주석
/root 계정 홈 디렉토리
/bin/bash 계정이 사용하는 쉘 유형
user1 계정 이름
x 패스워드, /etc/shadow 파일에서 관리
1001 계정 식별자(UID)
1001 그룹 식별자(GID)
:: 계정 주석, 현재 주석 설정이 없음
/home/user1 계정 홈 디렉토리
/bin/bash 계정이 사용하는 쉘 유형
3. '/etc/default/useradd' 파일
- 계정 생성시 필요한 기본값 정보들이 설정되어 있는 파일
4. '/etc/skel' 디렉토리
- 계정 생성시 계정 홈 디렉토리에 복사되는 파일 및 디렉토리를 관리하는 디렉토리이다.
[root@Client1 /root]# ls -a /home/user1
. .. .bash_logout .bash_profile .bashrc .mozilla .vimrc
[root@Client1 /root]# ls -a /home/user2
. .. .bash_logout .bash_profile .bashrc .mozilla .vimrc
Ex) /etc/skel
- readme.txt 파일을 /etc/skel 디렉토리에 생성한다.
[root@Client1 /root]# echo 1111 > /etc/skel/readme.txt
[root@Client1 /root]# ls -a /etc/skel
. .. .bash_logout .bash_profile .bashrc .mozilla .vimrc readme.txt
- test 계정을 생성하여 홈 디렉토리를 확인한다.
[root@Client1 /root]# useradd test
[root@Client1 /root]# ls -a /home/test
. .. .bash_logout .bash_profile .bashrc .mozilla .vimrc readme.txt
- 확인이 완료되었다면, test 계정을 삭제한다.
[root@Client1 /root]# userdel -r test
5. 계정 생성
useradd test1
기본값으로 test1 계정 생성
useradd -d /var/test2 test2
홈 디렉토리를 /var/test2으로 test2 계정 생성
useradd -d /var/test3 -s /bin/sh test3
홈 디렉토리를 /var/test3으로 생성 및 'sh' 쉘으로 test3 계정 생성
useradd -e 2022-12-24 -c "hong gil dong" test4
계정 만료 날짜 및 주석을 설정하여 test4 계정 생성
useradd -u 2000 test5
계정 식별자를 2000으로 test5 계정 생성
[root@Client1 /root]# cat /etc/passwd | grep test*
test1:x:1003:1003::/home/test1:/bin/bash
test2:x:1004:1004::/var/test2:/bin/bash
test3:x:1005:1005::/var/test3:/bin/sh
test4:x:1006:1006:hong gil dong:/home/test4:/bin/bash
test5:x:2000:2000::/home/test5:/bin/bash
[root@Client1 /root]# cat /etc/shadow | grep test*
test1:!!:19138:0:99999:7:::
test2:!!:19138:0:99999:7:::
test3:!!:19138:0:99999:7:::
test4:!!:19138:0:99999:7::19350:
test5:!!:19138:0:99999:7:::
[root@Client1 /root]# cat /etc/shadow | grep test4
test4:!!:19076:0:99999:7::19350:
[root@Client1 /root]# date -d "1970-01-01 + 19350 day"
2022. 12. 24. (토) 00:00:00 KST
6. 계정 수정
usermod -s /bin/bash test3
usermod -e "" -c "park chan ho" test4
usermod -u 1007 test5
groupmod -g 1007 test5
[root@Client1 /root]# cat /etc/passwd | grep test*
test1:x:1003:1003::/home/test1:/bin/bash
test2:x:1004:1004::/var/test2:/bin/bash
test3:x:1005:1005::/var/test3:/bin/bash
test4:x:1006:1006:park chan ho:/home/test4:/bin/bash
test5:x:1007:1007::/home/test5:/bin/bash
[root@Client1 /root]# cat /etc/shadow | grep test*
test1:!!:19076:0:99999:7:::
test2:!!:19076:0:99999:7:::
test3:!!:19076:0:99999:7:::
test4:!!:19076:0:99999:7:::
test5:!!:19076:0:99999:7:::
7. 계정 삭제
- '-r' 옵션을 사용하면 계정 홈 디렉토리까지 삭제한다.
userdel -r test1
userdel -r test2
userdel -r test3
userdel -r test4
userdel -r test5
[root@Client1 /root]# cat /etc/passwd | grep test*
[root@Client1 /root]# ls /home
fedora user1 user2
[root@Client1 /root]# ls /var
account cache db ftp gopher lib lock mail opt run tmp
adm crash empty games kerberos local log nis preserve spool yp
8. '/etc/shadow' 파일
- 계정 패스워드 관련 정보를 관리하는 파일
user1 계정
:$6 SHA-512 (man crypt 확인 가능)
$qkvedE0tpNbgpOvK Salt 키
$FBivf.wQR2dBJ ~ 중간 생략 ~ SHA-512를 이용하여 해시값으로 생성된 계정 패스워드
:19076 최근에 패스워드를 변경한 날짜(1970년 1월 1일 기준으로 계산, date -d "1970-01-01 + 19076 day")
:0 패스워드를 변경할 수 없는 기간
:99999 패스워드를 사용할 수 있는 기간(1970년 1월 1일 기준으로 계산, date -d "1970-01-01 + 99999 day")
:7 패스워드 기간 만료 7일전 알림
:: 계정 만료 기간
[참고] $id$salt$encrypted
If salt is a character string starting with the characters "$id$" fol-
lowed by a string terminated by "$":
$id$salt$encrypted
then instead of using the DES machine, id identifies the encryption
method used and this then determines how the rest of the password
string is interpreted. The following values of id are supported:
ID | Method | Salt Length | Salt bit
-----------------------------------------------------------------------------------------------------------------------
1 | MD5 | 8 | 64bit
2a | Blowfish (not in mainline glibc; added in some Linux distributions) | 8 | 64bit
5 | SHA-256 (since glibc 2.7) | 16 | 128bit
6 | SHA-512 (since glibc 2.7) | 16 | 128bit // 권장
So $5$salt$encrypted is an SHA-256 encoded password and
$6$salt$encrypted is an SHA-512 encoded one.
"salt" stands for the up to 16 characters following "$id$" in the salt.
The encrypted part of the password string is the actual computed pass-
word. The size of this string is fixed:
MD5 | 22 characters
SHA-256 | 43 characters
SHA-512 | 86 characters
The characters in "salt" and "encrypted" are drawn from the set
[a–zA–Z0–9./]. In the MD5 and SHA implementations the entire key is
significant (instead of only the first 8 bytes in DES).
- 패스워드 날짜 및 기간 기본값 변경
[root@Client1 /root]# useradd test
[root@Client1 /root]# passwd test / 패스워드는 'centos'로 설정 실시
[root@Client1 /root]# cat /etc/passwd | grep test
test:x:1003:1003::/home/test:/bin/bash
[root@Client1 /root]# cat /etc/shadow | grep test
test:$6$E01p1/ZVrwQlG/lf$9t2/Kwxt1PfX3H9ZxO4D4054HoJ/BDj6ybLRfNQE5bv4ewtbczoZiv1grQ39lDLz6RwP9/nlZJjrCF9sBlLqP.:19076:0:99999:7:::
[root@Client1 /root]# chage test
test의 사용기한 정보를 바꿉니다
새로운 값을 넣거나, 기본값을 원하시면 엔터를 치세요
암호의 최소 유효 기간 [0]: 3
암호의 최대 유효 기간 [99999]: 7
마지막으로 암호를 바꾼 날 (YYYY-MM-DD) [2022-03-25]:
암호 사용만료 예고 [7]: 14
암호를 사용할 수 없음 [-1]: 10
계정 만료 날짜 (YYYY-MM-DD) [-1]: 2023-12-31
[root@Client1 /root]# cat /etc/shadow | grep test
test:$6$E01p1/ZVrwQlG/lf$9t2/Kwxt1PfX3H9ZxO4D4054HoJ/BDj6ybLRfNQE5bv4ewtbczoZiv1grQ39lDLz6RwP9/nlZJjrCF9sBlLqP.:19076:3:7:14:10:19722:
[root@Client1 /root]# userdel -r test
9. Salt 키를 이용한 해시값 생성 - 중요!
1) Salt 키 필요성
- 동일한 패스워드 문자를 해시하면 동일한 해시 값이 나오는 문제가 발생한다.
[root@Client1 /root]# echo "centos" | sha512sum
0ea213161dfd62dee1e4cc1f7341f3091e75f8d45b6d37256ebaa96d0e0bedd382fea9f04e05a4e791c1a629d91876e6f09154ec7dd1c9609abff83cb22e48f3 -
[root@Client1 /root]# echo "centos" | sha512sum | cut -c1-64
0ea213161dfd62dee1e4cc1f7341f3091e75f8d45b6d37256ebaa96d0e0bedd3
[root@Client1 /root]# echo "centos" | sha512sum | cut -c1-64 > user1.txt
[root@Client1 /root]# echo "centos" | sha512sum | cut -c1-64 > user2.txt
[root@Client1 /root]# cat user1.txt
0ea213161dfd62dee1e4cc1f7341f3091e75f8d45b6d37256ebaa96d0e0bedd3
[root@Client1 /root]# cat user2.txt
0ea213161dfd62dee1e4cc1f7341f3091e75f8d45b6d37256ebaa96d0e0bedd3
[root@Client1 /root]# rm -rf user*
- 그렇기 때문에 해시값을 Rainbow Table(평문과 해시값이 매칭된 정보)에 매칭시켜 평문 패스워드 문자를 예측할 수 있다.
- 이때, 패스워드 문자에 Salt 키(랜덤 문자)를 덧붙여 해시를 하면, 각각 다른 해시값이 나오기 때문에 문제를 해결할 수 있다.
- 해시함수는 단방향이다.
사용자 패스워드 Salt 키 Salt 키+패스워드 해시값
user1 centos 123 123centos HOFtEBUxYT~
user2 centos 456 456centos J8QKFpVN4l~
[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]# cat user1.txt
$6$123$HOFtEBUxYT7oKzBHYhjdLQkKC2GqJ2mFBGdedkYXmoSvp/Aca5HEuStkZuTWjas4k0IsjB9uz.fZo1TSdRpCh.
[root@Client1 /root]# cat user2.txt
$6$456$J8QKFpVN4lxSHxdc6Cv3dR5/CSL32u/8/hyOcLFXg4fUpVUHjMGQKhUej93Dqb/FVPMO5.YuLK6/A6VqY6WXL0
[root@Client1 /root]# rm -rf user*
2) user1, user2 해시값 비교
[root@Client1 /root]# cat /etc/shadow | grep ^user
user1:$6$3xBvbc9tBsbDgv16$lHwsrULcdTlMyd6DEYYx4hKAB5FvQglNOQ8i.pKU6DuP.kF58WG5lwcA8IBVa6kRUDAWG5p4rROw/tJzC6O2G1:19136:0:99999:7:::
user2:$6$4xvzIQx0wvtSXMJW$mYzarKXZB1Hh.N.wG3xwDotw.iog7UP68t17E/6Wp0oTJsqVkUJWPIDduSTyoRptgIWnhTLXdSbKJxRBJ2jax1:19136:0:99999:7:::
[root@Client1 /root]# perl -e 'print crypt("centos","\$6\$user1 솔트키 값 입력\$") . "\n"'
$6$3xBvbc9tBsbDgv16$lHwsrULcdTlMyd6DEYYx4hKAB5FvQglNOQ8i.pKU6DuP.kF58WG5lwcA8IBVa6kRUDAWG5p4rROw/tJzC6O2G1
[root@Client1 /root]# perl -e 'print crypt("centos","\$6\$user2 솔트키 값 입력\$") . "\n"'
$6$4xvzIQx0wvtSXMJW$mYzarKXZB1Hh.N.wG3xwDotw.iog7UP68t17E/6Wp0oTJsqVkUJWPIDduSTyoRptgIWnhTLXdSbKJxRBJ2jax1
[참고] 해시킬러 사이트
- https://hashes.com/en/decrypt/hash
- NTLM 해시값 83785efbbef1b4cdf3260c5e6505f7d2261f738d 입력 -> Captcha Check 입력 -> SUBMIT & SEARCH 클릭
10. 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:1004::/home/test1:/bin/bash
test2:x:1004:1005::/home/test2:/bin/bash
test3:x:1005:1006::/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:
[root@Client1 /root]# 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
[root@Client1 /root]# 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
[root@Client1 /root]# 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
[root@Client1 /root]# groups centos
centos : linux1 linux2 linux3
- 실습 관련 계정 및 그룹 삭제
[root@Client1 /root]# cat /etc/passwd | tail -4
test1:x:1003:1006::/home/test1:/bin/bash
test2:x:1004:1006::/home/test2:/bin/bash
test3:x:1005:1006::/home/test3:/bin/bash
centos:x:1006:1007::/home/centos:/bin/bash
[root@Client1 /root]# cat /etc/group | tail -7
test1:x:1003:
test2:x:1004:
test3:x:1005:
testuser:x:1006:
linux1:x:1007:
linux2:x:1008:centos
linux3:x:1009:centos
[root@Client1 /root]# userdel -r test1
[root@Client1 /root]# userdel -r test2
[root@Client1 /root]# userdel -r test3
[root@Client1 /root]# userdel -r centos
[root@Client1 /root]# groupdel testuser
[root@Client1 /root]# groupdel test1
[root@Client1 /root]# groupdel test2
[root@Client1 /root]# groupdel test3
[root@Client1 /root]# groupdel linux1
[root@Client1 /root]# groupdel linux2
[root@Client1 /root]# groupdel linux3
[root@Client1 /root]# cat /etc/passwd | tail -2
user1:x:1001:1001::/home/user1:/bin/bash
user2:x:1002:1002::/home/user2:/bin/bash
[root@Client1 /root]# cat /etc/group | tail -2
user1:x:1001:
user2:x:1002:
Ex) 계정 및 그룹 생성
- user11, user12, user13 계정을 생성하여 'users123' 그룹에 포함
- user14 계정을 생성하여 'tester1', 'tester2' 그룹에 포함
- 예제가 완료된 이후 관련 계정 및 그룹을 삭제한다.
[root@Client1 /root]# userdel -r user11
[root@Client1 /root]# userdel -r user12
[root@Client1 /root]# userdel -r user13
[root@Client1 /root]# userdel -r user14
[root@Client1 /root]# groupdel users123
[root@Client1 /root]# groupdel user11
[root@Client1 /root]# groupdel user12
[root@Client1 /root]# groupdel user13
[root@Client1 /root]# groupdel tester1
[root@Client1 /root]# groupdel tester2
[root@Client1 /root]# cat /etc/passwd | tail -2
user1:x:1001:1001::/home/user1:/bin/bash
user2:x:1002:1002::/home/user2:/bin/bash
[root@Client1 /root]# cat /etc/group | tail -2
user1:x:1001:
user2:x:1002:
'리눅스' 카테고리의 다른 글
vi, vim 편집기 (0) | 2022.04.03 |
---|---|
압축 및 아카이빙 (0) | 2022.04.03 |
메타캐릭터 + 리다이렉션 (0) | 2022.04.03 |
기본 명령어 2 (0) | 2022.03.23 |
기본 명령어 (0) | 2022.03.19 |