2022-09-02

강아람·2022년 9월 2일
0

Kakao Cloud School

목록 보기
22/30
post-thumbnail

📖 실시간 로그 출력

[root@server1 ~]# tail -f /var/log/secure

july로 서버에 로그인 시도 (july@server1)

login as: july
july@192.168.56.101's password:
Access denied
july@192.168.56.101's password:
Access denied
july@192.168.56.101's password:
Access denied
july@192.168.56.101's password:
Access denied
july@192.168.56.101's password:
Last failed login: Thu Sep  1 17:35:26 KST 2022 from 192.168.56.1 on ssh:notty
There were 4 failed login attempts since the last successful login.
Last login: Thu Sep  1 17:33:43 2022 from 192.168.56.1

로그인 결과를 실시간으로 출력 (root@server1)

Sep  1 17:35:20 server1 unix_chkpwd[10928]: password check failed for user (july)
Sep  1 17:35:22 server1 sshd[10916]: Failed password for july from 192.168.56.1 port 51720 ssh2
Sep  1 17:35:22 server1 unix_chkpwd[10929]: password check failed for user (july)
Sep  1 17:35:24 server1 sshd[10916]: Failed password for july from 192.168.56.1 port 51720 ssh2
Sep  1 17:35:24 server1 unix_chkpwd[10931]: password check failed for user (july)
Sep  1 17:35:26 server1 sshd[10916]: Failed password for july from 192.168.56.1 port 51720 ssh2
Sep  1 17:35:26 server1 sshd[10916]: Accepted password for july from 192.168.56.1 port 51720 ssh2
Sep  1 17:35:26 server1 sshd[10916]: pam_unix(sshd:session): session opened for user july by (uid=0)



관계형 데이터베이스(RDBMS)

▶ 엄격한 스키마 규칙

NoSQL (Not only SQL)

정형, 비정형 데이터를 모두 다룸 ▶ 실시간 데이터

빅데이터

3V() ▶분석을 통해 데이터에 가치를 부여(정보)하여 통찰력을 얻음 (기업의 경쟁력, 생존)

빅 데이터를 다루는 tools

└ Elasticsearch, MongoDB ▶ json (형식에 구애받지 않고 데이터를 저장하는 DB)


📖 파일 다루기

grep

파일 내용 검색

  • 기능: 지정한 패턴을 포함하는 행을 찾는다.
  • 옵션
    • -i: 대, 소문자를 모두 검색한다.
    • -l: 해당 패턴을 포함하는 파일 이름을 출력
    • -n: 행 번호를 출력한다.

find

파일 찾기

  • 기능: 조건에 맞는 파일을 지정한 위치에서 찾는다.
  • 형식
find 경로검색조건 [동작]
  • 옵션

    • -name filename: 파일 이름으로 검색
    • -type 파일 종류: 파일의 종류로 검색
    • -user loginID: 지정한 사용자가 소유한 모든 파일 검색
    • -perm 접근 권한: 지정한 사용 권한과 일치하는 파일
  • 동작

    • -exec 명령 {} \;: 검색된 파일에 명령 실행
    • -ok 명령 {} \;: 사용자의 확인을 받아 명령 실행
    • -print: 검색된 파일의 절대 경로명을 화면에 출력(기본)
find / -type f \( -perm -04000 -o -perm -02000 \) -exec ls -l {} \; | /bin/mail -s "SUID/SGID LIST" root
  • /: /에서
  • -type f: 파일을 찾아라
  • \( -perm -04000 -0 -perm -02000 \):
  • -exec ls -l {} \;:
  • /bin/main -s "SUID/SGID LIST" root: root에 "SUID/SGID LIST"라는 제목으로 보내라

▶ 4000, 2000 특수 권한을 갖고 있는 파일을 최상위 /에서 찾아서 root 사용자에게 ls -l 한 결과를 메일(메시지)로 보내주세요.

결과:

cd /var/spool/mail
vi root
/SUID

vi 편집기에서 단어 검색

/ 또는 ? + 검색할 단어

whereis

명령의 위치 찾기

  • 기능: 지정된 경로에서 명령의 바이너리 파일이나 메뉴얼 파일의 위치를 찾는다.

/usr/bin/find

  • 절대경로 확인(echo $PATH) ▶ 스케쥴러에 사용되는 명령어는 절대경로를 입력해야 함
  • 절대경로에 등록된 실행 파일은 해당 시스템의 어떤 경로에서든 실행 가능하다.

만약, 실행 가능한 애플리케이션(shellscript)을 개발했다면 절대경로에 등록해야 한다.

1) 절대경로($PATH)에 등록된 경로에 실행 파일 저장
2) 절대경로($PATH)에 애플리케이션의 ~/bin(실행 파일 경로) 등록

which

명령의 위치 찾기

  • 기능: alias나 PATH 환경 변수로 지정된 경로에서 파일 검색

