실습할 폴더를 만들어 준 후

 

vi 내부 명령어

// 없는 걸 만들어내는 프로그래밍을 하는 게 아니라 있는 걸 가져와서 사용한다.

// 자주 사용하는 명령들을 shellscript로 사용하는 것

// 작업의 편의성을 위해 사용해야 한다.

 

 

// 실행권한을 부여해준 후 스크립트를 실행하면 명령어가 실행되면서 파일이 생성된다.

 

// \u : 사용자, \h : 호스트, \W : 현재위치

// \T : 시간

 

vi 내부 명령어

// calc.sh 파일을 생성한 후 명령어를 작성한다.

// -n : 라인 변경 안 한다..

// read : 입력한 값을 선언한 변수에 넣는다.

// 숫자 값을 입력해서 int가 아닌 string으로 인식을 함.

// "Sum: `expr $num1 + $num2`" : expr 은 꼭``로 묶어줘야 함..

// expr : 안에 있는 숫자들을 계산한다.

expr``로 묶어주면 string으로 묶인 num1,2 변수가 int로 변환된다..

// *만 쓰면 모든 것으로 인식하기 때문에 \로 곱셈이라고 알려줘야 한다.

// *과 마찬가지로 ()도 다른 역할이 있기 때문에 \\로 묶어줘야 한다. 앞뒤로 띄어쓰기가 무조건 들어가야 한다.

 

실행 결과

 

// arg.sh파일을 생성

// readonly : 프로세스가 종료될 때까지 써놓은 문자열을 출력한다.

// [ $0 ] : 배열로 저장된다.

[ $1 ] [ $2 ] [ $3 ]로 저장된다.

 

실행 결과

 

// arr.sh 파일 생성

// 배열을 묶을 때 ()를 사용해야 한다..

// 구분자는 띄어쓰기로 한다. 다른 구분자는 사용하지 않는다.

// 데이터의 순서 번호(인덱스 번호)를 넣어줘야 한다.

// 배열을 지정할 때는${}를 사용

// [@] : arr group @는 배열 그룸을 의미, 전체 데이터를 선택하는 행위

// printf "%s\n" "${arr1[@]}" : arr1 전체 데이터를 출력

 

실행 결과
참고

 

'리눅스' 카테고리의 다른 글

jstat 항목별 의미  (0) 2024.05.08
Ansible  (0) 2022.11.04
Shell Script  (0) 2022.11.03
PAM 인증  (0) 2022.11.02
Log  (0) 2022.11.02

지역 변수

- 해당 지역(만든 곳)에서만 사용이 가능한 변수

 

환경 변수

- 부모 프로세스에서 환경 변수를 선언하면 자식 프로세스도 사용할 수 있는 변수

 

// 지역 변수는 표시되지 않는다.

// 새로운 putty 창에서 변수 검색을 하면 나오지 않는다.

// 종료 시 변수는 모두 날아간다.

 

export NAME="Park"

// 변수를 영구적으로 저장하는 파일

 

// 파일 변경 사항을 덮어 씌운다.

// itbank로 접속 후 echo명령어 입력 시 나오지 않는다.

// skel파일에 환경 변수를 넣어주면 계정 생성 시 상속받기 때문에 skel파일을 설정해줘야 한다.

'리눅스' 카테고리의 다른 글

Ansible  (0) 2022.11.04
Shell Script 실습  (0) 2022.11.03
PAM 인증  (0) 2022.11.02
Log  (0) 2022.11.02
NFS 실습  (0) 2022.11.01

PAM 인증

Linux Authentication Module

- 인증 모듈 : PAM ( Pluggable Authentication Modules )

- 모듈 사용 시 주의할 점 : 항상 Test환경에서 실행 후 실제 적용할 것( 다시 재설정하기 어려움 )

 

Linux PAM

- 사용자 인증의 핵심, 인증 형태, 자원 접근 등의 선택형 라이브러리

- 모듈의 종류가 다양하며 착탈식 인증 모듈

- Telent, SSH 등의 서비스 인증 부분에서 접근 통제 설정 가능

- PAM 활용한 su의 접근 통제 설정 가능

 

PAM 동작순서

1. 프로그램이 사용자 인증 필요시PAM 라이브러리 호출

2. 라이브러리가 호출되면 프로그램의 PAM 설정 파일을 참조

3. 참고한 파일에서 모듈을 수행

4. 결괏값은 프로그램으로 반환되어 인증 여부를

 

PAM 라이브러리 관련 경로

- /etc/pam.d

   > PAM 라이브러리를 이용하는 응용프로그램의 설정 파일 위치

   > 파일명은 서비스 이름으로 되어 있다.

 

