22일차는
- 관계형 데이터베이스(MariaDB)
- SELinux에 대해서 학습하였다.
1.관계형 데이터베이스
- 데이터를 저장하기 위한 공간
- Oracle Database, MySQL, MariaDB, PostgreSQL 등
- 3306 포트 번호 사용
- 데이터베이스와 테이블로 구성
(1) MariaDB
- yum install mariadb-server : 설치
- systemctl enable mariadb --now : 활성화 및 실행
- mysql -u root -h localhost -p : maria db 로그인
- mysql_secure_installation : 보안설정
- 패스워드 설정 (root로 설정)
- Remove anonymous users? [Y/n] Y
- Disallow root login remotely? [Y/n] Y
- Remove test database and access to it? [Y/n] Y
- Reload privilege tables now? [Y/n] Y
- /etc/my.cnf : MariaDB 설정 파일
(2) SQL 언어
- 데이터 정의 언어 (DDL)
- 데이터베이스 or 테이블 정의 (CREATE, ALTER, DROP)
- MariaDB [(none)]> show databases; : 데이터베이스 목록 확인
- CREATE DATABASE test_db; : test_db라는 이름의 데이터베이스 생성
- use test_db; : 데이터베이스 선택 (MariaDB [test_db]> 로 바뀜)
- 테이블 생성
MariaDB [test_db]> CREATE TABLE user (
-> num int AUTO_INCREMENT,
-> name varchar(50) NOT NULL,
-> email varchar(50),
-> PRIMARY KEY(num)
-> );
- MariaDB [test_db]> SHOW TABLES; : 테이블 목록 확인
- DESCRIBE user; : 테이블에 대한 정보 출력
- CREATE USER user01@localhost IDENTIFIED BY 'user01'; : 사용자 생성 (user01/user01)
- mysql 데이터베이스의 User 테이블에 사용자 정보가 기록됨
- ALTER TABLE user ADD phone varchar(20); : phone 컬럼을 추가
- ALTER TABLE user DROP COLUMN phone; : 테이블 필드 제거
- ALTER TABLE user CHANGE num id int AUTO_INCREMENT; : 필드 명 변경 (옵션이 바뀌지 않아도 다시 기입해줘야하 함)
- DROP DATABASE [데이터베이스]; : 데이터베이스 제거
- DROP TABLE [테이블]; : 테이블 제거 (테이블은 해당 데이터베이스 use 상태에서 작업해야함)
- 데이터 조작 언어 (DML)
- INSERT, SELECT, UPDATE, DELETE
- INSERT INTO user (name, email) VALUES ('jklim', 'jklim@gmail.com'); : 데이터 입력
- SELECT * FROM user; : 테이블에 있는 모든 필드 출력
- SELECT name, email FROM user; : 특정 필드만 선택 출력
- SELECT name,email FROM user WHERE id=3; : 조건에 맞는 레코드, 필드 출력
- UPDATE user SET email='gs@nobreak.co.kr' WHERE id=1; : 레코드 값 수정
- DELETE FROM user WHERE id =1; : 조건에 해당하는 레코드 삭제
- 데이터 제어 언어 (DCL)
- 사용자의 데이터 접근 권한 제어 (GRANT, REVOKE)
- GRANT SELECT,INSERT ON user TO user01@localhost; : user01에게 SELECT, INSERT권한 부여
- FLUSH PRIVILEGES; : 권한 변경 후, 권한 테이블을 적용
- SHOW GRANTS FOR user01@localhost; ; user01의 권한 조회
- REVOKE INSERT ON user FROM user01@localhost; user01의 권한 회수
(3) 백업
- 물리적 백업
- /etc/my.cnf → datadir=/var/lib/mysql 에 데이터베이스 파일이 저장되어있음
- /var/lib/mysql 해당 디렉토리에 저장된 파일들을 묶어서 저장 → 쉽고 빠름
- 복원이 제대로 안될 수 있다. 하드웨어, 버전 등의 여러 환경적인 부분 때문
- 논리적 백업
- 데이터베이스를 파일화 (구조, 데이터 내용 등)
- 데이터베이스 설정 적용 불가
- 복원하는데 시간이 걸림
- 논리적 백업 / 복원 실습
- mysqldump -u root -p test_db > /root/test_db.dump : 백업
- file test_db.dump : 백업 파일 형식 확인 (단순 텍스트 파일)
MariaDB [(none)]> CREATE DATABASE test_db_restore;
[root@localhost ~]
2. SELinux