멀티 클라우드

각 클라우드의 장점에 따라 여러 클라우드를 도입하여 다양하게 사용하는 방식


시나리오

오라클을 설치하고자 한다. 사전준비사항 중 오라클 S/W가 설치되는 경로($ORACLE_HOME, $ORACLE_HOME/bin) 등을 준비해야 한다.
따라서, 해당 경로를 절대경로($PATH)에 등록해야 한다.

데이터베이스는 /u01에 설치 (OS가 설치되어있는 디렉토리에 무거운 DB를 설치하면 성능이 저하된다.)

[root@server1 ~]# mkdir -p /u01/app/oracle/procuet/12.2.0/db_1/bin

결과

[root@server1 u01]# tree
.
└── app
    └── oracle
        └── procuet
            └── 12.2.0
                └── db_1
                    └── bin

소유자 권한 변경

[root@server1 ~]# chown -R oracle.oracle /u01

결과

[root@server1 ~]# su - oracle
[oracle@server1 ~]$

oracle 실행 파일 경로 설정

[oracle@server1 ~]$ vi .bash_profile
< 설정합시다~~~> 
[oracle@server1 ~]$ source .bash_profile

설정 내용 (.bash_profile)

export ORACLE_HOME=/u01/app/oracle/procuet/12.2.0/db_1
PATH=$PATH:$HOME/.local/bin:$HOME/bin:$ORACLE_HOME/bin

경로 확인

[oracle@server1 ~]$ echo $ORACLE_HOME
/u01/app/oracle/procuet/12.2.0/db_1

or

[oracle@server1 ~]$ vi $ORACLE_HOME/bin/sqlplus

[oracle@server1 ~]$ chmod 700 $ORACLE_HOME/bin/sqlplus
[oracle@server1 ~]$ echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/oracle/.local/bin:/                    home/oracle/bin:/home/oracle/.local/bin:/home/oracle/bin:/u01/app/oracle/procuet                    /12.2.0/db_1/bin

[oracle@server1 ~]$ sqlplus
DB connection
SQL>


IAM = AuthN(인증) + AuthZ(인가)

AuthZ(인가)

권한 제어(Permission) ▶ 접근 제어

└ 파일, 디렉터리 수준에서 r(4), w(2), x(1), -(0) 으로 제어 (읽고, 쓰고, 사용하기)

접근 제어(ACL, Access Control List)

사용자 수준에서 접근 제어 가능

Cloud 보안

  • 서비스 수준의 방화벽(보안 그룹) ▶ 클라우드의 보안 수준
    • INB(인바운드): All Deny (들어오는 것은 모두 거부)
    • OUTB(아웃바운드): All Allow (나가는 것은 모두 허용)
  • NACL(네트워크 수준의 Allow, Deny) ▶ 접근권한이 없으면 아예 접근 불가

👀

CIDR (원하는 대역을 사설 네트워크를 통해 지정)
└ 192.16.0.0/16 ▶ 65535개



절대경로: PATH

$PATH에 등록된 경로의 실행파일은 어느 위치에서든 실행이 가능하게 된다.

LABs를 절대경로로 지정

[root@server1 ~]# vi .bash_profile
[root@server1 ~]# source .bash_profile
[root@server1 ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/root/bin:/root/LABs

.bash_profile 내의 PATH 수정

PATH=$PATH:$HOME/bin:/root/LABs

파일의 속성

파일의 종류

file

  • 기능: 지정한 파일의 종류를 알려준다.
  • 내용
    • 파일의 접근 권한 표시: 파일의 소유자와 그룹이나 기타 사용자들이 파일에 대해 가지고 있는 접근 권한을 표시
    • 하드 링크의 개수: 하드 링크는 한 파일에 대해 여러 개의 파일명을 가질 수 있도록 하는 기능
    • 파일 소유자의 ID
    • 파일 소유자의 그룹 이름

group

파일 접근 권한

ls -l에서
첫 번째: 파일 타입
나머지: 접근 권한

[root@server1 LABs]# mkdir perm && cd $_
[root@server1 perm]# touch file1
[root@server1 perm]# mkdir dir1
[root@server1 perm]# ls
dir1  file1
[root@server1 perm]# ls -l
total 0
drwxr-xr-x. 2 root root 6 Sep  1 19:54 dir1
-rw-r--r--. 1 root root 0 Sep  1 19:54 file1
  • 사용자
  • 그룹 사용자
  • 기타 사용자

접근 권한의 변경 명령

chmod

  • 기능 : 파일이나 디렉터리의 접근 권한 변경




파일 접근 권한

[root@server1 LABs]# mkdir perm && cd $_
[root@server1 perm]# touch file1
[root@server1 perm]# mkdir dir1
[root@server1 perm]# ls
dir1  file1
[root@server1 perm]# ls -l
total 0
drwxr-xr-x. 2 root root 6 Sep  1 19:54 dir1	-> 755 = 777-022
-rw-r--r--. 1 root root 0 Sep  1 19:54 file1	-> 644 = 666-022

022(umask) : 보안을 강화하려면 umask의 값을 증가

[root@server1 perm]# umask
0022

[root@server1 perm]# umask 0055
[root@server1 perm]# touch file2
[root@server1 perm]# mkdir dir2
[root@server1 perm]# ls -l
total 0
drwxr-xr-x. 2 root root 6 Sep  1 19:54 dir1
drwx-w--w-. 2 root root 6 Sep  1 19:57 dir2
-rw-r--r--. 1 root root 0 Sep  1 19:54 file1
-rw--w--w-. 1 root root 0 Sep  1 19:57 file2

특수 접근 권한

  • 접근 권한은 원래 4자리
  • 생략된 맨 앞자리는 특수 접근 권한 의미
  • 맨 앞자리 숫자가 0이면 일반적인 접근 권한이지만 이 숫자가 1, 2, 4이면 특수 접근 권한 설정됨

SetUID

SetGID

  • SetGID가 설정된 파일을 실행하면 해당 파일이 실행되는 동안에는 파일 소유 그룹의 권한으로 실행

스티키 비트(sticky bit), t

예) /tmp

  • 일종의 공유 디렉터리, 여러 사용자들이 이용 가능한 디렉토리 (누구나 파일 생성 가능)
  • 파일은 생성한 사용자가 소유자, 다른 사용자가 생성한 파일은 삭제 불가