- /usr/lib64/security

   > PAM 라이브러리가 제공하는 인증 모듈들

   > 다양한 인증 작업 모듈, 라이브러리(*.so)로 구현되어 있음.‘

 

- /etc/security

   > PAM 모듈 실행에 필요한 설정 파일

   > 파일명은 해당 서비스명.conf

 

PAM 구성 파일 작성 방법

[type]                    [control]               [module-path]     [module-argument]

Type : PAM에게 어떤 타입의 인증이 사용될 것인지 지정

   - auth : 사용자 인증에 사용, 올바른 패스워드인지 확인 절차를 가짐

   - account : 계정관리, 사용자의 위치, 시간, 권한 등의 확인 절차를 가짐

   - password : 사용자가 패스워드 변경할 수 있는 모듈 지정

   - session : 로그인 전 후 수행되는 일을 지정 ( EX: 로그 )

 

Control : PAM에서 사용되는 모듈의 결과에 따라 동작 지정

   - required

        : 성공 값 반환 시 성공 후 Pass, 실패 시 마지막까지 다 실행 후 ( 실패가 나더라도 뒤의 자료도 보겠다 )

        : 대부분의 실패 확인 작업은 required 설정을 한다.

        : 특정 인증절차 부분에서 어떠한 부분에서 인증을 실패했는지 찾기 위한 것

        : 예를 들어 IP 입력 후 ID 입력에서 실패인지 IP 입력부터가 실패인지 확인한다.

        : 최초 실패 시 이후 결과에서 성공이 발생하더라도 무조건 실패 처리된다.

   - requisite( 리큐지트 ): 성공 값 반환 시 성공 후 Pass, 실패 시 곧바로 실패 ( 계정이 없으면 바로 실패 )

   - sufficient( 서피젼드 ) : 성공 값 반환 시 곧바로 성공, , 위에서 required 실패 시 실패( 우선순위가 제일 낮다 )

 

Module-path : 사용할 모듈의 위치

- 기본 Default 경로는 /usr/lib64/security로 사용된다. (PAM 모듈의 이름만 넣어도 실행)

 

Module-arguments : 모듈에게 전달되는 인수

(옵션이므로 선택적 사용이 가능, if문과 비슷한 역할을 하는 옵션을 주로 사용)

   - no_warn : 경고 메시지 표시 안 함

   - use_first_pass : 패스워드를 요구하지 않음, 패스워드가 없다면 인증받지 못함 (패스워드 오류 시 종료)

   - try_first_pass : 입력받은 패스워드로 인증을 시도, 없다면 사용자에게 물어봄 (패스워드 오류 시 다시 입력)

'리눅스' 카테고리의 다른 글

Shell Script 실습  (0) 2022.11.03
Shell Script  (0) 2022.11.03
Log  (0) 2022.11.02
NFS 실습  (0) 2022.11.01
NFS (Network File System)  (0) 2022.11.01

LOG

ELK Stack을 이용해서 Log를 관리하는 방식을 많이 쓰려고 한다.

EX) Elasticsearch, Logstash, Kibana, Beats

 

[ Elasticsearch ]

- Java로 개발된 오픈 소스 검색 엔진 ( ElasticsearchELK Stack의 핵심 구성 요소 )

- HTTP 대시보드 웹 인터페이스( Kibana )와 함께 분산되어 있는 다중 테넌트(분산 저장)에 저장된 전체 텍스트 검색 엔진을 제공

- JSON 문서 체계를 사용하여 데이터 요청, 검색, 저장을 수행하고, 로그 파일뿐만 아니라 각종 다양한 형태의 텍스트를 검색하는 데 사용된다.

 

[ Logstash ]

- 이벤트 및 로그 관리를 위한 오픈 소스 도구

- 데이터 수집을 위한 실시간 감시기능을 제공

- Logstash는 로그 데이터를 수집하고 데이터를 JSON 문서로 변환 후 Elasticsearch에 저장하는 역할을 수행

 

[ Kibana ]

- Elasticsearch를 위한 오픈 소스 데이터 시각화 도구

- Kibana는 직관적이고, 깔끔한 형태의 대시 보드 웹 인터페이스를 제공

- Elasticsearch에서 데이터를 관리하고, Kibana에서 데이터를 시각화

 

[ Beats ]

- BeatsClient에 설치하여 Client에서 발생하는 대량의 데이터를 Logstash & Elasticsearch 서버로 보낼 수 있는 경량 에이전트 데이터 전송 서비스