- Secure Linux의 약자
- 하나의 서비스가 관련되지 않은 다른 데이터에 접근하지 못하도록 함 (웹 서비스를 제공 받고자하는 사용자는 웹만 사용하여야 함. 데이터베이스로 접근하면 안됨)
- 리눅스의 접근 통제 방식 : DAC, MAC 두가지를 혼합해서 사용
- DAC : 권한과 관련. 접근하는 사람이 누구인지를 보고 통제. 일반적인 시스템.
- MAC : 프로세스, 포트 등을 제어해서 통제
- SELinux는 MAC 모델의 대표적인 예
- 모든 파일, 프로세스, 포트, 디렉토리에는 특수 레이블 존재.
- ps axZ 명령어 → LABEL → system_u:system_r:init_t:s0 (사용자: 역할: 유형: 민감도)
- 이중에서 다룰 내용은 유형 (init_t)
- ps axZ | grep http : apache 서비스의 유형 확인 (ps -ZC httpd 로도 확인 가능) → httpd_t
- ls -Z /var/www/ : 디렉토리에도 특수 레이블이 존재 →httpd_sys_content_t
- 관련되는 레이블끼리 연결을 시켜주는 개념 (httpd_t ↔ httpd_sys_content_t)
- getenforce 명령어 : SELinux의 활성화 여부 확인
- setenforce 0 또는 1 : SELinux 비활성화 또는 활성화
- /etc/selinux/config : SELinux의 설정 파일 (SELINUX=enforcing : 부팅 시 자동 활성화)
[root@localhost ~]
[root@localhost ~]
[root@localhost ~]
-rw-r
-rw-r
-rw-r
- semanage : SELinux의 유형 컨텍스트를 제어하는 명령어
- semanage fcontext -l | grep /var/www : httpd 에 대한 유형 컨텍스트 생성 규칙
[root@localhost ~]
[root@localhost ~]
drwxr-xr-x. root root unconfined_u:object_r:default_t:s0 /content/httpd/
[root@localhost ~]
[root@localhost ~]
[root@localhost ~]
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 /content/httpd
[root@localhost ~]
-rw-r
[root@localhost ~]
restorecon reset /var/www/html/file_2.html context unconfined_u:object_r:admin_home_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0
[root@localhost ~]
-rw-r
[root@localhost ~]
[root@localhost ~]
-rw-r
- SELinux 부울 : 정책 허용 스위치
- getsetbool -a : 전체를 확인하는 방법
- getsebool httpd_enable_homedirs
- semanage boolean -l : 현재, 영구 정책 확인[root@localhost ~]
httpd_enable_homedirs (비활성 , 비활성 ) Allow httpd to enable homedirs
[root@localhost ~]
[root@localhost ~]
httpd_enable_homedirs (활성 , 비활성 ) Allow httpd to enable homedirs
[root@localhost ~]
[root@localhost ~]
httpd_enable_homedirs (활성 , 활성 ) Allow httpd to enable homedirs
- SELinux 포트 제어
- vim /etc/httpd/conf/httpd.conf → Listen 80 을 주석처리하고 Listen 82 추가
- systemctl restart httpd → 에러남 → journalctl -xe : 1차 로그로 세부 내용 확인
- semanage port -l | grep http : SElinux 바인딩 포트 확인 → 82번이 없음
- semanage port -a -t http_port_t -p tcp 82 : 포트 추가
- firewall-cmd --add-port=82/tcp
추가) fstab 잘못 수정 후 부팅 안될 시, 대처방법
- 상황 : /mnt/data의 파일시스템 부분이 xf로 오타

- root 비밀번호를 잊어버리면 rescue mode
- fastab 설정이 잘못되면 emergency mode
- emergency mode로 진입 방법
- 부트로더 선택 항목에서 e 누르기
- Linux 끝에 띄어쓰기 후 systemd.unit=emergency.target 입력 ctrl+x
- mount -o remount,rw / : 루트 디렉토리를 재마운트 (읽기 쓰기 모드로)
- mount -a 를 입력하면 잘못된 부분을 찾아줌 → 수정하고 다시 마운트
- ctrl + d 로 재부팅
- man bootup : 부팅하는 과정 (유닛 실행 절차) 를 확인 할 수 있는 명령어