접근 제어

  • ACL을 통해 접근 제어 목록 생성, ACL은 파일과 디렉토리 확장 속성 중 하나
  • chmod 명령어보다 더 다양한 권한에 대해 수행할 수 있음

getfacl [옵션][파일/디렉토리]

파일/디렉토리의 ACL을 확인할 때 사용

setfacl [옵션][권한] [파일/디렉토리]

파일/디렉토리의 ACL을 수정할 때 사용

예) setfacl -m u:jeff:rx /BACKUP: /BACKUP 디렉토리에 대해 user jeff에게 rx 권한 부여



4 Process 이해 및 스케줄러

App ▶ Process(작업자) ▶ Thread

Multi-thread

대표적인 app: MySQL

  • 데이터가 transaction으로 입력된다.

?) 대한민국 전체 은행의 평균 초당 거래 건수? 50000
▶ Multi-Process가 아니면 처리 불가능

kernel

사용자가 프로그램을 실행시키면 프로세스를 할당 ▶ fork()

Memory

process가 실행하는 장소

업무 자동화

스케줄러에게 특정 시간에 작업을 하도록 요청


프로세스

현재 시스템에서 실행 중인 프로그램 (코드가 내장되어 있음 ▶ Job)

[root@server1 ~]# pstree

트리의 최상위 트리: systemd

즉, systemd가 최우선 프로세스 (프로세스#1)

프로세스 종류

  • 데몬 프로세스: 특정 서비스를 제공하기 위해 존재하며 Linux 커널에 의해 실행
  • 고아 프로세스: 자식 프로세스가 아직 실행중인데 부모 프로세스가 먼저 종료된 자식 프로세스는 오펀(orphan) 프로세스
  • 좀비 프로세스 = idle status
    : 자식 프로세스가 실행을 종료했는데도 프로세스 테이블 목록에 남아있는 경우

프로세스 관리 명령

현재 단말기의 프로세스 목록 출력

ps
ps 명령을 옵션 없이 사용하면 현재 셀이나 터미널에서 실행한 사용자 프로세스에 대한 정보 출력

-ef

전체 프로세스의 더 자세한 정보 출력

[root@server1 ~]# pstree -p | grep 프로세스

-aux

시스템에서 실행 중인 모든 프로세스에 대한 자세한 정보 출력

👀

systemctl stop httpd.service

  • 정상종료 ▶ graceful shutdown
  • 비정상종료 ▶ force shutdown
  • 강제 종료 ▶ kill 시그널 PID / killall 프로세스

프로세스 명령어

  • top
  • iotop
  • sar 2 5
  • vmstate 2 5: virtual memory status
    • swap(가상 메모리)은 0에 가까워야 좋다!

4대 resource

  • cpu: sar
  • memory: vmstat
  • disk: (I/O) iostat, iotop ▶ IOPS, MBPS                    
                                          
  • network

프로세스 모니터링

glances

monit

작업 예약 = 스케줄링 = 업무 자동화

crontab 🌟🌟🌟

  • 기능: 사용자의 crontab 파일을 관리한다.

스케줄러에 등록된 작업 내역을 보여줌

[root@server1 ~]# crontab -l
no crontab for root
crontab -e 
	35 16 * * * /usr/bin/find / -type f \( -perm -04000 -o -perm -02000 \) -exec ls -l {} \; | /bin/mail -s "SUID/SGID LIST" root

0개의 댓글