- Log File 전송에 사용되는 "Filebeat"외의 다양한 Beat를 제공 ( "Metricbeat", "Packetbeat", "Winlogbeat" )

- Beats 목록 및 다운로드 링크 : https://www.elastic.co/kr/downloads/beats

'리눅스' 카테고리의 다른 글

Shell Script  (0) 2022.11.03
PAM 인증  (0) 2022.11.02
NFS 실습  (0) 2022.11.01
NFS (Network File System)  (0) 2022.11.01
FTP  (0) 2022.10.31

blog-01에 HDD 1GB 추가

250M으로 4개 primary로 생성

 

필요한 패키지들

 

설치한 패키지들의 방화벽을 열어주고 /etc/exports안에 squash 옵션을 부여

# [Share Dir] [Allow Host/Network][(Option)]

/nfs_server1 192.168.1.150(rw,no_root_squash,sync)

/nfs_server2 192.168.1.0/24(rw,async,no_wdelay)

/nfs_server3 *(rw,all_squash,anonuid=1005,anongid=1005,sync)

/nfs_server4 192.168.1.150(rw,no_root_squash,sync)

 

// squash 옵션을 잘 모르면 절대로 사용하면 안 된다.. 보안상의 문제 때문에

// no_root_squash : 절대로 사용하면 안 되는 옵션

// * : 어디에서든 접속할 수 있는 명령어 -> 사용 안 하는 게 좋음

 

// portmapper 가 올라와 있어야 활성화된 것

// nlockmgr : 파일 시스템을 공유한 상태로 내부에 들어있는 데이터를 동시다발적으로 사용하는 환경이 만들어졌을 때 동시에 쓰기 작업을 사용하지 못하게 한다.

// nlockmgr 이 올라와야 한다.. 올라오지 않으면 안 된다.

// 동시다발적으로 쓰기 작업이 절대로 허용하면 안 된다. (무결성이 깨져버리기 때문)

EX) 데이터베이스

 

// /etc/exports를 편집할 상황이 생겼을 때 적용하려면 restart 해야 하지만 누군가가 데이터를 전송, 사용 중일 때 데이터 손실을 막기 위해 사용

// ra 서비스를 재시작하지 않아도 적용할 수 있는 명령어

 

// 공유 정보

// nfs_server1~4까지 모두 공유가 잘 된 상태

// (~~~~) 적용된 옵션 -> 기본값에 맞춰서 자동으로 세팅

// sync : 동기식 작업, 실시간 스트리밍 형식으로 데이터가 저장

// 동기식 작업 : 실시간 데이터 작업

// async : 비동기식 작업, 하나의 블록단위가 만들어지고 한 덩어리씩 데이터가 저장되는 형식

// 비동기식 작업 : 캐시 메모리에 버퍼 공간을 만들고 버퍼에 저장된 데이터가 단위 형태로 실제 nfs서버에 저장되는 작업

// 다중 쓰기 작업이 많이 발생한다 -> 비동기식 작업

// 다중 사용자가 동시다발적으로 쓰기 작업을 사용하지 않는다 -> 동기식 작업

// wdelay(write delay 쓰기 지연) : sync와 세트 (async no_wdelay)

// hide : 다중 클라이언트 일 때 사용(단일 호스트 일 때는no host를 사용한다고 명시)

   - 보통 hide사용

// no_subtree : 하위 트리를 보여주지 않는다.

// rw : 읽기 쓰기

// secure : port번호의 범위를 명시 102보다 낮은 녀석 OK (default)

// insecure : 1024보다 크거나 같은 port 범위를 명시

// client에서 NFS를 사용하려면 root_squash, no_root_squash가 있어야 한다.

// root_squash, no_root_squash : 두 개씩 들어가야 함

   - 일반 사용자를 위한 매핑

   - root계정으로 로그인하면 root가 되는 게 아니라 nfs_nobody계정으로 접근된다.

   - nfs_nobody : 어떠한 권한도 없는 일반 사용자

// no_root_squash

   - client root, server root를 매핑하겠다.

   - 허가되지 않은 사용자(해커)가 내 root를 만들어서 serverroot에 접근하면 안 되기 때문에 사용하면 안 되는 옵션

 

 

// rpcbind를 켜준 후 portmapper 켜져 있는 것 확인

 

// blog-01에 있는 디렉터리 똑같이 생성

 

blog-01에서 mount 걸어준 후

 

blog-02에서 blog-01로 mount

 

blog-02에서 생성한 파일이 blog-01에서도 생성되는 것 확인

 

 

'리눅스' 카테고리의 다른 글

