리눅스1> 2017.12.26_10일차- 사용자, shell
※ User Account Management (유저 계정 관리)
* 홈 디렉터리 vs. 일반 디렉터리
rm -rf /home/itbank // 홈 디렉터리
mkdir /home/itbank // 일반 디렉터리
* 관련 파일 리스트
1> /etc/login.defs
- 사용자와 그룹 생성에 관련된 기본 설정파일
2> /etc/passwd
- 사용자와 서비스 관련 정보 파일
3> /etc/shadow
- 사용자와 서비스 관련 비밀번호 정보 파일
4> /etc/group
- 그룹과 서비스 그룹 관련 정보 파일
5> /etc/gshadow
- 그룹과 서비스 그룹 관련 비밀번호 정보 파일
6> /home
- 사용자 홈 디렉터리 생성 경로
일반 사용자 홈 디렉터리 생성 경로 위치
[root@localhost itbank]# ls -l /home/
합계 0
drwx------. 5 itbank itbank 128 12월 22 14:55 itbank // 일반 사용자 집
7> /etc/skel
- 사용자 계정 생성시 사용자의 환경변수파일을 저장하고 있는 디렉터리(뼈대)
8> /etc/default/useradd
- 사용자 계정 생성시 기본 설정 파일
그룹관련 1개 있음. 나머지는 사용자 관련
/etc/login.defs 가 더 큰 개념임
그룹도 포함
* /etc/passwd 설명
itbank:x:1000:1000:dust:/home/itbank:/bin/bash
itbank : x : 1000 : 1000 : dust : /home/itbank : /bin/bash
itbank → 사용자 계정명
x → 사용자 계정의 비밀번호
(/etc/shadow 파일을 참고)
1000(왼쪽) → UID(User ID : 사용자 고유 식별자)
1000(오른쪽) → GID(Group ID : 그룹 고유 식별자)
(/etc/group 파일을 참고)
dust → 코멘트(부연설명)
/home/itbank→ itbank 사용자 계정의 홈 디렉터리 경로
/bin/bash → shell(명령어 해석기)
* shell(조개 껍데기; 통역사)
1> 의미
- 사용자 계정과 커널이 상호작용 할 수 있도록 도와주는 유틸리티
cpu << 커널 << 응용 pg << shell << 사용자
- 사용자 계정이 입력한 명령어를 커널이 이해할 수 있도록 변환해주는 역할
2> shell의 종류 확인
1) # cat /etc/shells
2) # echo $SHELL
3) # chsh -l
[option]
-l : shell의 목록
/bin/sh ①
/bin/bash ②
/sbin/nologin ③
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/bin/tcsh
/bin/csh
① /bin/sh
Bourn Shell
- 가장 오랜기간동안 모든 유닉스 시스템의 표준구성요소
- 강력한 명령 프로그래밍 언어 기능을 가짐
- 상호 대화형 방식을 취하고 있지 않음
- 복구모드에 사용
② /bin/bash
Bourn again shell
- 리눅스에서 가장 많이 사용되고 있는 셸
- Bourne Shell 과 C Shell 의 유용한 특징들을 통합(복합 셸)
- 리눅스의 표준적인 명령어 라인 인터페이스(상호연결, 명령어 줄 편집)
- 처음 로그인하면 기본으로 주어지는 셸
③ /sbin/nologin
- 시스템 셸. 즉 계정이 아닌 셸(지워도 안되고 접속할 필요도 없음!)
- C Shell(95%) + Korn Shell(5%) - C Shell 의 확장된 셸 ⑧ /bin/csh C Shell - 프로그래밍 언어 C를 기반으로 만들어지는 셸 - 상호 대화형 방식을 취하고 있음 - 크기가 커지고 처리속도가 느려졌다는 단점이 있지만 편리한 기능을 제공하고 있음 ⑨ /bin/ksh Korn Shell - 유닉스에서 대표적으로 가장 많이 사용되는 셸 - Bourne Shell 과 C Shell 의 기능을 확장시킨 셸 - 명령어 줄 편집 기능 cf) linux (bash) → [;lsdf;lksd;lfks;ldkf]# unix (ksh) → #
[root@localhost itbank]# cat /etc/shells [root@localhost itbank]# chsh -l // change shell // 현재 사용하고 있는 shel
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/bin/tcsh
/bin/csh
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/bin/tcsh
/bin/csh
[root@localhost itbank]# echo $SHELL
/bin/bash
[root@localhost itbank]# ls -l /bin
lrwxrwxrwx. 1 root root 7 9월 25 14:49 /bin -> usr/bin // 바로가기 파일
* /etc/shadow 설명
[root@localhost itbank]# cat /etc/shadow
itbank:$6$gicHu567$4dZc8e28FM1kAeu7O58QdPaexgfsV/4wOMWiM2X3zJRY55CPcu4AOERScJ1l97nNLTP7p17JJJiXrKblHG6IF.::0:99999:7:::
apache:!!:17434::::::
itbank:$6$gicHu567$4dZc8e28FM1kAeu7O58QdPaexgfsV/4wOMWiM2X3zJRY55CPcu4AOERScJ1l97nNLTP7p17JJJiXrKblHG6IF.
::0:
99999:7: : :
itbank → 사용자 계정명
$4dZc ~ lHG6IF → SHA512 알고리즘으로 비밀번호를 암호화
cf) !! or ! → 비밀번호 없음
공백(숫자) → 비밀번호 생성 일자
0 → 비밀번호 최소 변경 일 수(기본값으로 무제한)
99999 → 비밀번호 만료일(기본값으로 무제한)
7 → 비밀번호 만료일 되기 전 경고 일 수
(기본값으로 일주일)
공백(첫번째) → 유예기간(만료된 후)
공백(두번째) → 사용자 계정 사용 불가능하게 되는 날
공백(세번째) → 예약된 공간
* /etc/group 설명
[root@localhost itbank]# cat /etc/group
itbank:x:1000:
itbank : x : 1000 :
itbank → 그룹명
x → 그룹의 비밀번호
(/etc/gshadow)
1000 → GID(Group ID : 그룹 고유 식별자)
공백(첫번째) → 2차 그룹
cf. /etc/passwd
[root@localhost itbank]# cat /etc/passwd
itbank:x:1000:1000:dust:/home/itbank:/bin/bash
* /etc/gshadow 설명
[root@localhost itbank]# cat /etc/gshadow
itbank:!::
itbank :!: :
itbank → 그룹명
! → 그룹의 비밀번호
(로그인은 사용자 계정으로 하기 때문에 기본적으로 비밀번호가 없음)
공백(첫번째) → 그룹의 소유주(사용자 계정명)
공백(두번째) → 그룹의 구성원(사용자 계정명)
* 사용자 계정 생성
1> 사용자 게정 생성
[사용형식]
# useradd 계정명
→ 계정을 생성하는데 기본설정을 토대로 생성이 됨
# useradd [option] [argument] 계정명
→ 계정을 생성시 옵션 사용하여 해당 값을 주어서 생성함
[option]
-u : uid를 지정
-g : gid를 지정(그룹 배운 후)
-c : comment 를 지정
-s : shell을 지정
-d : 사용자 계정의 홈 디렉터리 생성할 경로를 지정
-p: 사용자 계정을 생성할 때 비밀번호와 같이 부여하여 생성
ex) useradd -p `openssl passwd 1` user6 // ` : 쿼터 (1앞에 키)
2> passwd
사용자 계정의 비밀번호 생성, 수정, 삭제 등등
[사용형식]
# passwd 입력 후 enter
→ 현재 로그인 되어 있는 사용자 게정의 비밀번호를 작업 // 관리자 비번
passwd 계정명
→ 지정한 계정명의 비밀번호를 작업(관리자만 허용)
// 사용자 계정 정보 확인
[root@localhost itbank]# tail -5 /etc/passwd
ntp:x:38:38::/etc/ntp:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
itbank:x:1000:1000:dust:/home/itbank:/bin/bash
linux1:x:1001:1001::/AS/Linux/linux1:/bin/bash
[root@localhost itbank]#
// 사용자 계정 추가
[root@localhost itbank]# useradd user1
[root@localhost itbank]#
[root@localhost itbank]# tail -5 /etc/passwd
tcpdump:x:72:72::/:/sbin/nologin
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
itbank:x:1000:1000:dust:/home/itbank:/bin/bash
linux1:x:1001:1001::/AS/Linux/linux1:/bin/bash
user1:x:1002:1002::/home/user1:/bin/bash
[root@localhost itbank]#
[root@localhost itbank]# ls -l /home/ // 사용자 등록 정보는 /home에 저장됨
합계 0
drwx------. 5 itbank itbank 128 12월 22 14:55 itbank
drwx------. 3 user1 user1 78 12월 26 14:17 user1
// 사용자 계정 비밀번호 정보 확인
[root@localhost itbank]# tail -5 /etc/shadow
tcpdump:!!:17434::::::
apache:!!:17434::::::
itbank:$6$gicHu567$4dZc8e28FM1kAeu7O58QdPaexgfsV/4wOMWiM2X3zJRY55CPcu4AOERScJ1l97nNLTP7p17JJJiXrKblHG6IF.::0:99999:7:::
linux1:$6$USFNU/r1$GQfl/8apsdiSqDuC1DDdYyN8zP3smcobT9SJbvtqTJmn0Wk74P5JoPw.WSqPhjtweFtzfhpiDy8bpUdLusBjU/:17522:0:99999:7:::
user1:!!:17526:0:99999:7::: // 17526 => 1970.1.6 ~ 현재 날짜
// 그룹 정보 확인
[root@localhost itbank]# tail -5 /etc/grouptcpdump:x:72:
apache:x:48:
itbank:x:1000:
linux1:x:1001:
user1:x:1002:
// uid 지정 등록
[root@localhost itbank]# useradd -u 1004 user2[root@localhost itbank]#
[root@localhost itbank]# tail -5 /etc/passwd
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
itbank:x:1000:1000:dust:/home/itbank:/bin/bash
linux1:x:1001:1001::/AS/Linux/linux1:/bin/bash
user1:x:1002:1002::/home/user1:/bin/bash
user2:x:1004:1004::/home/user2:/bin/bash
// comment 지정 등록
[root@localhost itbank]# useradd -c testuser user3
[root@localhost itbank]#
[root@localhost itbank]# tail -5 /etc/passwd
itbank:x:1000:1000:dust:/home/itbank:/bin/bash
linux1:x:1001:1001::/AS/Linux/linux1:/bin/bash
user1:x:1002:1002::/home/user1:/bin/bash
user2:x:1004:1004::/home/user2:/bin/bash
user3:x:1005:1005:testuser:/home/user3:/bin/bash
// shell 지정 등록
[root@localhost itbank]# useradd -s /bin/sh user4 // Bourn Shell로 지정
[root@localhost itbank]#
[root@localhost itbank]# tail -5 /etc/passwd
linux1:x:1001:1001::/AS/Linux/linux1:/bin/bash
user1:x:1002:1002::/home/user1:/bin/bash
user2:x:1004:1004::/home/user2:/bin/bash
user3:x:1005:1005:testuser:/home/user3:/bin/bash
user4:x:1006:1006::/home/user4:/bin/sh
// 디렉터리 지정 생성
[root@localhost itbank]# mkdir /bonwon
[root@localhost itbank]#
[root@localhost itbank]# useradd -s /bin/csh -d /bonwon/userfive user5 // 집이름 == 계정이름 동일하게!!!
↑경로 ↑집이름 ↑계정이름
[root@localhost itbank]#
[root@localhost itbank]# tail -6 /etc/passwd
linux1:x:1001:1001::/AS/Linux/linux1:/bin/bash
user1:x:1002:1002::/home/user1:/bin/bash
user2:x:1004:1004::/home/user2:/bin/bash
user3:x:1005:1005:testuser:/home/user3:/bin/bash
user4:x:1006:1006::/home/user4:/bin/sh
user5:x:1007:1007::/bonwon/userfive:/bin/csh
// 비밀번호 지정 등록
[root@localhost itbank]# useradd -p `openssl passwd 1` user6 // ` : 쿼터 (1앞에 키)[root@localhost itbank]#
[root@localhost itbank]# tail -7 /etc/passwd
linux1:x:1001:1001::/AS/Linux/linux1:/bin/bash
user1:x:1002:1002::/home/user1:/bin/bash
user2:x:1004:1004::/home/user2:/bin/bash
user3:x:1005:1005:testuser:/home/user3:/bin/bash
user4:x:1006:1006::/home/user4:/bin/sh
user5:x:1007:1007::/bonwon/userfive:/bin/csh // csh == bash
user6:x:1008:1008::/home/user6:/bin/bash // 비번 : 1 등록 후 접속 테스트
// passwd
[root@localhost ~]# passwd user4
user4 사용자의 비밀 번호 변경 중
새 암호: // 1
잘못된 암호: 암호가 앞뒤 어느쪽에서 읽어도 같은 문맥임
새 암호 재입력:
passwd: 모든 인증 토큰이 성공적으로 업데이트 되었습니다.
[root@localhost ~]#
[root@localhost ~]# tail -7 /etc/shadow
user1:!!:17526:0:99999:7:::
user2:!!:17526:0:99999:7:::
user3:!!:17526:0:99999:7:::
user4:$6CmKOapIW$hfw//R5mQdKrmZwK2VGX/nVdLyxSS2eZlQMrk5jPc80trX9FKVMEoXB9naDy.A125al/ZWLOVnEFDEgB5CYr1.:17526:0:99999:7:::
user5:!!:17526:0:99999:7:::
user6:mIMYR2Uu9xNHw:17526:0:99999:7:::
user7:$6$TcklimGa$aj3NRDEKQq4mZjmPIjU2SmrUKX1mhlxG3ridDA9hlrP0jIR22lbuUXDtqJ3GQaqYGmJyXda1OeS2rqKDLgxmC1:17526:0:99999:7:::
[root@localhost ~]#
// user4 : passwd 이용
// user6 : -p 옵션 이용
// user6의 암호화 길이가 너무 짧다
// => # passwd 계정명 이용할 것!
// user4, user5, user6 접속 후 (본 쉘, c 쉘, bash 쉘)
// 1) 접속 후 shell 형태
// 2) alias 결과값 비교
[root@localhost ~]# tail -7 /etc/passwd
user1:x:1001:1001::/home/user1:/bin/bash
user2:x:1004:1004::/home/user2:/bin/bash
user3:x:1005:1005:testuser:/home/user3:/bin/bash
user4:x:1006:1006::/home/user4:/bin/sh // Bourn Shell
user5:x:1007:1007::/bonwon/user5:/bin/csh // C Shell
user6:x:1008:1008::/home/user6:/bin/bash // Bourn again shell
user7:x:1009:1009::/home/user7:/bin/bash
[root@localhost ~]#
=> 접속 후 형태가 비슷한 것도 있고 (csh == bash) 다른 것도 있지만 (sh)
명령어의 결과는 다 다르다.
// skel 개념
[root@localhost ~]# ls -l /etc/skel
합계 0
[root@localhost ~]#
[root@localhost ~]# touch /etc/skel/junga
[root@localhost ~]#
[root@localhost ~]# useradd user77
[root@localhost ~]#
[root@localhost ~]# tail -8 /etc/passwd
user1:x:1001:1001::/home/user1:/bin/bash
user2:x:1004:1004::/home/user2:/bin/bash
user3:x:1005:1005:testuser:/home/user3:/bin/bash
user4:x:1006:1006::/home/user4:/bin/sh
user5:x:1007:1007::/bonwon/user5:/bin/csh
user6:x:1008:1008::/home/user6:/bin/bash
user7:x:1009:1009::/home/user7:/bin/bash
user77:x:1010:1010::/home/user77:/bin/bash
[root@localhost ~]#
[root@localhost ~]# ls -l /home/user1
합계 0
[root@localhost ~]# ls -l /home/user2
합계 0
[root@localhost ~]# ls -l /home/user3
합계 0
[root@localhost ~]# ls -l /home/user4
합계 0
[root@localhost ~]# ls -l /bonwon/user5
합계 0
[root@localhost ~]# ls -l /home/user6
합계 0
[root@localhost ~]# ls -l /home/user7
합계 0
[root@localhost ~]# ls -l /home/user77
합계 0
-rw-r--r--. 1 user77 user77 0 12월 26 17:31 junga // 파일 자동 생성됨
[root@localhost ~]#
[root@localhost ~]# ls -la /etc/skel // skeleton; 사용자 계정의 뼈대
합계 24
drwxr-xr-x. 3 root root 91 12월 26 17:31 .
drwxr-xr-x. 133 root root 8192 12월 26 17:31 ..
-rw-r--r--. 1 root root 18 8월 3 06:11 .bash_logout
-rw-r--r--. 1 root root 193 8월 3 06:11 .bash_profile
-rw-r--r--. 1 root root 231 8월 3 06:11 .bashrc
drwxr-xr-x. 4 root root 39 12월 19 23:49 .mozilla
-rw-r--r--. 1 root root 0 12월 26 17:31 junga
[root@localhost ~]#
[root@localhost ~]# ls -la /home/user1
합계 12
drwx------. 3 user1 user1 78 12월 26 16:49 .
drwxr-xr-x. 10 root root 112 12월 26 17:31 ..
-rw-r--r--. 1 user1 user1 18 8월 3 06:11 .bash_logout
-rw-r--r--. 1 user1 user1 193 8월 3 06:11 .bash_profile
-rw-r--r--. 1 user1 user1 231 8월 3 06:11 .bashrc
drwxr-xr-x. 4 user1 user1 39 12월 19 23:49 .mozilla
[root@localhost ~]#
// useradd vs. mkdir 계정 생성 차이점
[root@localhost ~]# mkdir /home/itbank2
[root@localhost ~]#
[root@localhost ~]# ls -la /home/itbank2 // itbank2 일반 dir.
합계 0
drwxr-xr-x. 2 root root 6 12월 26 15:20 .
drwxr-xr-x. 10 root root 165 12월 26 15:20 ..
[root@localhost ~]# ls -la /home/itbank // itbank home dir.; 사용한 내역이 많아서 좀 늘어남..,
합계 24
drwx------. 14 itbank itbank 4096 12월 20 12:37 .
drwxr-xr-x. 10 root root 112 12월 26 17:31 ..
-rw-------. 1 itbank itbank 310 12월 20 12:37 .ICEauthority
-rw-r--r--. 1 itbank itbank 18 8월 3 06:11 .bash_logout
-rw-r--r--. 1 itbank itbank 193 8월 3 06:11 .bash_profile
-rw-r--r--. 1 itbank itbank 231 8월 3 06:11 .bashrc
drwx------. 11 itbank itbank 233 12월 20 12:37 .cache
drwxr-xr-x. 13 itbank itbank 217 12월 20 12:37 .config
-rw-------. 1 itbank itbank 16 12월 20 12:37 .esd_auth
drwx------. 3 itbank itbank 19 12월 20 12:37 .local
drwxr-xr-x. 4 itbank itbank 39 12월 19 23:49 .mozilla
drwxr-xr-x. 2 itbank itbank 6 12월 20 12:37 공개
drwxr-xr-x. 2 itbank itbank 6 12월 20 12:37 다운로드
drwxr-xr-x. 2 itbank itbank 6 12월 20 12:37 문서
drwxr-xr-x. 2 itbank itbank 6 12월 20 12:37 바탕화면
drwxr-xr-x. 2 itbank itbank 6 12월 20 12:37 비디오
drwxr-xr-x. 2 itbank itbank 6 12월 20 12:37 사진
drwxr-xr-x. 2 itbank itbank 6 12월 20 12:37 서식
drwxr-xr-x. 2 itbank itbank 6 12월 20 12:37 음악
// 사용자 계정 /home 디렉터리 밑에
// useradd를 거친 것이 아닌 mkdir을 통한 home dir 생성은
// 기본적인 사용자 계정에 대한 뼈대가 없다! (/etc/skel 의 숨김 파일 안에도 들어있음)