/ 데이터베이스 보안 설계 - 데이터베스 보안 : 내부 및 외부자가 데이터베이스 내에 저장된 조직의 주요 기밀 정보에 불법적으로 접근하는 것을 막는 것 - 보안 설계 : 데이터베이스에 저장된 데이터 보호를 위한 설계에 초점을 맞춘 것 - 보안 위협들은 사용자의 실수나 오용, 내부 사용자의 권한 남용, 비정상적인 접근, 취약점들로부터 시작
/ 주요 위협 요소 - 일반적인 데이터베이스 위협 > SQL Injection > 악성 프로그램 삽입 - 사용자에 대한 식별 및 인증 위협 > 사전 공격, 무작위 대입공격, 사회 공학적 기법 - 데이터 유출 위협 > 암호화 되지 않은 데이터 > 안전성이 확인되지 않은 암호 모듈을 사용하는 경우 - 권한 오남용 위협 > 허용된 권한보다 더 많이 부여된 접근 권한 > 악의적인 목적으로 허용된 권한 범위를 벗어나는 경우 - 암호 모듈 오용 위협 > 안전성이 검증되지 않은 암호 모듈 사용 > 적합하지 않은 암호 모드 사용 - 암복호화 키 및 마스터 키 노출 위협 > 데이터 암호화 시 키 노출 - 프로젝트 수행과정에서의 데이터베이스 접근 허용 위협 > 외부 작업자가 자사의 데이터에 접근할 수 있는 권한을 부여 - 운영과정에서 권한에 대한 관리 소흘로 인한 침해 발생 위협 > 개발자에게 DBA 권한을 설정함 - 접근통제 우회 > 디폴트계정 또는 단순 계정 등 계정번호와 비밀번호가 동일할 경우 > 계정 및 패스워드의 정책 설정이 미흡한 경우 - 데이터베이스 정보의 불법 열람 및 변조/삭제 위협 > 데이터베이스에 저장된 주요 정보에 대해 암ㅎ화가 미흡한 경우
/ 데이터베이스 보안 설계하기 1. 접근제어 설계 1) 정보 식별(right information) - 데이터베이스, 계정, 테이블/뷰, 컬럼 2) 사용자 식별(right people) 3) 접근 방법(right form) 4) 접근 시간(right time) 2. 암호화를 설계 - 데이터베이스에 접속할 수 있는 사용자에 대한 정의 - 데이터베이스에 접속하는 사용자 식별에 대한 방법 - 암호화 대상 컬럼의 범위 정의 - 암호화 컬럼에 대한 복호화 권한 통제 수행 - 암호화 키를 위한 알고리즘과 대상 정의 - 암호화 키 사용에 대한 로깅 수행 1) 복호화 권한 통제 - 사용자 식별, 암호화 대상 컬럼, 암호화 컬럼에 대한 복호화 권한 통제, 비인가 사용자에 대한 통제 2) 암호화 키 및 알고리즘을 이용하여 구현 - 암호화 키 : 암호화 알고리즘 + 파라미터 키 - 암호화 방식 : 대칭형(암호화 키와 복호와 키 동일), 비대칭형(암호화 키와 복호화 키 다름) - 대칭형 알고리즘 : DES, 3-DES, AES, SEED, ARIA, MASK - 비대칭형 알고리즘 : RSA, DSA 3. 작업 결재를 설계 1) 결재 대상을 정의 - 사용자 중심, 정보 중심, SQL 중심 2) 결재자를 정의 3) 결재 사용자 관리 4) 결재자 관리 4. 취약점을 분석/설계 1) 데이터베이스 환경을 적정하게 구축 2) 계정 관리를 한다. 3) 패스워드 관리 4) 권한 관리 5) 인증 관리 6) 원격접속 관리 - 방화벽 구축 - 기본 서비스 포트 사용 자제 - 네트워크 트래픽 암호화 - 데이터베이스 서버가 있는 시스템의 운영체제 강화 - 보안 패치의 적용
/ 딕셔너리 조회 쿼리 SELECT * FROM DICTIONARY WHERE table_name LIKE 'USER_T%' AND ROWNUM < 10;
[학습내용] • 데이터베이스 사용 용도 분석 • 사용자 요구사항 분석 • 사용자 요구사항 명세서 작성
1. 데이터베이스 사용 용도 분석은 - 데이터베이스 보안 설계 이전에 가장 먼저 파악하여야 하는 작업이 사용하는 데이터베이스의 사용 용도를 분석하는 일임
2. 사용자 요구사항 분석 - 데이터베이스 사용자 요구사항을 분석하는 과정을 숙지하고 단계별 역할과 산출물을 숙지해야 함 - 사용자 요구사항 도출 → 사용자 요구사항 분석 → 사용자요구사항 기록
3. 사용자 요구사항 명세서 작성 - 데이터베이스 구축을 위하여 요구된 사용자 요구사항을 분석하여 최종적으로 사용자 요구사항 명세서를 작성해야 함 - 사용자 요구사항 분석 → 메타데이터 수집 → 사용자 뷰 자료 수집 → 자료 사전 작성 → 자료량과 패턴 조사 → 사용자 요구사항 명세서 작성
데이터베이스 보안 위협 분석
1. 데이터베이스 보안 위협 2. 데이터베이스 보안 목적 3. 데이터베이스 보안 필요성
1. 데이터베이스 보안 위협 - 데이터베이스 보안은 내부 및 외부자가 데이터베이스내에 저장된 조직의 주요 기밀 정보에 불법적으로 접근하는 것을 막는 것임
2. 데이터베이스 보안 목적 - 데이터베이스 보안의 목적은 위협 요소 식별·분석 및 적절한 통제를 통해 불확실한 이벤트의 발생 위험을 감소시키고 수용 가능한 수준(Acceptable Level)으로 최소화하는 것
3. 데이터베이스 보안 필요성 - 권한이 없는 사용자의 부적절한 접근을 막는 동시에 정당한 권한을 갖고 있는 사용자는 정보시스템이 서비스 요구를 거부하지 않도록 보호할 필요가 있음
[데이터베이스 보안 위협]
1. DB 보안 위협 개요
1) 데이터베이스 보안 - 데이터베이스 내에 저장된 조직의 주요 기밀 정보에 내부 및 외부자가 불법적으로 접근하는 것을 막는 것. - 데이터베이스에 저장된 데이터를 인가하지 않은 변경·파괴·노출·비일관성 등을 발생시키는 외부 위협들로부터 보호하는 것
2) 데이터베이스 보안 설계 정보보안의 범주에서도 데이터베이스에 저장된 데이터 보호를 위한 설계에 초점을 맞춘 것
3) 데이터베이스의 보안 위협 발생 요인 - 사용자의 실수 및 오용 - 내부 사용자의 권한 남용 및 비정상적인 접근 - 데이터베이스에 대한 알려진 취약점들
2. 일반적인 데이터베이스 위협
1) 악의적 목적을 가진 외부의 비인가 사용자, 악성 프로그램 삽입 데이터베이스의 중요 정보 유출
2) SQL injection 공격 - 입력 값에 대한 검증 미비로 인한 위협 - 로그인 인증 우회를 통해 데이터베이스 데이터 열람·유출 및 데이터베이스 - 서버에 시스템 명령 실행 - 파일 업로드에 대한 취약점이 존재할 경우 웹 쉘(web shell) 등을 실행하여 - 데이터베이스의 데이터에 접근
3. 케이스별 데이터베이스 위협
1) 사용자에 대한 식별 및 인증 위협 (1) 사용자 식별 및 인증 - 데이터베이스에 접근하기 위한 가장 기본적인 단계 (2) 보안 위협 요인 - 취약한 인증 수준 - 추측하기 쉬운 비밀번호의 사용 (3) 보안 위협 형태 - 사전 공격(dictionary attack) - 무작위 대입 공격(brute force attack) - 사회 공학적 기법(social engineering)
2) 데이터 유출 위협 (1) 암호화되지 않은 데이터 - 네트워크 도청, 파일 백업, 정당한 사용자 및 미인가 사용자에 의한 데이터베이스 검색 등을 통하여 데이터 유출 가능
(2) 암호화된 데이터 - 안전성이 확인되지 않은 암호 모듈을 사용하는 경우 악의적인 사용자에 의하여 암호문 해독 가능
3) 권한 오남용 위협 (1) 권한 오·남용 - 데이터베이스의 데이터 접근 권한이 업무 사용을 위해 허용된 권한보다 더 많이 부여 - 정당한 사용자가 악의적인 목적으로 허용된 범위를 넘어서 인가되지 않은 작업 수행 (2) 시스템의 취약성 - 시스템의 취약점을 이용하여 불법 권한 상승 및 계정 정보 획득
4) 암호 모듈 오용 위협
- 데이터베이스의 데이터를 암호화하기 위해 안전성이 검증되지 않은 암호 모듈을 사용하거나, 적합하지 않은 암호 모드를 사용하는 경우 암호문 해독 가능 - 데이터가 한 블록 이상의 크기를 가지는 경우 블록 암호 알고리즘을 적용하면 사전 공격에 의해 해독 가능 - 동일 평문에 대하여 동일 암호문이 생성되면 암호문을 통해 암호 키 추측 가능
5) 암·복호화 키 및 마스터 키 노출 위협 (1) 암·복호화 키 안전 관리 - 데이터 암호화 시 사용되는 키가 노출되면 암호화된 데이터를 복호화 할 수 있기 때문에 키의 안전 관리는 매우 중요 - 데이터를 암호화하는 경우 키가 인가되지 않은 제3자에게 노출되지 않도록 안전하게 보관 필요
(2) 암·복호화 키 사용법 - 마스터 키를 통하여 암호화 - 실제 사용 시점에만 임시로 복호화 하여 사용
(3) 암·복호화 키 노출 시 대처 방안 - 키 변경 : 신규 데이터는 변경된 키를 사용하여 암호화 : 기존 암호문은 마이그레이션 작업을 통하여 신규 암호문으로 변경
6) 프로젝트 수행과정에서의 데이터베이스 접근 허용 위협 - 프로젝트에 참여한 외부 작업자가 자사의 데이터에 접근할 수 있는 권한을 부여함으로써 데이터 유출이 발생함 - 프로젝트 목적상 데이터베이스를 사용해야 하는 경우, 보안서약서를 작성하게 하고 추가적인 물리적인 보안 통제를 적용함으로써 정보 유출을 방지하는 절차가 있어야 함
7) 운영과정에서 권한에 대한 관리 소홀로 인한 침해 발생 위협 - 개발자에게 DBA 권한을 설정함으로써 개발자가 직접 데이터베이스에 접근하여 정보 유출 가능 - 잘못된 사용자 권한 설정으로 비정상적인 데이터 노출 및 외부 유출 발생
8) 접근 통제 우회 위협 (1) 디폴트 계정 및 패스워드 동일 - 공급자에 의해 출하 시 설정되는 디폴트(default) 계정 또는 단순 계정 등 계정번호(ID)와 비밀번호 동일 : 암호 추측 공격, 사전 공격 등을 통해 계정 확인 가능 : 데이터베이스의 자료 유출 및 변조 등 발생 (2) 계정 및 패스워드 정책 미흡 - 계정 및 패스워드의 정책 설정이 미흡한 경우 무차별 공격에 의해 패스워드 크래킹 가능
9) 데이터베이스 정보의 불법 열람 및 변조·삭제 위협 (1) 보안 위협 요인 - 데이터베이스에 저장된 주요 정보에 대해 암호화가 미흡한 경우 비인가자에 의해 정보 노출 또는 변조 가능 (2) 보안 니즈 현황 - 데이터베이스에 저장된 개인정보, 금융 관련 정보, 게임 관련 정보 탈취 시도 증가 : 데이터베이스 보안에 대한 요구사항 증가
(3) 보안 방법 - 공개키(PKI: Public Key Infrastructure) 기반의 강력한 암호화 기능 및 검증 기능 제공 : 기존 데이터베이스에 대한 불법적 접근 방지 - 사용자가 데이터베이스의 내용을 추출하여도 암호화된 상태의 데이터베이스 기밀성이 유지되는 시스템 구축
[데이터베이스 보안 목적]
1. 개요
1) 명심해야 될 사항 (1) “보안에 100%는 없다!” (2) “관리 범위 100% 충족하는 기술적 대안은 없다!” (3) “방화벽 구축으로 완벽히 보호되지 않는다!” (4) “보안은 기술만으로 해결되지 않는다!”
2) 데이터베이스 보안 (1) 정보보안의 3요소 정보보안의 목적은 기밀성, 무결성, 가용성 등을 유지하는 것 (2) DB보안의 목적 DB에 저장된 데이터를 공개·노출, 변조·파괴·훼손, 재해·재난 등의 위협으로부터 보호하여 기밀성, 무결성, 가용성 등을 확보하는 것
[3,4,5교시 - 시스템 보안]
/ 리눅스 bind, bind-chroot란 - bind서비스의 최상위경로가 바뀌지 않게 해주는 패키지
/ bind 설치 정보
/ bind, bind-chroot 설치 # yum -y install bind bind-chroot # systemctl restart named # systemctl enable named # systemctl status named (옵션 -l : 상태확인 메시지 확인가능)
/ vi /etc/named.conf
- listen-on port 53 { any; }; 모든 포트 외부 접근 허용 - listen-on-v6 port 53 { none }; 모든 포트 외부 접근 비허용 - allow-query { any; }; 외부에서 오는 query를 허용할 IP 혹은 IP대역 설정 - 저장 후 'named-checkconf'로 확인 : 똑 떨어지면 이상X - 저장 후 'systemctl restart named' - 계속 대기중인 'standalone'방식이다.(systemctl로 하는 애들은 대부분 standalone이다.)
/ DNS 질의 순서 - 리눅스에서는 $ -> /etc/host.conf -> /etc/hosts -> DNS 순으로 찾는다. - 윈도우에서는 $ -> hosts.ics -> hosts -> DNS
/ [여담] CEO, CFO, CCO, CIO, 각 풀네임 알아두기 - CEO : - CFO : - CCO : - CIO : - CISO : 정보보호 최고 책임자 > 1) 정보보호 관리체계의 수립 및 관리, 운영 > 2) 정보보호 취약점 분석, 평가 및 개선 > 3) 침해사고의 예방 및 대응 > 4) 정보보호 사전 보안성 검토
/ bind의 설정파일 확인 # rpm -qc bind # ps -ef | grep named
* rndc 원격제어 : 953/tcp 포트
/ dns 방화벽 설정 # firewall-config - 영구적 > 체크 DNS > 옵션에서 firewalld 다시 불러오기 or # firewall-cmd --permanent --add-port=53/tcp # firewall-cmd --permanent --add-port=53/udp # firewall-cmd --permanent --add-service=dns # firewall-cmd --reload # firewall-cmd --list-all - 확인 'firewall-cmd --list-all'
/ nslookup으로 확인 - 빨간색으로 표시한 부분은 처음 다녀오는 것이라 조금 느리게 응답이 되었던 부분이다. - 두번째로 질의를 하면 바로 응답이 온다.
proxy
/ 나중에 실습할 것 - 취약점분석도구 OWASP_ZAP, BurpSuite - CentOS7 , squid (서버, client)
/ squid - 설치되어있는지 확인 및 설치 가능한지 확인 # rpm -qa squid # rpm -qa | grep squid # yum list squid
* 설치할때는 install, 삭제할때는 remove또는 erase
- 설치 # yum -y install squid
- config파일 찾기
* 리눅스 마스터 시험에서 아래 빨간 부분에 들어갈 문자열이 무엇인지 찾는 문제가 종종나온다.
1. 개체 무결성(Entity integrity) - 하나의 테이블에 중복된 행이 존재하지 않도록 규정 - 기본키 제약이라고도 한다. - Primary Key(PK) : 열에 유일한 값만 입력이 되어야 하고, NULL값을 허용하지 않는 것 - UNIQUE : 값의 중복을 허용하지 않는 제약, NULL도 중복되면 안된다.
2. 참조 무결성(Referential integrity) - 행을 입력, 수정, 삭제할 때 연관되는 다른 테이블과의 데이터가 정확하게 유지되도록 규정 - FOREIGN KEY(외래키) : 다른 테이블의 데이터를 참조할 때 없는 값을 참조할 수 없도록 제약
3. 도메인 무결성(Domain integrity) - 속성이 정의되어 있는 영역을 벗어나지 않도록 규정 - NOT NULL : 데이터를 입력받을때 NULL을 허용하지 않는것 - DEFAULT : 입력 값을 지정하지 않았을때 기본값으로 입력되도록 하는 것 - CHECK : 값의 범위를 정해 놓는 제약
4. Null 무결성(Null integrity) - NOT NULL : 데이터를 입력받을때 NULL을 허용하지 않는것
5. 고유 무결성(Unique integrity) - UNIQUE : 값의 중복을 허용하지 않는 제약
6. 키 무결성(Key integrity)
7. 관계 무결성(Relationship integrity)
/ 무결성 제약조건 실습
- pk, check 실습
create table lan (
ano int primary key,
addr varchar(20) check(addr in('Seoul', 'Jeju','Busan','Suwon'))
);
insert into lan(ano, addr) VALUES (1, 'Seoul'); -- 삽입됨
insert into lan(ano, addr) VALUES (2, 'bla bla'); --삽입안됨
insert into lan(ano, addr) VALUES (1, 'Busan'); --삽입안됨
- 외래키(Foreign key)
CREATE TABLE par(
id number not null PRIMARY key,
par_name varchar(20)
);
CREATE TABLE child(
id number not null PRIMARY key,
par_id number,
child_name varchar(20),
CONSTRAINT fk_pid foreign key(par_id) REFERENCES par(id)
);
insert into child (id, par_id, child_name) values (1,1,'자식1'); -- 생성안됨 : 부모 데이터가 없음
insert into par(id, par_name) values (1, '부모1'); -- 부모 데이터 생성
insert into child (id, par_id, child_name) values (1,1,'자식1'); -- 생성됨
insert into child (id, par_id, child_name) values (2,1,'자식2'); -- 생성됨
insert into child (id, par_id, child_name) values (3,2,'자식3'); -- 생성안됨 : 부모 데이터가 없음
/ 데이터베이스 보안 요구사항 정의 - 분석 프로세스 숙지
- 분석 과정 및 단계별 역활/산출물 숙지가 필요함 - 단계별로 진행함 - 이전 단계로 피드백 하는 과정을 가짐 - 사용자 요구 사항 분석의 정확성/명확성을 확보함 1. 요구사항 도출 - 데이터베이스의 대상 파악, 프로젝트 목표 숙지, 프로젝트의 범위를 기준으로 조사 범위를 결정 - 도출을 위해 업무관계자 인터뷰 및 외부자료 수집 및 분석등을 한다. 2. 요구사항 분석 - 도출된 요구사항의 명확성을 파악, 완전성 및 모호성 검증 - 불완전한 부분이 존재하면 요구사항 도출단계를 재수행 - 요구사항을 분류하여 통합 또는 분리하는 작업수행 3. 요구사항 기록 - 요구사항 목록 정리 및 관리자의 승인을 받아 확정 - 정리된 요구사항을 형식에 맞춰 문서화 - 프로젝트 종료 때까지 반영여부를 지속적으로 관리
[3,4,5교시 - 시스템 보안]
/ raid5 구성해보기
- 하드디스크를 1GB, 싱글로 3개 만든다. - 부팅 시 새로 sdh, sdi, sdj가 확인된다.
- 부팅 후 'll /dev/sd*', 'fdisk -l | grep /dev/sd' 등으로 확인해본다.
ll /dev/sd*
fdisk -l | grep /dev/sd
- 각각의 'sdh, sdi, sdj'를 fdisk작업을 해준다.
[root@kyj ~]# fdisk /dev/sdh
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0xd78be71d.
Command (m for help): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p):
Using default response p
Partition number (1-4, default 1):
First sector (2048-2097151, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-2097151, default 2097151):
Using default value 2097151
Partition 1 of type Linux and of size 1023 MiB is set
Command (m for help): t
Selected partition 1
Hex code (type L to list all codes): fd
Changed type of partition 'Linux' to 'Linux raid autodetect'
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
[root@kyj ~]# fdisk /dev/sdi
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0x3f42118a.
Command (m for help): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p):
Using default response p
Partition number (1-4, default 1):
First sector (2048-2097151, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-2097151, default 2097151):
Using default value 2097151
Partition 1 of type Linux and of size 1023 MiB is set
Command (m for help): t
Selected partition 1
Hex code (type L to list all codes): fd
Changed type of partition 'Linux' to 'Linux raid autodetect'
Command (m for help): p
Disk /dev/sdi: 1073 MB, 1073741824 bytes, 2097152 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x3f42118a
Device Boot Start End Blocks Id System
/dev/sdi1 2048 2097151 1047552 fd Linux raid autodetect
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
[root@kyj ~]# fdisk /dev/sdj
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0xa18e714f.
Command (m for help): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p):
Using default response p
Partition number (1-4, default 1):
First sector (2048-2097151, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-2097151, default 2097151):
Using default value 2097151
Partition 1 of type Linux and of size 1023 MiB is set
Command (m for help): t
Selected partition 1
Hex code (type L to list all codes): fd
Changed type of partition 'Linux' to 'Linux raid autodetect'
Command (m for help): p
Disk /dev/sdj: 1073 MB, 1073741824 bytes, 2097152 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0xa18e714f
Device Boot Start End Blocks Id System
/dev/sdj1 2048 2097151 1047552 fd Linux raid autodetect
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
- 루트에 'raid5'폴더를 만들고 그 폴더에 마운트 시킨다. # mkdir /raid5 # mount /dev/md5 /raid5
- 마운트되었는지 확인한다. # df -h
- 리부팅 시 자동으로 마운트되도록 /etc/fstab에 데이터를 등록해준다. # vi /etc/fstab - /dev/md5 /raid5 ext4 defaults,nofail 0 0 ->내용 추가
- 리부팅 # reboot
/ raid 구성 전체적인 과정 정리 1. 하드디스크 추가 1-1. 'll /dev/sd*'로 추가된 디스크 확인 2. 'fdisk /dev/sd블라블라'로 각각 파티셔닝(타입 코드는 fd로 입력) 3. mdadm -C /생성할/폴더 -l 레이드단계 -n 하드갯수 /dev/{하드, 목록, 들} : 레이드 구성 3-1. mdadm -D /생성한/폴더 : 레이드 구성 확인 4. mkfs.ext4 /생성한/폴더 : ext4로 포멧 5. mkdir /마운트/폴더 : 마운트할 폴더 생성 6. mount /생성한/폴더 /마운트/폴더 : 레이드 구성한것을 새로만든 폴더에 마운트 7. vi /etc/fstab : 리부팅 시 자동 마운트 설정
/ 실습과제
1. RAID 구성
- 수행1 : LinearRaid, Raid0,를 구성하여라 > 제출1 : 디스크 추가 및 fdisk 작업완료 후 ls -l /dev/sd* > 제출2 : 마운트 작업 완료 후 df -h >제출3 : 마운트 작업 완료 후 vi /etc/fstab
- 수행2 : Raid1, Raid5를 구성하여라 >제출1 : 디스크 추가하고 리부팅 후, ls -l /dev/sd* >제출2 : mdadm으로 md1, md5 구성 후, ls -l /dev/md* >제출3 : md1, md5에 대해 마운트 작업 후, df -h >제출4 : mdadm --detail /md1 >제출5 : mdadm --detail /md5 >제출6 : cat /proc/mdstat >제출7 : vi /etc/fstab
2. CentOS에 http 및 ssh 설치
- 수행1 : VMware를 사용하여 CentOS서버를 준비하고 root로 로그인한후에, Linux Server에 웹서버(httpd)를 설치하고, 서버상에서 적절한 명령어를 사용하여 Linux Server의 웹서비스 TCP 80포트, sshd서비스 tcp 22포트가 리스닝 가능상태임을 확인/캡쳐하여 제출하시오.
- 수행2 : Linux Server에 웹서버 인덱스페이지(index.html)을 구성하고, 호스트PC에서 Linux Server로 웹서버 페이지접근/오픈하시오. 필요한 경우 해당 서비스를 방화벽에서 오픈하고 접근/오픈된 웹서버페이지를 확인/캡쳐하여 제출하시오.(index.html 내용은 ‘This is Linux Server' 로 한다)
- 수행3 : 호스트PC에서 해당 Linux Server 에 ssh로 접속하되, putty등의 클라이언트 프로그램을 사용하고, 접속시 root계정 또는 centos계정을 사용하도록 한다. 호스트PC에서 ssh접속 완료후, 서버에서 # w, # who 명령어 구문 결과를 각각 확인/캡쳐하여 제출하시오.
- 수행4 : 클라이언트(호스트PC)에서 서버를 향해 putty 등의 프로그램을 사용하여 ssh로 클라이언트가 접속성공한 내역(ESTABLISHED)을 확인하기 위해서 # netstat -ant | grep LIST* 또는 # netstat -ant | grep ESTA* 또는 # netstat -ant | grep 22 명령어 사용하여 확인/캡쳐하여 제출하시오.
1. 데이터베이스 사용 용도를 분석한다. > 어떤 업무인지, 어떤 분야에서 사용하는지, 어떤 사용자들이 주로 사용하는지..
2. 데이터베이스 보안 설계 목적 및 필요성을 분석한다. > 데이터베이스 보안 목적 분석 > 데이터베이스 보안 필요성 분석
3. 데이터 무결성 규칙의 종류를 활용하여 분석한다. > 도메인 무결성 규칙 분석 > 실체 무결성 규칙 분석 > 참조 무결성 규칙 분석 > 트리거 분석
4. 데이터베이스 보안 요구사항을 분석한다. > 권한을 부여받은 사용자만 접근을 허용하고 있는가? > 추론 방지가 요구되고 있는가? > 데이터베이스의 무결성이 보장되도록 하고 있는가? > 데이터의 논리적 일관성이 보장되고 있는가? > 감사 기능이 제공되고 있는가? > 사용자 인증이 적정하게 이루어지고 있는가? > 시스템 간 데이터의 전송 제한이 이루어지고 있는가?
[3,4,5교시 - 시스템 보안]
/ RAID1+0 - RAID1 + RAID0 - 신뢰성(안정성)과 성능(속도)이 동시에 뛰어난 방법
/ nslookup과 dig차이점 - nslookup www.naver.com 164.124.101.2 - dig @164.124.101.2 www.naver.com - 으로 명령어 뒤의 순서가 반대이다.
/ Linear RAID 구축 실습 - CentOS&_101 탭 우클릭 > 세팅 > Add > 하드디스크 넥스트 > 넥스트 > 크리에이트 어쩌고 넥스트 > > 2GB, 싱글 넥스트 > 이름은 'test2.vmdk'로 설정 > 피니쉬 > ok > 서버 reboot - 부팅할때 sdc가 확인된다.
- ll /dev/sd*로도 새로 추가한 하드디스크를 확인할 수 있다.
- fdisk를 raid용으로 파티셔닝해야 한다. - 먼저 'fdisk -l'로 하드디스크를 확인한다.
- /dev밑에 sda, sdb, sdc가 확인이 되고 sdb와 sdc를 리니어 raid로 만들것이다. - '/dev/sdb'를 새로 파티셔닝 한다. (이때 이전에 /dev/sdb1로 포맷하였더라도 '/dev/sdb'로 진행한다.)
- L을 누르면 모든 코드가 나온다.
-
- 확인
- 나오기
- 'fdisk -l /dev/sdb'로 확인해본다.
- sdc도 진행한다. - 이 친구는 새로만들어야하니까 n으로 간다.
- 이후 t로 들어간 후 fd로 설정한다.
- w로 저장하고 나오기
- 'll /dev/sd*'로 확인할 수 있다.
- 'fdisk -l | grep fd'로도 확인가능하다.
- mdadm 사용하기 # mdadm --create /dev/md9 --level=linear --raid-devices=2 /dev/sdb1 /dev/sdc1 - --create : 생성 - --level : 리니어 단계 성정 - --raid-devices 하드 하드 : 합칠 하드디스크
- mdadm --detail /dev/md9로 확인
- 'cat /proc/mdstat'으로도 확인가능하다.
- 이제 md9에 대해서 mkfs.ext4를 한다.
- 이제 폴더를 새로 만들어서 마운트를 한다. # mkdir /linear # mount /dev/md9 /linear - 그리고 이제 컴퓨터를 켤때 언제든지 /dev/md9 장치가 (/linear) 디렉터리에 마운트되어 있도록 설정/etc/fstab의 파일내용을 수정해준다.
- 저장 후 리부팅 해준다. - 이제 리부팅해도 바로 새로운 하드디스크를 리니어 raid로 인식한다.
/ 다른 계정에 있는 테이블 복사해오기 - dba권한이 필요하다. # grant dba to kimjh9; - 테이블 복사 쿼리 # create table EMPLOYEES as select * from hr.EMPLOYEES;
/ CMD나 터미널에서 쿼리 결과를 볼때 불편할때 # set pages 4000 -- 데이터가 화면에 표시되는 라인 수 (몇줄) # set lines 5000 -- 데이터가 가로로 표시되는 라인 수 # col 컬럼명 for a숫자 (보통 10정도씀) -- 한 데이터 컬럼이 화면에 표시되는 사이즈 # col 컬럼명 for 사이즈(a10) heading "바꿀컬럼명"
[3,4,5교시 - 시스템 보안]
/ fdisk로 확인해보기
/ 파일 시스템(File system) - 파일이나 디렉토리를 효과적으로 다루기 위한 구조 - 윈도우 : fat16, fat32, fat64, NTFS, ReFS * fat : File Allocation Table * NTFS : New 테크놀로지 File System - 최근에 NTFS, ReFS가 나왔는데 ReFS가 별로 성능이 좋지 못해 NTFS를 주로 쓴다.
- 리눅스 : ext(확장의 개념을 가지고 있다.), ext2, ext3, ext4(지금 실습하는 것), xfs(루트 쪽) * journaling : 파일 시스템내에서 백업/에러/엑세스 관련된 정보를 이 기술을 사용해서 보관을 한다. ext3이상부터 적용된다.
/ 파티션 해보기 # fdisk /dev/sdb - 잘 모르니까 m을 눌러보자
m을 누른후..
- 파티셔닝을 해야하니 n을 누른다. - 새로 추가한 하드를 디폴트로 p가 선택되어 있어서 그냥 엔터를 누른다.
- 이번에는 또 번호를 뭘로 줄꺼냐인데.. 기본 1번이 되어 있으므로 또 엔터
- 섹터 부분도 그냥 다 넘어간다.
- p를 누르면 적용된것을 확인할 수 있다.
- w를 누르면 작업에서 빠져나온다.
- 다시 확인해본다. - 이때 맨 앞에 b가 들어가있는데 블록이라는 뜻이다.
- 확인2
- 마운트 등 다른 작업을 안해서 df -h에는 아직 안보인다.
/ 메모 - IDE는 2개까지만 연결가능하고, SCSI는 16개까지 연결 가능하다. - 하드디스크를 1개 장착하는 흐름도는 '물리적인 장착 > fdisk > /dev/sdb1 확인 > mkfs.ext4 > /dev/sdb1 확인 > mount > /mydata > /etc/fstab > 리부팅' 이다.
- mkfs.ext4를 한다. # mkfs.ext4 /dev/sdb1 - Creating journal이 된다. (밑에서 2번째 줄)
/ 파일 시스템 구조
# df -hi - i 옵션은 inode를 확인하기 위한 옵션이다.
- / 에다가 tdir 폴더를 만든다. # mkdir /tdir
- 마운트를 한다. # mount /dev/sdb1 /tdir
- 확인 # df -h
/ mkfs.ext4 - 방금 mkfs.ext4를 이용해서 저널링을 만들었다. # mkfs -t etx4 /dev/sdb1 == mkfs.ext4 /dev/sdb1 명령어가 같다. - -t로 만들고 싶은 형식을 지정할 수 있다. (ext3, ext4 등등) - mke2fs : ext2, ext3, ext4 파일 시스템을 생성할때 사용하는 명령어 : 예외적으로 ext4는 따로 -T옵션을 준다. ex) mke2fs -T ext4 /dev/sdb1 - mke2fs의 -t 옵션 : 뒤에 붙는 형식으로 주겠다. ex) mke2fs -t ext2 - mke2fs의 -j 옵션 : 저널링을 주는 옵션. 뒤에 ext3만 줄 수 있다. ex) mke2fs -j ext3
/ 마운트 - mount 논리장치 물리장치 # mount /dev/sdb1 /tdir
/ 마운트 정보 # mount -l - 맨밑에 아래와 같은 내용이 나온다. - 'mount -l'의 결과 화면은 시험에 자주 나오니 기억해두자. (장치 on 위치 type 형태)
# mount -l | grep /tdir - grep도 가능하다.
/ 연결을 끊을 때 - 내가 마운트할 디렉토리안에 들어가 있거나 사용하고 있으면 언마운트 할 수 없다.
- umount명령어를 이용하여 언마운트할 수 있다. - 경로명, 위치명 둘다 가능하다. # umount /tdir # umount /dev/sdb1
- 언마운트 확인 # df -h # mount -l | grep /tdir
/ 마운트된 정보가 저장되는 곳 - '/etc/fstab'파일 : 부팅할때 명시된 장치들을 확인한다. # vi /etc/fstab
- 편집한다. > 디스크장치명 ; 경로 ; fs형식 ; defaults(기본속성), nofail(구문에 에러가 있어서 문제가 있더라도 패일 발생하지마) ; 0 0 - 앞숫자 : 덤프(1로 되어있으면 이슈 등 을 로그로 남긴다), - 뒷숫자 : 부팅할때 깨졌는지 정상인지 아닌지 파일 시스템 체크. 1이면 체크
- cat으로 작성한 내용을 확인한다.
- 일시적으로 마운트가 깨졌을때 fstab에 있는 내용을 자동으로 가져올때 # mount -a
- fstab에 오류가 나면 init 1모드에 진입하게 된다.
# blkid -
# nmcli c -
/ fstab - 장치명 ; 경로 ; fs형식 ; 속성옵션 ; 0 0 - /dev/sdb1 /tdir ext4 defaults,nofail 0 0 - 속성 옵션 : 디스크용량 할당에 대한 옵션을 적는다. - 디스크 쿼터(quota) : 사용자들에게 용량을 제한해서 제공하는 기능 > usrquota : v1, 유저에게 quota를 적용 > grpquota : v1, 그룹대상에게 quota를 적용 > usrjquota : v2, 유저에게 quota를 적용 > grpjquota 대신 jqfmt사용 : v2, 그룹대상에게 quota를 적용 > ex) /dev/sdb1 /tdir ext4 defaults,nofail,usrquota,grpquota 0 0 > ex)/dev/sdb1 /tdir ext4 defaults,nofail,usrjquota=aquota.user,jqfmt=vfs 0 0 > edquota : 사용자 또는 그룹에 쿼터를 설정할 때 사용하는 명령어 > quotacheck : 사용자별 디렉토리에 생성한 쿼터 설정파일을 체크할때 > quota : 로그인 된 사용자의 쿼터 설정 정보를 확인 > repquota : /home처럼 시스템에 설정된, 시스템 단위의 설정 정보를 확인 - aquota : 사용자가 기록을 하게끔 하는 명령어
/ RAID(Redundant Array of Inexpensive Disks) - 윈도우, 리눅스 똑같다. - 여러개의 디스크를 하나의 디스크처럼 사용함 - 비용 절감 + 신뢰성 향상 + 성능 향상의 효과를 낸다. - 하드웨어 RAID, 소프트웨어 RAID가 있고 실무에서는 하드웨어 RAID가 많이 쓰인다. - 실습은 소프트웨어 RAID를 할것임. - 레이스 2~4는 써보니까 너무 안 좋아서 안 씀. - Linear RAID : 쭉쭉쭉 계속 붙여서 쓰는거. 용량 상관없이 확장 가능. 앞에 붙인 디스크에 문제가 생기면 싹 다 날라감 - RAID0 : 모든 디스크에 동시저장, 가장빠름, 10G랑 100G랑 묶으면 20G가 잡힘(10G의 10, 100G의 10), 근데 디스크 하나 나가면 짝 다나감. 똑같은 컨텐츠가 많은 회사는 RAID0를 쓰기도 한다. - RAID1 : 미러링, 두개를 묶으면 2분의1용량만 사용할 수 있음. 한쪽 디스크가 고장나도 복원가능(Fail over). 공간효율은 안 좋지만 중요한 데이터를 저장하기에 적절하다. - RAID5 : 3개부터 묶을 수 있음, 모든 디스크에 동일하게 저장됨. 3개를 묶으면 3분의 2만 사용가능하다(n개면 n-1개만 사용가능). 오류가 발생하면 '패리티'라는것을 이용해서 데이터를 복구 - RAID6 : 4개부터 묶음 수 있음. 패리티 사용. 4개중에 2개가 나가도 사용가능(n-2)
/ 권한주기 - 권한은 SYS 계정에서만 줄 수 있다. - 접속권한, 테이블 생성권한 주기 > grant connect, resource to 계정;
- 그러면 이제 cmd를 열어서 방금 내가 만든 계정으로 바로 접속이 가능하다.
- 테이블이 몇개 있는지 확인
SYS계정 확인방금 만든 사용자 계정 확인
- 테이블 select 조회시 데이터가 끊어져서 나올때
- 'set pages 4000' 과 'set lines 5000'명령어를 입력하면 이쁘게 잘 나온다.
- 중요도 : 접근제어, 암호화, 작업결재, 취약점 - DBMS 취약점 분석 평가 항목은 아래와 같다.
- 테이블 생성
CREATE TABLE emp ( empno NUMBER(4) NOT NULL, ename VARCHAR2(10), job VARCHAR2(9), mgr NUMBER(4), hiredate DATE, sal NUMBER(7,2), comm NUMBER(7,2), deptno NUMBER(2) );
- 새로 만든 emp테이블에서 empno를 프라임키로 만들기
alter table emp add constraint emp_pk primary key(empno);
- 테이블에 데이터 넣기
insert into 테이블이름 values(데이터1, 데이터2, 데이터3 등등);
- 데이터 확인
- cmd에서 하기 힘드니 SQL Developer를 이용해본다. - 실행 후 이름은 system 비밀번호는 oracle로 해서 테스트하고 접속한다.
[3,4,5교시 - 시스템 보안]
/ 클라이언트용 리눅스 이미지 추가 - lvm : 로지컬 어쩌고 저쩌고 인데 우리는 싱글이라서 표준 파티션을 사용한다.(lvm이 무엇인지 검색해보기) - swap추가하면 sda1이 보이는데 왜 그런것인지도 자세히 검색해보기 - 그놈 데스크탐은 지놈응용, 개발용 도구 선택하기 - 네트워크는 켬으로 선택 - 네트워크 설정할때 하단의 호스트 이름에 'client'로 설정 - kdump사용안함으로 설정
- fdisk -l : 현재 파티션 정보(목록) - 20Gb로 했는데 21기가로 보이는 이유 : 논리적으로 보이기 때문
- fdisk /dev/sdb : sdb를 파티셔닝..
- 디스크를 추가하면 sd뒤에 알파벳이 순서대로 붙어서 sda, sdb, sdc.. 순으로 이름이 지어진다. - 이때 sda를 두개로 파티셔닝 하면 sda1, sda2 가 되고 - sdb를 파티셔닝을 안하고 한개로 쓰겠다 하면 sdb1이 되는 식이다.
# df -h : 서버의 사용량 가용량을 보는 명령어. -h 옵션은 사람이 쉽게 볼 수 있게 보여줘라
/ 관리자 권한 - 관리자 권한 : su - => root로 로그인 - su -c "명령어" : 임시로 잠깐 명령어를 쓸때만 root권한을 빌려씀. 권한만 빌려서 쓰고 로그인 변경X
/ 일반 사용자에게 임시 관리자 권한을 주기 # sudo - sudo를 쓰게 하려면 따로 설정을 해줘야 한다. - 관리자로 들어간 후 'vi /etc/sudoers'를 수정해준다.
/ vi 편집기에서 줄 복사하기 - yy를 눌러서 줄을 버퍼에 복사한 후 원하는 줄에 가서 p를 누르면 해당줄이 복사된다.
- 네트워크 재시작
- sudo 를 한경우 특정 시간동안 sudo를 한것이 적용되어서 한동안은 root권한의 작업을 할때 sudo를 할때 비밀번호를 묻지 않는다.
/ 편집기 - 텍스트 기반 편집기 : vi, emac(리처드 스톨만이 제작함), pico - 그래픽 기반 편집기 : gedit
/ 런레벨 - init 0 : 시스템 종료 - init 1 : 유지보수 모드, 단독 - init 2 : 거의 사용X, (NFS가 지원이 안되는 다중(멀티)유저 모드) - init 3 : CLI모드(명령어 모드), 다중 모드, NFS 지원가능 - init 4 : 거의 사용X - init 5 : X윈도우 기반 (그래픽 모드), 다중 모드, NFS 지원가능 - init 6 : 리부팅 * NFS : 네트워크 파일 시스템
/ cli에서 명령어를 백그라운드로 실행시키려 할때 맨 끝에 &를 붙여준다.
gedit /etc/hostname &
/ 백그라운드로 프로그램을 돌리는 법 # vi /etc/hostname & - 또는 vi에 들어가 있는 상태에서 컨트롤+z를 누르면 잠깐 뒤로 넘긴다.
/ 백그라운드로 돌아가는 프로그램들 확인하는 법 # jobs
/ 백그라운드로 들어간 작업을 꺼내는 법 - foreground : fg %작업번호
/ GNOME 기반 응용 프로그램 - nautilus : GUI 시스템 파일 관리자 -> nemo - mutter : 디스플레이 제어(매니저) - metacity : GNOME 2.x 윈도우 매니저 - enlightenment : 초기 사용 윈도우 매니저 - GTK+ : GNOME 관련 라이브러리(OS : GimpToolkit) - GimpToolkit : 이미지 프로그램(그림판, 포토샵) - totem : 미디어플레이어 - evolution : 오피스 프로그램
/ KDE 기반 응용 프로그램 - konqueror : 만능 파일 관리자 - kwin : KDE 2.x 윈도 매니저 - Qt : KDE 관련 라이브러리(C++)
/ 1번 서버에 하드디스크 추가하기 - 첫번째 서버에 우클릭 > 세팅 > +클릭 > 하드디스크 선택 다음 > SCSI 선택 다음 > 크리에이드 어쩌고 선택 다음 > 1기가, 싱글> 이름 적당히 짓고 피니쉬 > 세팅 화면에서 ok를 꼭 누를것 * SCSI : 스몰 컴퓨터 시스템 인터페이스
- 아직은 fdisk를 해도 안보인다. (리부팅을 해야 함)
- 리부팅을 하니 보인다. - 아직 파티셔닝을 하지 않아서 sdb1 같은 식으로 보이지 않고 sdb로만 보인다.
- 아직 파티셔닝을 하지 않아서 'df -h'로는 보이지 않는다.
내일 'fdisk /dev/sdb', 'mkfs.ext4 /dev/sdb1', 'mount' 등을 써볼것이다.
service telnet #/etc/services { disable = no # 해당 서비스 사용? socket_type = stream # steam : TCP소켓, dgram : UDP소켓 protocol = tcp # 프로토콜 wait = no # 연결할때 대기시간 제공 여부(다른 접속을 할 수 있게 해주겠느냐) user = root # 서비스를 시작하는 권한 사용자 server = /usr/sbin/in.telnetd # 서비스를 처리하는 프로그램 위치 log_on_failure += USERID # USERID를 포함해서 로그인실패 정보를 로그에 쌓겠다. access_times = 07:30-18:30 # 접속이 가능한 시간 cps = 50 10 # Connect Per Second. # 앞숫자 : 1초에 허용되는 연결수. # 뒤숫자 : 앞숫자를 초과하면 연결거부하는 시간(초) instance = 50 # 서버에 접근/접속할 수 있는 최대 클라이언트 수 per_source = 2 # 출발지(소스)마다 연결은 최대 2개만 허용 only_from = 10.10.10.10 192.168.111.1 # 접속할 수 있는 (소스)아이피 또는 대역 제한(띄어쓰기 구분) }
/ 명령어 모드 서버 설치 및 클라이언트용 서버 설치
- new > 티피컬 > 세번째 넥스트 > 리눅스 센트os > 이름을 CentOS 7_102, 위치는 "D:\CentOS\CentOS7_102" > 20Gb 싱글 > 피니쉬
- 102의 에디트 > 프린트, 사운드, usb 삭제 > cd/dvd선택 > Use ISO image file > centos ios파일 로드 > ok
- 102 파워 on!
- 한국어 > 키보드 추가 영어 미국 > 소프트웨어 선택 최소설치 > 설치대상 파티션을 설치합니다. > 표준 파티션 > +클릭 > swap을 2048, /만 선택해서 추가 > 네트워크는 켬 > 설치 시작
- 비밀번호는 password , 사용자는 centos/centos
- 호스트 네임 변경할때 꼭 /etc/hostname을 vi로 변경하지 않아도 된다. # hoswnamectl set-hostname 호스트이름
- se리눅스 활성화 확인 # sestatus
- se리눅스 비활성화 하기 # vi /etc/sysconfig/selinux - SELINUX를 disabled로 변경
/ 네트워크 설정하면서 우리가 집어넣은 네임서버 정보를 볼 수 있다. # cat /etc/resolv.conf
/ 파이프 more, 파이프 less # rpm -ql httpd | more -> 스페이스바로 아래아래로 볼 수 있다. # rpm -ql httpd | less -> 화살표로 왔다갔다 볼 수 있다. - less를 빠져나올때는 q를 누르면 된다. - less는 한줄씩 볼때는 좋은데 양이 또 너무 많으면 보기 힘들다. - more은 윗 페이지를 다시 볼 수 없다.
# yum info httpd | head -10 - | -10 -> 헤드에서 10줄만 보여줘
# yum search httpd | head -10
- info와 search의 차이, 각 결과화면을 기억하기
# yum -y update httpd - 업데이트 하기 - 되어 있는 경우 할것이 없다고 나옴
/ 방화벽 정책 - All Deny : 일단 다 막고 시작함. 특정포트, 특정 서비스만 오픈, 중급이상 관리자들이 많이 사용 - All Open : 일단 다 열고 시작함. 필요한 포트와 서비스만 차단, 초급관리자들이 많이 사용 * 우리꺼는 들어올때는 All Deny, 나가는것은 All Open이다.
/ telnet, telnetd : 23/tcp 암호화 - 텔넷은 보안이 취약하여 root로 바로 접속할 수 없다.
/ 텔넷 yum 확인 # yum list telnet* - telnet : 클라이언트용 - telnet-server : 서버용
/ 설치하기 # yum install -y telnet telnet-server
/ 설치 후 확인 # yum list telnet*
/ 텔넷 시스템 시작 # systemctl start telnet.socket # systemctl enable telnet.socket
/ 텔넷 상태 확인 # systemctl status telnet.socket
/ 프로세스 찾는 과정... - ps -ef에서 telnet으로 검색이 안되는데 이유는 systemd로 통합이 되어서 그렇다고.. # ps -ef | grep systemd 로 검색해야 한다.
/ 텔넷 접속용 계정 따로 만들기 실습 # useradd teluser - shadow에서 조회했을때 !!으로 되어있으면 teluser로 로그인할 수 없는 상태이다. * *이어도 패스워드가 잠겨있는 상태이나 다른 인증방식으로 로그인할 수 있는 상태이다.
- 비밀번호를 만들어 주면 로그인이 가능해진다. # passwd teluser - 패스워드 부분에 $6$는 비밀번호 암호화 알고리즘, 두번째 $블라블라$는 솔팅 암호화 난수이다. - 끝 부분의 7은 비밀번호 만료일수일다. (6번째 순서) - 비어있는 7번째는 사용자 계정이 만료가 되는 날짜를 임의로 넣을 수 있다. - 비어있는 8번째는 사용자 계정이 만료가 되려면 며칠이 남았는지 표시된다.(만료일수)
/ 사용자 관련 설정 파일 # vi /etc/login.defs - 요 부분이 중요하다. 외워둘것
/ 사용자를 추가할때 홈 디렉토리를 어따가 둘지, 쉘을 뭘 쓸지 등등을 정한다.
/ 배시쉘을 쓰는 계정의 프로파일에 대한 정보. 배시쉘에 대한 일반적인 정보가 들어있는 디렉토리이다. # ls -al /etc/skel
/ 사용자를 만들면서 비밀번호를 같이 적용하려면 -p옵션을 준다. # useradd -p 비밀번호 사용자이름 ex) # useradd -p 1234 teluser3 - 단, 이렇게 하면 shadow에 평문으로 저장이 된다.
/ 이전 리눅스의 /etc/passwd에 있는 비밀번호를 /etc/shadow에 옮기려면 - /etc/passwd pwconv -> /etc/shadow를 하면 된다. (지금 리눅스에서 하면 이상해짐) - 되돌리는 것은 pwunconv를 하면 된다.
/ 터미널 접속하기 * 터미널에서는 사용자 계정일 경우 $로 표시된다.
/ 접속한 유저들 확인해보기 # who
/ 텔넷 나가기 # exit
/ 방화벽에 23번 포트 허용해주기
/ 외부 pc에서 cmd로 텔넷을 사용해보기 - 맨처음에는 텔넷을 사용할 수 없으므로 활성화 해야한다.
- 제어판 > 프로그램 > Windows 기능 켜기/끄기 > 텔넷 클라이언트 체크
- 이제 접속이 될것이다.
- who로 확인해보면 접속한 유저 목록이 확인된다.
- 텔넷으로 tcping처럼 확인할 수도 있다. ex) telnet www.naver.com 22일때 빈화면이 나오면 해당 포트가 열려있는 것이다.
- putty로 텔넷 접속을 해볼 수도 있다.
* 가상 터미널 서버 pts(pseudo terminal server)
- w명령어와 who명령어의 결과 화면을 기억해두자. - w는 쉘 정보는 보이는데 who는 안나온다.
- w, who 는 /ver/run/utmp에서 보이는 파일이다. - /var/log/btmp는 lastb인데, 실패한 로그인 이력을 저장한다. - /var/log/wtmp는 last인데, 로그인/로그아웃 리부팅 - /var/log/lastlog는 lastlog인데, 마지막 로그인이력
/ 관리자로 사용자를 바꾸기 # su - root - su를 할때 -를 어지간하면 쓰는것을 추천 : 대시를 쓰지 않으면 루트 사용자의 옵션을 가져가지 않는다.