PAM 인증  (0) 2022.11.02
Log  (0) 2022.11.02
NFS (Network File System)  (0) 2022.11.01
FTP  (0) 2022.10.31
scp  (0) 2022.10.31

NFS (Network File System)

- 가장 대표적인 NAS(Network Area Storage) 환경을 구축 가능한 서비스

- 일반적인 네트워크 환경을 이용하여 자신의 File System을 공유하는 서비스

- 역할 : NFS Server(File System 공유) / NFS Client (공유된 File System을 사용)

- 공유된 File System에 접근하기 위해서는 반드시 Portmapper의 도움을 받아야 한다. (rpc-bind 패키지)

 

NFS 계정 Mapping Option : 실질적인 권한 부여 옵션

- 모든 공유 디렉터리에는 root Mapping 옵션과 그 외 사용자를 위한 Mapping 옵션 2가지가 반드시 설정

- 옵션을 지정하지 않을 경우 기본값(*)으로 자동 설정

- root_squash(*) : Client에서 root로 접근 시 Servernfsnobody 계정으로 Mapping

- no_root_squash : Client에서 root로 접근 시 Serverroot계정으로 Mapping

- all_squash : Client의 모든 계정 접근 시 Servernfsnobody 계정으로 Mapping

- no_all_squash(*) : Client의 모든 계정 접근 시 Server의 동일 계정으로 Mapping (동일 계정 X : nfsnobody)

 

 

'리눅스' 카테고리의 다른 글

Log  (0) 2022.11.02
NFS 실습  (0) 2022.11.01
FTP  (0) 2022.10.31
scp  (0) 2022.10.31
SSH 설정  (0) 2022.10.28

FTP (File Transfer Protocol) : 파일 전송 규약

- TCP/IP 환경에서 파일 전송용 Application Protocol.

- 시스템에 등록된 사용자들을 위한 FTP Service와 익명의 모든 사용자에게 개방하는 Anonymous FTP Service가 있음.

- FTP는 TCP기반으로써 TCP 서비스만 사용하게 됨.

- 20Data포트(데이터 전송용)Control 포트인 21번 포트 2개의 포트를 사용.

- FTP mode에 따라 Data 포트가 항상 20번 포트를 사용하는 것은 아님.

- ActivePassive 모드가 있으며 접속 요청을 하는 클라이언트가 결정하게 됨.

 

 

 

Active Mode

- 20Data 포트 사용

- 5150으로 21번 포트에 연결

- 5151(Data포트로 사용할 포트 번호) 알려줌

- Server20(Data 포트)로 5151(Data 포트)에 접근

- Client에서 방화벽을 신경 써야 한다. (Server에서 Client로 접속하기 때문에)

 

 

 

Passive Mode

- 3267이라는 랜덤 포트를 사용하겠다고 알려줌

- Client가 해당 포트로 접근해서 송신

- FTP에 사용할 랜덤 포트 범위를 정해놓고 방화벽을 해제해놓아야 한다.

 

Mode 모두 사용한다.

'리눅스' 카테고리의 다른 글

NFS 실습  (0) 2022.11.01
NFS (Network File System)  (0) 2022.11.01
scp  (0) 2022.10.31
SSH 설정  (0) 2022.10.28
DHCP (Dynamic Host Configuration Protocol)  (0) 2022.10.28

scp

[ Linux Lunux SSH 연결 ]

ssh [remote-IP]                          // 계정을 따로 지정하지 않는다.

ssh l [user-name] [remote-IP]

ssh [user-name]@[remote-IP]  // 어떤 계정에 접속할지 명시해놓는다.

 

scp -> ssh + cp

 

실습

1. blog-02 -> blog-01

blog-01,02에 scp디렉터리 생성

blog-02에서 A파일을 생성 후 blog-01로 전송

 

blog-01에 파일 생성된 것 확인 가능

 

2. blog-01 -> blog-02

blog-01에 B파일을 생성

 

blog-02에서 blog-01에 있는 B파일을 가져옴

 

root 계정이 아닌 사용자 계정으로 파일을 생성 후 보내기를 시도했지만 권한이 없기 때문에 Permission denied 오류 발생

 

blog-01에서 권한을 부여한 후 다시 보내면

 

보내진 것 확인 가능

 

반대도 똑같이 권한 부여하고 받을 수 있다.

 

'리눅스' 카테고리의 다른 글

NFS (Network File System)  (0) 2022.11.01
FTP  (0) 2022.10.31
SSH 설정  (0) 2022.10.28
DHCP (Dynamic Host Configuration Protocol)  (0) 2022.10.28
채널 본딩  (0) 2022.10.27

+ Recent posts