Linux Admin-빠른 가이드
비즈니스 클래스 Linux 배포판 중에서 고유 한 CentOS는 Linux가 기반으로하는 오픈 소스 특성에 충실합니다. 최초의 Linux 커널은 헬싱키 대학 (Linus Torvalds)의 대학생이 개발했으며 Richard Stallman이 설립하고 홍보 한 GNU 유틸리티와 결합되었습니다. CentOS는 오늘날의 비즈니스 세계를 지원할 수있는 검증 된 오픈 소스 라이선스를 보유하고 있습니다.
CentOS는 빠르게 세계에서 가장 많은 서버 플랫폼 중 하나가되었습니다. 취업을 원하는 모든 Linux 관리자는“CentOS Linux Experience Preferred”라는 단어를 접하게됩니다. 신생 기업부터 Fortune 10 대 기술 거물에 이르기까지 CentOS는 전 세계 서버 운영 체제의 상위 계층에 속합니다.
CentOS를 다른 Linux 배포판에서 돋보이게하는 것은 다음과 같은 훌륭한 조합입니다.
오픈 소스 라이선스
Linux 전문가의 전담 사용자 기반
좋은 하드웨어 지원
견고한 안정성 및 신뢰성
보안 및 업데이트에 집중
기업 환경에 필요한 소프트웨어 패키징 표준에 대한 엄격한 준수
수업을 시작하기 전에 독자가 다음과 같은 Linux 및 관리 기본 사항에 대한 기본 지식이 있다고 가정합니다.
루트 사용자는 무엇입니까?
루트 사용자의 힘
보안 그룹 및 사용자의 기본 개념
Linux 터미널 에뮬레이터 사용 경험
기본 네트워킹 개념
해석 된 프로그래밍 언어에 대한 기본 이해 (Perl, Python, Ruby)
HTTP, LDAP, FTP, IMAP, SMTP와 같은 네트워킹 프로토콜
컴퓨터 운영 체제를 구성하는 코어 : 파일 시스템, 드라이버 및 커널
CentOS Linux 관리자의 도구를 배우기 전에 Linux 관리 명령 줄의 철학에 주목하는 것이 중요합니다.
Linux는 "더 큰 작업을 단순화하기 위해 함께 연결된 작고 정확한 도구"라는 Unix 철학을 기반으로 설계되었습니다. Linux는 그 루트에서 특정 용도를위한 대규모 단일 목적 응용 프로그램을 많이 가지고 있지 않습니다. 대신, 결합했을 때 큰 작업을 효율적으로 수행 할 수있는 강력한 기능을 제공하는 수백 개의 기본 유틸리티가 있습니다.
Linux 철학의 예
예를 들어, 관리자가 시스템의 모든 현재 사용자 목록을 원하는 경우 다음 연결 명령을 사용하여 모든 시스템 사용자 목록을 가져올 수 있습니다. 명령을 실행하면 시스템에있는 사용자가 알파벳 순서로 나열됩니다.
[root@centosLocal centos]# cut /etc/passwd -d":" -f1 | sort
abrt
adm
avahi
bin
centos
chrony
colord
daemon
dbus
다음 명령을 사용하여이 목록을 텍스트 파일로 쉽게 내보낼 수 있습니다.
[root@localhost /]# cut /etc/passwd -d ":" -f1 > system_users.txt
[root@localhost /]# cat ./system_users.txt | sort | wc –l
40
[root@localhost /]#
나중에 사용자 목록을 내보내기와 비교할 수도 있습니다.
[root@centosLocal centos]# cut /etc/passwd -d ":" -f1 > system_users002.txt &&
cat system_users002.txt | sort | wc -l
41
[root@centosLocal centos]# diff ./system_users.txt ./system_users002.txt
evilBackdoor [root@centosLocal centos]#
더 큰 작업을 수행하기 위해 연결된 작은 도구의 이러한 접근 방식을 사용하면 정기적 인 시간 간격으로 결과를 자동으로 이메일로 보내는 것보다 이러한 명령을 수행하는 스크립트를 만드는 것이 더 간단합니다.
모든 Linux 관리자가 능숙해야하는 기본 명령은 다음과 같습니다.
- vim
- grep
- 점점 더
- tail
- head
- wc
- sort
- uniq
- tee
- cat
- cut
- sed
- tr
- paste
Linux 세계에서 관리자는 filtering로그를 구문 분석하고, 명령 출력을 필터링하고, 대화 형 셸 스크립트를 사용하여 작업을 수행하는 명령을 매일 사용합니다. 언급했듯이 이러한 명령의 힘은 다음과 같은 프로세스를 통해 서로를 수정할 수있는 능력에 있습니다.piping.
다음 명령은 CentOS 기본 사용자 사전에서 문자 a로 시작하는 단어 수를 보여줍니다.
[root@centosLocal ~]# egrep '^a.*$' /usr/share/dict/words | wc -l
25192
[root@centosLocal ~]#
CentOS Linux의 디렉토리와 파일 모두에 적용되는 권한을 도입하려면 다음 명령 출력을 살펴 보겠습니다.
[centos@centosLocal etc]$ ls -ld /etc/yum*
drwxr-xr-x. 6 root root 100 Dec 5 06:59 /etc/yum
-rw-r--r--. 1 root root 970 Nov 15 08:30 /etc/yum.conf
drwxr-xr-x. 2 root root 187 Nov 15 08:30 /etc/yum.repos.d
Note − 표시되는 세 가지 주요 개체 유형은 다음과 같습니다.
"-" − 일반 파일의 경우 대시
"d" − 디렉토리 용
"l" − 심볼릭 링크의 경우
우리는 각 디렉토리와 파일에 대한 세 가지 출력 블록에 초점을 맞출 것입니다.
- drwxr-xr-x : 루트 : 루트
- -rw-r--r-- : 루트 : 루트
- drwxr-xr-x : 루트 : 루트
이제이 줄을 더 잘 이해하기 위해 이것을 분해 해 보겠습니다.
디 | 객체 유형이 디렉토리임을 의미합니다. |
rwx | 소유자에게 적용된 디렉토리 권한을 나타냅니다. |
rx | 그룹에 적용된 디렉터리 권한을 나타냅니다. |
rx | 세계에 적용된 디렉토리 권한을 나타냅니다. |
뿌리 | 첫 번째 인스턴스는 디렉토리 소유자를 나타냅니다. |
뿌리 | 두 번째 인스턴스는 그룹 권한이 적용되는 그룹을 나타냅니다. |
소유자 , 그룹 및 세계 의 차이를 이해하는 것이 중요합니다. 이것을 이해하지 못하면 인터넷에 서비스를 호스팅하는 서버에 큰 결과를 초래할 수 있습니다.
실제 예제를 제공하기 전에 먼저 디렉터리 및 파일에 적용되는 권한을 이해해 보겠습니다 .
다음 표를 살펴보고 지침을 계속 진행하십시오.
8 진법 | 상징적 | 파마. | 예배 규칙서 |
---|---|---|---|
1 | 엑스 | 실행 | 디렉토리 입력 및 파일 액세스 |
2 | w | 쓰다 | 디렉토리에서 파일 삭제 또는 수정 |
4 | 아르 자형 | 읽다 | 디렉토리 내의 파일 나열 |
Note− 디렉토리에서 읽기 위해 파일에 액세스 할 수 있어야하는 경우 읽기 및 실행 권한 을 적용하는 것이 일반적 입니다. 그렇지 않으면 사용자가 파일 작업에 어려움을 겪을 것입니다. 떠나는 쓰기 파일을 보장합니다 비활성화하는 것은 할 수 없습니다,, 삭제, 이름 변경 복사하거나 권한을 수정했습니다.
디렉토리 및 파일에 권한 적용
권한을 적용 할 때 이해해야 할 두 가지 개념이 있습니다.
- 상징적 권한
- 8 진법 권한
본질적으로 각각은 동일하지만 파일 권한을 참조하고 할당하는 방법이 다릅니다. 퀵 가이드는 다음 표를 참조하십시오.
읽다 | 쓰다 | 실행 | |
---|---|---|---|
Octal | 4 | 2 | 1 |
Symbolic | 아르 자형 | w | 엑스 |
사용 권한을 할당 할 때 octal방법은 다음과 같은 3 바이트 숫자를 사용합니다. 760. 숫자 760은 다음과 같이 변환됩니다. 소유자 : rwx; 그룹 : rw; 기타 (또는 세계) 권한 없음.
또 다른 시나리오 : 733은 다음과 같이 해석됩니다. 소유자 : rwx; 그룹 : wx; 기타 : wx.
Octal 방법을 사용하는 권한에는 한 가지 단점이 있습니다. 기존 권한 집합은 수정할 수 없습니다. 개체의 전체 권한 집합을 재 할당하는 것만 가능합니다.
이제 항상 권한을 다시 할당하는 것이 왜 문제가되는지 궁금 할 것입니다. 프로덕션 웹 서버 에서 큰 디렉토리 구조 (예 : / var / www /) 를 상상해보십시오 . 기타의 모든 디렉토리 에서 w 또는 쓰기 비트 를 재귀 적으로 제거하려고합니다 . 따라서 보안 조치가 필요할 때만 사전에 추가하도록 강제합니다. 전체 권한 집합을 다시 할당하면 모든 하위 디렉터리에 할당 된 다른 모든 사용자 지정 권한이 제거됩니다.
따라서 시스템 관리자와 사용자 모두에게 문제가됩니다. 어느 시점에서 개인 (또는 개인)은 모든 디렉터리 및 개체에 대한 전체 권한 집합을 다시 할당하여 지워진 모든 사용자 지정 권한을 다시 할당해야합니다.
이 경우 Symbolic 메서드를 사용하여 권한을 수정하고 싶습니다.
chmod -R o-w /var/www/
위의 명령은 "권한 덮어 쓰기"가 아니라 현재 사용 권한 집합을 수정합니다. 따라서 모범 사례를 사용하는 데 익숙해 지십시오.
- 권한을 할당하기위한 8 진수 만
- 권한 집합을 수정하기위한 기호
데이터 및 전체 운영 체제의 무결성을 위해 권한이 중요 하므로 CentOS 관리자가 Octal 및 Symbolic 권한 을 모두 능숙하게 사용하는 것이 중요합니다. 권한이 올바르지 않으면 최종 결과는 민감한 데이터가되고 전체 운영 체제가 손상됩니다.
이를 통해 권한 및 개체 소유자 / 구성원을 수정하는 몇 가지 명령을 살펴 보겠습니다.
- chmod
- chown
- chgrp
- umask
chmod : 파일 모드 권한 비트 변경
명령 | 동작 |
---|---|
-씨 | 상세 정보와 같지만 변경 사항 만보고합니다. |
-V | Verbose, 모든 요청에 대한 진단 출력 |
-아르 자형 | 파일 및 디렉토리에 작업을 재귀 적으로 적용합니다. |
chmod를 사용하면 8 진수 또는 기호 권한 집합을 사용하여 디렉토리 및 파일의 권한을 변경할 수 있습니다. 이를 사용하여 할당을 수정하고 디렉토리를 업로드합니다.
chown : 파일 소유자 및 그룹 변경
명령 | 동작 |
---|---|
-씨 | 상세 정보와 같지만 변경 사항 만보고합니다. |
-V | Verbose, 모든 요청에 대한 진단 출력 |
-아르 자형 | 파일 및 디렉토리에 작업을 재귀 적으로 적용합니다. |
chown 은 사용자 소유와 객체 그룹을 모두 수정할 수 있습니다. 그러나 동시에 둘 다 수정할 필요가 없으면 chgrp 를 사용하는 것이 일반적으로 그룹에 사용됩니다.
chgrp : 파일 또는 디렉토리의 그룹 소유권 변경
명령 | 동작 |
---|---|
-씨 | 장황하지만 변경 사항 만보고합니다. |
-V | Verbose, 모든 요청에 대한 진단 출력 |
-아르 자형 | 재귀 적으로 파일 및 디렉토리에 작업을 적용합니다. |
chgrp는 그룹 소유자를 제공된 소유자로 변경합니다.
실제 연습
/ var / www / students / 의 모든 하위 디렉토리 할당을 변경 하여 소유 그룹이 학생 그룹 이되도록합니다 . 그런 다음 교수 그룹 에 학생 루트를 할당합니다 . 나중에 테리 토마스 박사를 학생 디렉토리 의 소유자로 만드십시오. 그는 학교의 모든 컴퓨터 과학 학계를 담당하고 있기 때문입니다.
보시다시피, 생성되었을 때 디렉토리는 매우 원시 상태로 남아 있습니다.
[root@centosLocal ~]# ls -ld /var/www/students/
drwxr-xr-x. 4 root root 40 Jan 9 22:03 /var/www/students/
[root@centosLocal ~]# ls -l /var/www/students/
total 0
drwxr-xr-x. 2 root root 6 Jan 9 22:03 assignments
drwxr-xr-x. 2 root root 6 Jan 9 22:03 uploads
[root@centosLocal ~]#
관리자로서 우리는 누구에게도 루트 자격 증명 을 제공하고 싶지 않습니다 . 그러나 동시에 사용자가 자신의 업무를 수행 할 수있는 능력을 허용해야합니다. 따라서 Dr. Terry Thomas가 파일 구조를 더 잘 제어하고 학생들이 할 수있는 일을 제한하도록합시다.
[root@centosLocal ~]# chown -R drterryt:professors /var/www/students/
[root@centosLocal ~]# ls -ld /var/www/students/
drwxr-xr-x. 4 drterryt professors 40 Jan 9 22:03 /var/www/students/
[root@centosLocal ~]# ls -ls /var/www/students/
total 0
0 drwxr-xr-x. 2 drterryt professors 6 Jan 9 22:03 assignments
0 drwxr-xr-x. 2 drterryt professors 6 Jan 9 22:03 uploads
[root@centosLocal ~]#
이제 각 디렉토리와 하위 디렉토리에는 drterryt 의 소유자가 있고 소유 그룹은 professors 입니다. 과제 디렉토리는 학생이 과제물 을 제출 하는 것이므로 학생 그룹 에서 파일 을 나열하고 수정하는 기능을 제거하겠습니다 .
[root@centosLocal ~]# chgrp students /var/www/students/assignments/ && chmod
736 /var/www/students/assignments/
[root@centosLocal assignments]# ls -ld /var/www/students/assignments/
drwx-wxrw-. 2 drterryt students 44 Jan 9 23:14 /var/www/students/assignments/
[root@centosLocal assignments]#
학생은 과제 디렉토리에 과제를 복사 할 수 있습니다 . 그러나 디렉토리의 내용을 나열하거나 현재 파일을 복사하거나 할당 디렉토리의 파일을 수정할 수 없습니다 . 따라서 학생들이 완료된 과제를 제출할 수 있습니다. CentOS 파일 시스템은 할당이 제출 된 날짜 스탬프를 제공합니다.
할당 디렉토리 소유자 로서 -
[drterryt@centosLocal assignments]$ whoami drterryt [drterryt@centosLocal assignments]$ ls -ld /var/www/students/assignment
drwx-wxrw-. 2 drterryt students 44 Jan 9 23:14 /var/www/students/assignments/
[drterryt@centosLocal assignments]$ ls -l /var/www/students/assignments/ total 4 -rw-r--r--. 1 adama students 0 Jan 9 23:14 myassign.txt -rw-r--r--. 1 tammyr students 16 Jan 9 23:18 terryt.txt [drterryt@centosLocal assignments]$
디렉토리 소유자는 파일을 나열하고 파일을 수정 및 제거 할 수 있습니다.
umask 명령 : 파일 및 디렉토리 권한이 생성 될 때 기본 모드를 제공합니다.
umask 는 파일 및 디렉토리 권한이 생성 될 때 기본 모드를 제공하는 중요한 명령입니다.
umask 권한은 단항 부정 논리를 사용합니다.
허가 | 조작 |
---|---|
0 | 읽기, 쓰기, 실행 |
1 | 읽고 쓰기 |
2 | 읽기 및 실행 |
삼 | 읽기 전용 |
4 | 읽기 및 실행 |
5 | 쓰기 만 |
6 | 실행 만 |
7 | 권한 없음 |
[adama@centosLocal umask_tests]$ ls -l ./ -rw-r--r--. 1 adama students 0 Jan 10 00:27 myDir -rw-r--r--. 1 adama students 0 Jan 10 00:27 myFile.txt [adama@centosLocal umask_tests]$ whoami
adama
[adama@centosLocal umask_tests]$ umask 0022 [adama@centosLocal umask_tests]$
이제 현재 사용자 의 umask 를 변경하고 새 파일과 디렉토리를 만들어 보겠습니다 .
[adama@centosLocal umask_tests]$ umask 077 [adama@centosLocal umask_tests]$ touch mynewfile.txt
[adama@centosLocal umask_tests]$ mkdir myNewDir [adama@centosLocal umask_tests]$ ls -l
total 0
-rw-r--r--. 1 adama students 0 Jan 10 00:27 myDir
-rw-r--r--. 1 adama students 0 Jan 10 00:27 myFile.txt
drwx------. 2 adama students 6 Jan 10 00:35 myNewDir
-rw-------. 1 adama students 0 Jan 10 00:35 mynewfile.txt
보시다시피 새로 생성 된 파일은 이전보다 조금 더 제한적입니다.
사용자를위한 umask 는 다음 중 하나에서 변경되어야합니다.
- /etc/profile
- ~/bashrc
[root@centosLocal centos]# su adama
[adama@centosLocal centos]$ umask 0022 [adama@centosLocal centos]$
일반적으로 CentOS 의 기본 umask 는 괜찮습니다. 기본값 0022 에서 문제가 발생하면 일반적으로 서로 다른 그룹에 속한 서로 다른 부서가 프로젝트에서 공동 작업을해야 할 때입니다.
CentOS 운영 체제의 운영과 설계의 균형을 맞추기 위해 시스템 관리자의 역할이 시작됩니다.
사용자 관리를 논의 할 때 이해해야 할 세 가지 중요한 용어가 있습니다.
- Users
- Groups
- Permissions
이미 파일 및 폴더에 적용되는 심층 권한에 대해 논의했습니다. 이 장에서는 사용자와 그룹에 대해 설명하겠습니다.
CentOS 사용자
CentOS에는 두 가지 유형의 계정이 있습니다.
System accounts − 데몬 또는 기타 소프트웨어에 사용됩니다.
Interactive accounts − 일반적으로 시스템 리소스에 액세스하기 위해 사용자에게 할당됩니다.
두 사용자 유형의 주요 차이점은 다음과 같습니다.
System accounts데몬이 파일과 디렉토리에 액세스하는 데 사용됩니다. 일반적으로 쉘 또는 물리적 콘솔 로그인을 통한 대화식 로그인에서 허용되지 않습니다.
Interactive accounts 최종 사용자가 셸 또는 물리적 콘솔 로그인에서 컴퓨팅 리소스에 액세스하는 데 사용됩니다.
사용자에 대한 기본적인 이해를 바탕으로 이제 회계 부서에서 Bob Jones의 새 사용자를 생성 해 보겠습니다. 새 사용자가adduser 명령.
다음은 일부입니다 adduser 공통 스위치-
스위치 | 동작 |
---|---|
-씨 | 사용자 계정에 주석을 추가합니다. |
-미디엄 | 존재하지 않는 경우 기본 위치에 사용자 홈 디렉토리를 만듭니다. |
-지 | 사용자를 할당 할 기본 그룹 |
-엔 | 사용자에 대한 비공개 그룹 (일반적으로 사용자 이름이있는 그룹)을 생성하지 않습니다. |
-미디엄 | 홈 디렉토리를 생성하지 않습니다. |
-에스 | / bin / bash 이외의 기본 셸 |
-유 | UID를 지정합니다 (그렇지 않으면 시스템에서 지정됨). |
-지 | 사용자를 할당 할 추가 그룹 |
새 사용자를 만들 때 다음과 같이 -c, -m, -g, -n 스위치를 사용합니다.
[root@localhost Downloads]# useradd -c "Bob Jones Accounting Dept Manager"
-m -g accounting -n bjones
이제 새 사용자가 생성되었는지 살펴 보겠습니다.
[root@localhost Downloads]# id bjones
(bjones) gid = 1001(accounting) groups = 1001(accounting)
[root@localhost Downloads]# grep bjones /etc/passwd
bjones:x:1001:1001:Bob Jones Accounting Dept Manager:/home/bjones:/bin/bash
[root@localhost Downloads]#
이제 passwd 명령을 사용하여 새 계정을 활성화해야합니다.
[root@localhost Downloads]# passwd bjones
Changing password for user bjones.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
[root@localhost Downloads]#
사용자 계정이 활성화되지 않아 사용자가 시스템에 로그인 할 수 있습니다.
사용자 계정 비활성화
시스템에서 계정을 비활성화하는 방법에는 여러 가지가 있습니다. 이러한 범위는 / etc / passwd 파일을 직접 편집하는 것입니다. 또는 passwd 명령을-l스위치. 두 방법 모두 한 가지 큰 단점이 있습니다. 사용자가 ssh 액세스 권한을 갖고 있고 인증에 RSA 키를 사용하는 경우에도이 방법을 사용하여 로그인 할 수 있습니다.
이제 chage 명령을 사용하여 암호 만료 날짜를 이전 날짜로 변경해 보겠습니다 . 또한 계정에 계정을 비활성화 한 이유를 적어 두는 것이 좋습니다.
[root@localhost Downloads]# chage -E 2005-10-01 bjones
[root@localhost Downloads]# usermod -c "Disabled Account while Bob out of the country
for five months" bjones
[root@localhost Downloads]# grep bjones /etc/passwd
bjones:x:1001:1001:Disabled Account while Bob out of the country for four
months:/home/bjones:/bin/bash
[root@localhost Downloads]#
그룹 관리
Linux에서 그룹을 관리하면 관리자가 모든 그룹 구성원에 적용 할 수있는 권한 집합을 적용하는 컨테이너 내에서 사용자를 편리하게 결합 할 수 있습니다. 예를 들어 회계의 모든 사용자가 동일한 파일에 액세스해야 할 수 있습니다. 따라서 우리는 회계 그룹을 만들고 회계 사용자를 추가합니다.
대부분의 경우 특별한 권한이 필요한 모든 작업은 그룹에서 수행해야합니다. 이 방법은 일반적으로 한 명의 사용자에게 특수 권한을 적용하는 것보다 시간을 절약합니다. 예를 들어, Sally는 보고서를 담당하며 Sally 만보고를 위해 특정 파일에 액세스하면됩니다. 그러나 Sally가 어느 날 아파서 Bob이보고하면 어떻게됩니까? 아니면보고의 필요성이 증가합니까? 그룹이 만들어지면 관리자는 한 번만 수행하면됩니다. 사용자 추가는 변경 또는 확장 필요에 따라 적용됩니다.
다음은 그룹 관리에 사용되는 몇 가지 일반적인 명령입니다-
- chgrp
- groupadd
- groups
- usermod
chgrp − 파일 또는 디렉토리에 대한 그룹 소유권을 변경합니다.
회계 그룹의 사람들이 파일을 저장하고 파일을위한 디렉토리를 생성 할 수있는 디렉토리를 만들어 보겠습니다.
[root@localhost Downloads]# mkdir /home/accounting
[root@localhost Downloads]# ls -ld /home/accounting
drwxr-xr-x. 2 root root 6 Jan 13 10:18 /home/accounting
[root@localhost Downloads]#
다음으로 그룹 소유권 을 회계 그룹에 부여합니다.
[root@localhost Downloads]# chgrp -v accounting /home/accounting/
changed group of ‘/home/accounting/’ from root to accounting
[root@localhost Downloads]# ls -ld /home/accounting/
drwxr-xr-x. 2 root accounting 6 Jan 13 10:18 /home/accounting/
[root@localhost Downloads]#
이제 계정 그룹의 모든 사람 이 / home / accounting에 대한 읽기 및 실행 권한을 갖 습니다 . 쓰기 권한도 필요합니다.
[root@localhost Downloads]# chmod g+w /home/accounting/
[root@localhost Downloads]# ls -ld /home/accounting/
drwxrwxr-x. 2 root accounting 6 Jan 13 10:18 /home/accounting/
[root@localhost Downloads]#
이후 회계 그룹은 중요한 문서를 처리 할 수있다, 우리는 몇 가지 제한적인 권한을 적용 할 필요가 기타 또는 세계 .
[root@localhost Downloads]# chmod o-rx /home/accounting/
[root@localhost Downloads]# ls -ld /home/accounting/
drwxrwx---. 2 root accounting 6 Jan 13 10:18 /home/accounting/
[root@localhost Downloads]#
groupadd − 새 그룹을 만드는 데 사용됩니다.
스위치 | 동작 |
---|---|
-지 | 그룹의 GID를 지정합니다. |
-케이 | /etc/login.defs의 GID 사양을 재정의합니다. |
-영형 | 고유하지 않은 그룹 ID 허용을 무시할 수 있습니다. |
-피 | 사용자가 스스로 활성화 할 수있는 그룹 암호 |
비밀이라는 새 그룹을 만들어 보겠습니다. 그룹에 암호를 추가하여 사용자가 알려진 암호로 자신을 추가 할 수 있도록합니다.
[root@localhost]# groupadd secret
[root@localhost]# gpasswd secret
Changing the password for group secret
New Password:
Re-enter new password:
[root@localhost]# exit
exit
[centos@localhost ~]$ newgrp secret Password: [centos@localhost ~]$ groups
secret wheel rdc
[centos@localhost ~]$
실제로 그룹의 암호는 자주 사용되지 않습니다. 보조 그룹은 적절하며 다른 사용자간에 암호를 공유하는 것은 좋은 보안 관행이 아닙니다.
그만큼 groups명령은 사용자가 속한 그룹을 표시하는 데 사용됩니다. 현재 사용자를 변경 한 후이를 사용합니다.
usermod 계정 속성을 업데이트하는 데 사용됩니다.
다음은 일반적인 usermod 스위치입니다.
스위치 | 동작 |
---|---|
-ㅏ | -G 옵션을 사용하는 경우에만 추가하고 사용자를 보조 그룹에 추가합니다. |
-씨 | 댓글, 사용자 댓글 값 업데이트 |
-디 | 홈 디렉토리, 사용자의 홈 디렉토리 업데이트 |
-지 | 보조 사용자 그룹을 그룹화, 추가 또는 제거합니다. |
-지 | 그룹, 사용자의 기본 기본 그룹 |
[root@localhost]# groups centos
centos : accounting secret
[root@localhost]#
[root@localhost]# usermod -a -G wheel centos
[root@localhost]# groups centos
centos : accounting wheel secret
[root@localhost]#
CentOS 디스크 할당량은 둘 다 활성화 할 수 있습니다. 시스템 관리자에게 경고하고 디스크 용량이 초과되기 전에 사용자에 대한 추가 디스크 스토리지 액세스를 거부합니다. 디스크가 꽉 차면 디스크에있는 항목에 따라 전체 시스템이 복구 될 때까지 갑자기 정지 될 수 있습니다.
CentOS Linux에서 할당량 관리를 활성화하는 것은 기본적으로 4 단계 프로세스입니다.
Step 1 − / etc / fstab에서 그룹 및 사용자에 대한 할당량 관리를 활성화합니다.
Step 2 − 파일 시스템을 다시 마운트합니다.
Step 3 − Quota 데이터베이스를 생성하고 디스크 사용량 테이블을 생성합니다.
Step 4 − 할당량 정책을 할당합니다.
/ etc / fstab에서 할당량 관리 활성화
먼저 / etc / fstab 파일을 백업하려고합니다.
[root@centosLocal centos]# cp -r /etc/fstab ./
이제 현재 작업 디렉토리에 알려진 작업 / etc / fstab 의 복사본이 있습니다.
#
# /etc/fstab
# Created by anaconda on Sat Dec 17 02:44:51 2016
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/cl-root / xfs defaults 0 0
UUID = 4b9a40bc-9480-4 /boot xfs defaults 0 0
/dev/mapper/cl-home /home xfs defaults,usrquota,grpquota 0 0
/dev/mapper/cl-swap swap swap defaults 0 0
볼륨 또는 레이블에 대한 / etc / fstab 의 옵션 섹션 에서 사용자 및 그룹에 할당량이 적용될 위치를 다음과 같이 변경했습니다 .
- usrquota
- grpquota
보시다시피, 우리는 xfs파일 시스템. xfs를 사용할 때 추가 수동 단계가 필요합니다./home/와 같은 디스크에 있습니다. 추가 조사에 따르면 커널 수준 마운트 옵션 인 noquota에 /가 설정되어 있습니다. 커널 부팅 옵션을 다시 구성해야합니다.
root@localhost rdc]# mount | grep ' / '
/dev/mapper/cl-root on / type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
[root@localhost rdc]#
XFS 파일 시스템에 대한 커널 부트 옵션 재구성
이 단계는 두 가지 조건에서만 필요합니다.
- 디스크 / 파티션에서 할당량을 활성화 할 때 xfs 파일 시스템을 사용합니다.
- 커널이 부팅시 noquota 매개 변수를 / etc / fstab에 전달하는 경우
Step 1 − / etc / default / grub을 백업합니다.
cp /etc/default/grub ~/
Step 2− / etc / default / grub 수정 .
다음은 기본 파일입니다.
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=cl/root rd.lvm.lv=cl/swap rhgb quiet"
GRUB_DISABLE_RECOVERY="true"
우리는 다음 줄을 수정하고 싶습니다-
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=cl/root rd.lvm.lv=cl/swap rhgb quiet"
...에
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=cl/root rd.lvm.lv
=cl/swap rhgb quiet rootflags=usrquota,grpquota"
Note− 이러한 변경 사항을 그대로 복사하는 것이 중요합니다. grub.cfg를 재구성 한 후 구성에 오류가 발생하면 시스템이 부팅되지 않습니다. 비 프로덕션 시스템에서 튜토리얼의이 부분을 시도하십시오.
Step 3 − 작업중인 grub.cfg 백업
cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg.bak
새 grub.cfg 만들기
[root@localhost rdc]# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.10.0-514.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-514.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-dbba7fa47f73457b96628ba8f3959bfd
Found initrd image: /boot/initramfs-0-rescuedbba7fa47f73457b96628ba8f3959bfd.img
done
[root@localhost rdc]#
재부팅
[root@localhost rdc]#reboot
모든 수정이 정확하다면 xfs 파일 시스템에 할당량을 추가 할 수있는 가용성이 없어야 합니다.
[rdc@localhost ~]$ mount | grep ' / '
/dev/mapper/cl-root on / type xfs (rw,relatime,seclabel,attr2,inode64,usrquota,grpquota)
[rdc@localhost ~]$
grub을 통해 usrquota 및 grpquota 매개 변수를 전달했습니다 .
이제 다시 / etc / fstab 을 편집 하여 동일한 물리 디스크에 / home 을 포함 시키 십시오.
/dev/mapper/cl-root/xfs
defaults,usrquota,grpquota 0 0
이제 할당량 데이터베이스를 활성화 해 보겠습니다.
[root@localhost rdc]# quotacheck -acfvugM
할당량이 활성화되어 있는지 확인하십시오.
[root@localhost rdc]# quotaon -ap
group quota on / (/dev/mapper/cl-root) is on
user quota on / (/dev/mapper/cl-root) is on
group quota on /home (/dev/mapper/cl-home) is on
user quota on /home (/dev/mapper/cl-home) is on
[root@localhost rdc]#
파일 시스템 다시 마운트
파티션 또는 디스크가 활성 부팅 된 파티션과 분리 된 경우 재부팅하지 않고 다시 마운트 할 수 있습니다. 루트 디렉토리 /에서 부팅 된 디스크 / 파티션에 할당량이 구성된 경우 운영 체제를 재부팅해야 할 수 있습니다. 강제로 다시 마운트하고 변경 사항을 적용하면 파일 시스템을 다시 마운트해야하는 필요성이 다를 수 있습니다.
[rdc@localhost ~]$ df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/cl-root 22447404 4081860 18365544 19% /
devtmpfs 903448 0 903448 0% /dev
tmpfs 919308 100 919208 1% /dev/shm
tmpfs 919308 9180 910128 1% /run
tmpfs 919308 0 919308 0% /sys/fs/cgroup
/dev/sda2 1268736 176612 1092124 14% /boot
/dev/mapper/cl-var 4872192 158024 4714168 4% /var
/dev/mapper/cl-home 18475008 37284 18437724 1% /home
tmpfs 183864 8 183856 1% /run/user/1000
[rdc@localhost ~]$
보시다시피 LVM 볼륨이 사용 중입니다. 따라서 재부팅하는 것은 간단합니다. 그러면 / home 을 다시 마운트 하고 / etc / fstab 구성 변경 사항을 활성 구성으로 로드합니다 .
할당량 데이터베이스 파일 생성
CentOS는 이제 / home에서 디스크 할당량으로 작업 할 수 있습니다. 전체 할당량 지원을 활성화하려면 다음을 실행해야합니다.quotacheck 명령.
quotacheck는 두 개의 파일을 생성합니다-
- aquota.user
- aquota.group
할당량이 활성화 된 디스크 / 파티션에 대한 할당량 정보를 저장하는 데 사용됩니다.
다음은 일반적인 할당량 검사 스위치입니다.
스위치 | 동작 |
---|---|
-유 | 사용자 할당량 확인 |
-지 | 그룹 할당량 확인 |
-씨 | enable 할당량을 사용하여 각 파일 시스템에 할당량을 활성화해야합니다. |
-V | 자세한 출력을 표시합니다. |
사용자 당 할당량 제한 추가
이를 위해 edquota 명령과 사용자 이름을 사용합니다.
[root@localhost rdc]# edquota centos
Disk quotas for user centos (uid 1000):
Filesystem blocks soft hard inodes soft hard
/dev/mapper/cl-root 12 0 0 13 0 0
/dev/mapper/cl-home 4084 0 0 140 0 0
각 열을 살펴 보겠습니다.
Filesystem − 적용되는 사용자의 파일 시스템 할당량입니다.
blocks − 사용자가 현재 각 파일 시스템에서 사용중인 블록 수
soft− 소프트 제한에 대한 블록을 설정합니다. 소프트 제한을 통해 사용자는 주어진 기간 동안 할당량을 수행 할 수 있습니다.
hard− 하드 제한에 대한 블록을 설정합니다. 하드 한도는 총 허용 할당량입니다.
inodes − 사용자가 현재 사용중인 inode 수
soft − 소프트 inode 제한
hard − 하드 inode 제한
사용자로서 현재 할당량을 확인하려면-
[centos@localhost ~]$ quota
Disk quotas for user centos (uid 1000):
Filesystem blocks quota limit grace files quota limit grace
/dev/mapper/cl-home 6052604 56123456 61234568 475 0 0 [centos@localhost ~]$
다음은 하드 할당량 제한을 초과했을 때 사용자에게 제공되는 오류입니다.
[centos@localhost Downloads]$ cp CentOS-7-x86_64-LiveKDE-1611.iso.part ../Desktop/
cp: cannot create regular file ‘../Desktop/CentOS-7-x86_64-LiveKDE-
1611.iso.part’: Disk quota exceeded
[centos@localhost Downloads]$
보시다시피이 사용자의 디스크 할당량 내에 가깝습니다. 소프트 제한 경고를 설정해 보겠습니다. 이렇게하면 할당량 제한이 만료되기 전에 사용자에게 사전 알림이 제공됩니다. 경험을 통해 최종 사용자가 업무에 들어 오면 불만을 받게되며 실제로 업무를 시작하려면 45 분 동안 파일을 정리해야합니다.
관리자는 다음을 통해 할당량 사용량을 확인할 수 있습니다. repquota 명령.
[root@localhost Downloads]# repquota /home
Block limits File limits
User used soft hard grace used soft hard grace
----------------------------------------------------------------------------------------
root -- 0 0 0 3 0 0
centos -+ 6189824 56123456 61234568 541 520 540 6days
[root@localhost Downloads]#
보시다시피 사용자 centos는 하드 블록 할당량을 초과했으며 더 이상 / home의 디스크 공간을 사용할 수 없습니다 .
-+ 파일 시스템에서 하드 할당량이 초과되었음을 나타냅니다.
할당량을 계획 할 때 약간의 계산이 필요합니다. 관리자가 알아야 할 사항은 시스템에 몇 명의 사용자가 있습니까? 사용자 / 그룹 사이에 할당 할 여유 공간은 얼마나됩니까? 파일 시스템에서 블록을 구성하는 바이트는 몇 개입니까?
여유 디스크 공간과 관련된 블록의 관점에서 할당량을 정의합니다. 최악의 시나리오에서 남아있는 여유 공간의 "안전한"버퍼를 파일 시스템에 남겨 두는 것이 좋습니다. 모든 할당량이 동시에 초과됩니다. 특히 시스템에서 로그를 작성하는 데 사용하는 파티션에 있습니다.
systemdLinux에서 서비스를 실행하는 새로운 방법입니다. systemd 에는 대체 된 sysvinit이 있습니다. systemd 는 Linux에 더 빠른 부팅 시간을 제공하며 이제는 Linux 서비스를 관리하는 표준 방법입니다. 안정적이지만 systemd 는 여전히 진화하고 있습니다.
init 시스템으로 systemd 는 Linux 커널이 부팅 된 후 상태 변경이 필요한 서비스와 데몬을 모두 관리하는 데 사용됩니다. 상태 변경에 따라 시작, 중지, 다시로드 및 조정 서비스 상태가 적용됩니다.
먼저 서버에서 현재 실행중인 systemd의 버전을 확인하겠습니다.
[centos@localhost ~]$ systemctl --version
systemd 219
+PAM +AUDIT +SELINUX +IMA -APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP
+GCRYPT +GNUTLS +ACL +XZ -LZ4 -SECCOMP +BLKID +ELFUTILS +KMOD +IDN
[centos@localhost ~]$
CentOS 버전 7부터는이 작성 시점에 완전히 업데이트 된 systemd 버전 219가 현재 안정 버전입니다.
systemd-analyze를 사용하여 마지막 서버 부팅 시간을 분석 할 수도 있습니다.
[centos@localhost ~]$ systemd-analyze
Startup finished in 1.580s (kernel) + 908ms (initrd) + 53.225s (userspace) = 55.713s
[centos@localhost ~]$
시스템 부팅 시간이 더 느리면 systemd-analyze blame 명령을 사용할 수 있습니다 .
[centos@localhost ~]$ systemd-analyze blame
40.882s kdump.service
5.775s NetworkManager-wait-online.service
4.701s plymouth-quit-wait.service
3.586s postfix.service
3.121s systemd-udev-settle.service
2.649s tuned.service
1.848s libvirtd.service
1.437s network.service
875ms packagekit.service
855ms gdm.service
514ms firewalld.service
438ms rsyslog.service
436ms udisks2.service
398ms sshd.service
360ms boot.mount
336ms polkit.service
321ms accounts-daemon.service
systemd로 작업 할 때 단위 의 개념을 이해하는 것이 중요합니다 .Unitssystemd 가 해석하는 방법을 알고 있는 자원 입니다. 단위는 다음과 같이 12 가지 유형으로 분류됩니다.
- .service
- .socket
- .device
- .mount
- .automount
- .swap
- .target
- .path
- .timer
- .snapshot
- .slice
- .scope
대부분의 경우 .service를 단위 대상으로 사용합니다. 다른 유형에 대한 추가 연구를 수행하는 것이 좋습니다. .service 단위 만 systemd 서비스 시작 및 중지에 적용되므로
각 단위 는 다음 위치에있는 파일에 정의되어 있습니다.
/lib/systemd/system − 기본 유닛 파일
/etc/systemd/system − 런타임에 시작된 수정 된 단위 파일
systemctl로 서비스 관리
systemd로 작업하려면 systemctl 명령에 매우 익숙해 져야합니다 . 다음은 systemctl 의 가장 일반적인 명령 줄 스위치입니다 .
스위치 | 동작 |
---|---|
-티 | 서비스 또는 소켓과 같은 단위 유형의 쉼표로 구분 된 값 |
-ㅏ | 로드 된 모든 장치를 표시합니다. |
--상태 | 정의 된 상태 (부하, 하위, 활성, 비활성 등)의 모든 장치를 표시합니다. |
-H | 원격으로 작업을 실행합니다. 호스트 이름 또는 호스트 및 사용자를 @로 구분하여 지정하십시오. |
기본 systemctl 사용법
systemctl [operation]
example: systemctl --state [servicename.service]
박스에서 실행되는 모든 서비스를 간략히 살펴보십시오.
[root@localhost rdc]# systemctl -t service
UNIT LOAD ACTIVE SUB DESCRIPTION
abrt-ccpp.service loaded active exited Install ABRT coredump hook
abrt-oops.service loaded active running ABRT kernel log watcher
abrt-xorg.service loaded active running ABRT Xorg log watcher
abrtd.service loaded active running ABRT Automated Bug Reporting Tool
accounts-daemon.service loaded active running Accounts Service
alsa-state.service loaded active running Manage Sound Card State (restore and store)
atd.service loaded active running Job spooling tools
auditd.service loaded active running Security Auditing Service
avahi-daemon.service loaded active running Avahi mDNS/DNS-SD Stack
blk-availability.service loaded active exited Availability of block devices
bluetooth.service loaded active running Bluetooth service
chronyd.service loaded active running NTP client/server
서비스 중지
먼저 블루투스 서비스를 중지하겠습니다.
[root@localhost]# systemctl stop bluetooth
[root@localhost]# systemctl --all -t service | grep bluetooth
bluetooth.service loaded inactive dead Bluetooth service
[root@localhost]#
보시다시피 블루투스 서비스가 비활성화되었습니다.
블루투스 서비스를 다시 시작하려면.
[root@localhost]# systemctl start bluetooth
[root@localhost]# systemctl --all -t service | grep bluetooth
bluetooth.service loaded active running Bluetooth service
[root@localhost]#
Note− .service 가 내포되어 있으므로 bluetooth.service를 지정하지 않았습니다 . 우리가 다루는 서비스를 추가하는 단위 유형 을 생각하는 것이 좋습니다 . 따라서 여기서부터는 .service 확장을 사용하여 서비스 단위 작업에 대한 작업을 명확히 할 것입니다.
서비스에서 수행 할 수있는 주요 작업은 다음과 같습니다.
스타트 | 서비스 시작 |
중지 | 서비스를 중지합니다. |
새로 고침 | 중지하지 않고 서비스의 활성 구성을 다시로드합니다 (예 : system v init의 kill -HUP). |
재시작 | 서비스를 시작한 다음 중지합니다. |
활성화 | 부팅시 서비스 시작 |
비활성화 | 런타임에 서비스가 자동으로 시작되지 않도록 중지합니다. |
위의 작업은 주로 다음 시나리오에서 사용됩니다.
스타트 | 중지 상태에있는 서비스를 시작합니다. |
중지 | 서비스를 일시적으로 종료하려면 (예 : 서비스를 업그레이드 할 때와 같이 서비스에 의해 잠긴 파일에 액세스하기 위해 서비스를 중지해야하는 경우) |
새로 고침 | 구성 파일이 편집되고 서비스를 중지하지 않고 새 변경 사항을 적용하려는 경우. |
재시작 | reload와 동일한 시나리오에서 서비스가 reload를 지원하지 않습니다 . |
활성화 | 비활성화 된 서비스가 부팅시 실행되기를 원할 때. |
비활성화 | 주로 서비스를 중지해야하지만 부팅시 시작될 때 사용됩니다. |
서비스 상태를 확인하려면-
[root@localhost]# systemctl status network.service
network.service - LSB: Bring up/down networking
Loaded: loaded (/etc/rc.d/init.d/network; bad; vendor preset: disabled)
Active: active (exited) since Sat 2017-01-14 04:43:48 EST; 1min 31s ago
Docs: man:systemd-sysv-generator(8)
Process: 923 ExecStart = /etc/rc.d/init.d/network start (code=exited, status = 0/SUCCESS)
localhost.localdomain systemd[1]: Starting LSB: Bring up/down networking...
localhost.localdomain network[923]: Bringing up loopback interface: [ OK ]
localhost.localdomain systemd[1]: Started LSB: Bring up/down networking.
[root@localhost]#
네트워킹 서비스 의 현재 상태를 보여주십시오 . 네트워킹과 관련된 모든 서비스를보고 싶다면 다음을 사용할 수 있습니다.
[root@localhost]# systemctl --all -t service | grep -i network
network.service loaded active exited LSB: Bring up/
NetworkManager-wait-online.service loaded active exited Network Manager
NetworkManager.service loaded active running Network Manager
ntpd.service loaded inactive dead Network Time
rhel-import-state.service loaded active exited Import network
[root@localhost]#
익숙한 사람들을 위해 sysinit서비스를 관리하는 방법은 systemd로 전환하는 것이 중요합니다 . systemd 는 Linux에서 데몬 서비스를 시작하고 중지하는 새로운 방법입니다.
systemctlsystemd를 제어하는 데 사용되는 유틸리티입니다. systemctl은 CentOS 관리자에게 다음을 포함하여 systemd에서 다양한 작업을 수행 할 수있는 기능을 제공합니다.
- 시스템 단위 구성
- systemd untis 상태 가져 오기
- 서비스 시작 및 중지
- 런타임 등을위한 systemd 서비스 활성화 / 비활성화
systemctl 의 명령 구문 은 매우 기본적이지만 스위치 및 옵션과 얽힐 수 있습니다. CentOS Linux 관리에 필요한 systemctl 의 가장 필수적인 기능을 소개 합니다.
Basic systemctl syntax:
systemctl [OPTIONS] COMMAND [NAME]
다음은 systemctl 과 함께 사용되는 일반적인 명령입니다 -
- start
- stop
- restart
- reload
- status
- is-active
- list-units
- enable
- disable
- cat
- show
우리는 이미 systemctl을 사용 하여 start , stop , reload , restart , 활성화 및 비활성화 에 대해 논의했습니다. 이제 나머지 일반적으로 사용되는 명령을 살펴 보겠습니다.
상태
가장 간단한 형태로 상태 명령을 사용하여 시스템 상태를 전체적으로 볼 수 있습니다.
[root@localhost rdc]# systemctl status
● localhost.localdomain
State: running
Jobs: 0 queued
Failed: 0 units
Since: Thu 2017-01-19 19:14:37 EST; 4h 5min ago
CGroup: /
├─1 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
├─user.slice
│ └─user-1002.slice
│ └─session-1.scope
│ ├─2869 gdm-session-worker [pam/gdm-password]
│ ├─2881 /usr/bin/gnome-keyring-daemon --daemonize --login
│ ├─2888 gnome-session --session gnome-classic
│ ├─2895 dbus-launch --sh-syntax --exit-with-session
위의 출력이 응축되었습니다. 실제 systemctl 상태에서 약 100 줄의 트리 프로세스 상태를 출력합니다.
방화벽 서비스의 상태를 확인하고 싶다고 가정 해 보겠습니다.
[root@localhost rdc]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2017-01-19 19:14:55 EST; 4h 12min ago
Docs: man:firewalld(1)
Main PID: 825 (firewalld)
CGroup: /system.slice/firewalld.service
└─825 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid
보시다시피 방화벽 서비스는 현재 활성화되어 있으며 4 시간 이상 지속되었습니다.
목록 단위
list-units 명령을 사용하면 특정 유형의 모든 단위를 나열 할 수 있습니다. 소켓에 대한하자 검사에 의해 관리 systemd -
[root@localhost]# systemctl list-units --type=socket
UNIT LOAD ACTIVE SUB DESCRIPTION
avahi-daemon.socket loaded active running Avahi mDNS/DNS-SD Stack Activation Socket
cups.socket loaded active running CUPS Printing Service Sockets
dbus.socket loaded active running D-Bus System Message Bus Socket
dm-event.socket loaded active listening Device-mapper event daemon FIFOs
iscsid.socket loaded active listening Open-iSCSI iscsid Socket
iscsiuio.socket loaded active listening Open-iSCSI iscsiuio Socket
lvm2-lvmetad.socket loaded active running LVM2 metadata daemon socket
lvm2-lvmpolld.socket loaded active listening LVM2 poll daemon socket
rpcbind.socket loaded active listening RPCbind Server Activation Socket
systemd-initctl.socket loaded active listening /dev/initctl Compatibility Named Pipe
systemd-journald.socket loaded active running Journal Socket
systemd-shutdownd.socket loaded active listening Delayed Shutdown Socket
systemd-udevd-control.socket loaded active running udev Control Socket
systemd-udevd-kernel.socket loaded active running udev Kernel Socket
virtlockd.socket loaded active listening Virtual machine lock manager socket
virtlogd.socket loaded active listening Virtual machine log manager socket
이제 현재 실행중인 서비스를 확인해 보겠습니다.
[root@localhost rdc]# systemctl list-units --type=service
UNIT LOAD ACTIVE SUB DESCRIPTION
abrt-ccpp.service loaded active exited Install ABRT coredump hook
abrt-oops.service loaded active running ABRT kernel log watcher
abrt-xorg.service loaded active running ABRT Xorg log watcher
abrtd.service loaded active running ABRT Automated Bug Reporting Tool
accounts-daemon.service loaded active running Accounts Service
alsa-state.service loaded active running Manage Sound Card State (restore and store)
atd.service loaded active running Job spooling tools
auditd.service loaded active running Security Auditing Service
활성
는 인 액티브 명령은 장치의 상태 정보를 반환하도록 설계 systemctl 명령의 일례이다.
[root@localhost rdc]# systemctl is-active ksm.service
active
고양이
cat 은 거의 사용되지 않는 명령 중 하나입니다. 셸에서 cat을 사용하고 단위 파일의 경로를 입력하는 대신 systemctl cat을 사용 하면 됩니다.
[root@localhost]# systemctl cat firewalld
# /usr/lib/systemd/system/firewalld.service
[Unit]
Description=firewalld - dynamic firewall daemon
Before=network.target
Before=libvirtd.service
Before = NetworkManager.service
After=dbus.service
After=polkit.service
Conflicts=iptables.service ip6tables.service ebtables.service ipset.service
Documentation=man:firewalld(1)
[Service]
EnvironmentFile = -/etc/sysconfig/firewalld
ExecStart = /usr/sbin/firewalld --nofork --nopid $FIREWALLD_ARGS ExecReload = /bin/kill -HUP $MAINPID
# supress to log debug and error output also to /var/log/messages
StandardOutput = null
StandardError = null
Type = dbus
BusName = org.fedoraproject.FirewallD1
[Install]
WantedBy = basic.target
Alias = dbus-org.fedoraproject.FirewallD1.service
[root@localhost]#
systemd 와 systemctl 을 더 자세히 살펴 보았 으므로 이제이를 사용하여 cgroup 또는 control groups 의 리소스를 관리해 보겠습니다 .
cgroups 또는 Control Groups는 관리자가 서비스 및 그룹에 대한 시스템 리소스를 할당하거나 제한 할 수있는 Linux 커널의 기능입니다.
실행중인 활성 제어 그룹 을 나열하려면 다음 ps 명령을 사용할 수 있습니다.
[root@localhost]# ps xawf -eo pid,user,cgroup,args
8362 root - \_ [kworker/1:2]
1 root - /usr/lib/systemd/systemd --switched-
root --system -- deserialize 21
507 root 7:cpuacct,cpu:/system.slice /usr/lib/systemd/systemd-journald
527 root 7:cpuacct,cpu:/system.slice /usr/sbin/lvmetad -f
540 root 7:cpuacct,cpu:/system.slice /usr/lib/systemd/systemd-udevd
715 root 7:cpuacct,cpu:/system.slice /sbin/auditd -n
731 root 7:cpuacct,cpu:/system.slice \_ /sbin/audispd
734 root 7:cpuacct,cpu:/system.slice \_ /usr/sbin/sedispatch
737 polkitd 7:cpuacct,cpu:/system.slice /usr/lib/polkit-1/polkitd --no-debug
738 rtkit 6:memory:/system.slice/rtki /usr/libexec/rtkit-daemon
740 dbus 7:cpuacct,cpu:/system.slice /bin/dbus-daemon --system --
address=systemd: --nofork --nopidfile --systemd-activation
CentOS 6.X부터 리소스 관리는 systemd init 구현 으로 재정의되었습니다 . 서비스에 대한 리소스 관리를 생각할 때 중점을 두어야 할 주요 사항은 cgroup 입니다.cgroups기능성과 단순성 모두에서 체계적 으로 발전했습니다 .
리소스 관리에서 cgroup의 목표는-어떤 서비스도 시스템 전체를 다운시킬 수 없습니다. 또는 단일 서비스 프로세스 (아마도 잘못 작성된 PHP 스크립트)가 너무 많은 리소스를 소비하여 서버 기능을 손상시키지 않습니다.
cgroups 는 다음 자원에 대한 단위의 자원 제어를 허용합니다-
CPU − 다른 덜 집약적 인 작업만큼 중요하지 않은 CPU 집약적 인 작업 제한
Memory − 서비스가 사용할 수있는 메모리 양 제한
Disks − 디스크 I / O 제한
** CPU 시간 : **
CPU 우선 순위가 더 낮은 작업에는 사용자 지정 구성 CPU 슬라이스가있을 수 있습니다.
예를 들어 다음 두 서비스를 살펴 보겠습니다.
폴 라이트 CPU 서비스 1
[root@localhost]# systemctl cat polite.service
# /etc/systemd/system/polite.service
[Unit]
Description = Polite service limits CPU Slice and Memory
After=remote-fs.target nss-lookup.target
[Service]
MemoryLimit = 1M
ExecStart = /usr/bin/sha1sum /dev/zero
ExecStop = /bin/kill -WINCH ${MAINPID}
WantedBy=multi-user.target
# /etc/systemd/system/polite.service.d/50-CPUShares.conf
[Service]
CPUShares = 1024
[root@localhost]#
이블 CPU 서비스 2
[root@localhost]# systemctl cat evil.service
# /etc/systemd/system/evil.service
[Unit]
Description = I Eat You CPU
After=remote-fs.target nss-lookup.target
[Service]
ExecStart = /usr/bin/md5sum /dev/zero
ExecStop = /bin/kill -WINCH ${MAINPID}
WantedBy=multi-user.target
# /etc/systemd/system/evil.service.d/50-CPUShares.conf
[Service]
CPUShares = 1024
[root@localhost]#
더 낮은 CPU 우선 순위를 사용하여 Polite Service를 설정해 보겠습니다.
systemctl set-property polite.service CPUShares = 20
/system.slice/polite.service
1 70.5 124.0K - -
/system.slice/evil.service
1 99.5 304.0K - -
보시다시피 정상적인 시스템 유휴 시간 동안 두 불량 프로세스 모두 여전히 CPU주기를 사용하고 있습니다. 그러나 더 적은 시간 조각을 가진 세트는 더 적은 CPU 시간을 사용합니다. 이를 염두에두고 더 적은 시간 조각을 사용하면 필수 작업이 시스템 리소스에 더 잘 액세스 할 수있는 방법을 알 수 있습니다.
각 리소스에 대한 서비스를 설정하기 위해 set-property 메소드는 다음 매개 변수를 정의합니다.
systemctl set-property name parameter=value
CPU 슬라이스 | CPUShares |
메모리 제한 | MemoryLimit |
소프트 메모리 제한 | MemorySoftLimit |
블록 IO 가중치 | BlockIOWeight |
블록 장치 제한 (/ volume / path에 지정됨) | BlockIODeviceWeight |
IO 읽기 | BlockIOReadBandwidth |
디스크 쓰기 IO | BlockIOReadBandwidth |
대부분의 경우 서비스는 CPU 사용 , 메모리 제한 및 읽기 / 쓰기 IO에 의해 제한됩니다 .
각각을 변경 한 후 systemd를 다시로드하고 서비스를 다시 시작해야합니다.
systemctl set-property foo.service CPUShares = 250
systemctl daemon-reload
systemctl restart foo.service
CentOS Linux에서 CGroup 구성
CentOS Linux에서 사용자 지정 cgroup을 만들려면 먼저 서비스를 설치하고 구성해야합니다.
Step 1 − libcgroup을 설치합니다 (아직 설치되지 않은 경우).
[root@localhost]# yum install libcgroup
Package libcgroup-0.41-11.el7.x86_64 already installed and latest version
Nothing to do
[root@localhost]#
보시다시피 기본적으로 CentOS 7에는 everything 설치 프로그램과 함께 libcgroup이 설치 되어 있습니다. 최소 설치 프로그램을 사용하려면 종속성과 함께 libcgroup 유틸리티 를 설치해야합니다 .
Step 2 − cgconfig 서비스를 시작하고 활성화합니다.
[root@localhost]# systemctl enable cgconfig
Created symlink from /etc/systemd/system/sysinit.target.wants/cgconfig.service to /usr/lib/systemd/system/cgconfig.service.
[root@localhost]# systemctl start cgconfig
[root@localhost]# systemctl status cgconfig
● cgconfig.service - Control Group configuration service
Loaded: loaded (/usr/lib/systemd/system/cgconfig.service; enabled; vendor preset: disabled)
Active: active (exited) since Mon 2017-01-23 02:51:42 EST; 1min 21s ago
Main PID: 4692 (code=exited, status = 0/SUCCESS)
Memory: 0B
CGroup: /system.slice/cgconfig.service
Jan 23 02:51:42 localhost.localdomain systemd[1]: Starting Control Group configuration service...
Jan 23 02:51:42 localhost.localdomain systemd[1]: Started Control Group configuration service.
[root@localhost]#
다음은 프로세스 관리 (bg, fg, nohup, ps, pstree, top, kill, killall, free, uptime, nice)와 함께 사용되는 공통 명령입니다.
프로세스 작업
Quick Note: Process PID in Linux
Linux에서 실행중인 모든 프로세스에는 PID 또는 프로세스 ID 번호가 부여됩니다. 이 PID 는 CentOS가 특정 프로세스를 식별하는 방법입니다. 앞서 논의했듯이 systemd 는 CentOS에서 PID가 1 인 첫 번째 프로세스입니다.
Pgrep 주어진 프로세스 이름에 대한 Linux PID를 가져 오는 데 사용됩니다.
[root@CentOS]# pgrep systemd
1
[root@CentOS]#
보시다시피 pgrep 명령은 systemd의 현재 PID를 반환합니다.
CentOS의 기본 CentOS 프로세스 및 작업 관리
Linux에서 프로세스로 작업 할 때 명령 줄에서 기본 포 그라운드 및 백그라운드 프로세스가 수행되는 방법을 아는 것이 중요합니다.
fg − 프로세스를 전면으로 가져옴
bg − 프로세스를 백그라운드로 이동
jobs − 셸에 연결된 현재 프로세스 목록
ctrl+z − 현재 프로세스를 잠자기위한 Ctrl + z 키 조합
& − 백그라운드에서 프로세스 시작
쉘 명령 sleep 사용을 시작하겠습니다 .sleep이름대로 정의 된 시간 동안 sleep : sleep .
[root@CentOS ~]$ jobs [root@CentOS ~]$ sleep 10 &
[1] 12454
[root@CentOS ~]$ sleep 20 & [2] 12479 [root@CentOS ~]$ jobs
[1]- Running sleep 10 &
[2]+ Running sleep 20 &
[cnetos@CentOS ~]$
이제 첫 번째 작업을 전면으로 가져 오겠습니다.
[root@CentOS ~]$ fg 1
sleep 10
따라 가면 포 그라운드 작업이 셸에서 멈춘 것을 알 수 있습니다. 이제 프로세스를 절전 모드로 전환 한 다음 백그라운드에서 다시 활성화하겠습니다.
- Ctrl + z 누르기
- 입력 : bg 1, 첫 번째 작업을 백그라운드로 보내고 시작합니다.
[root@CentOS ~]$ fg 1 sleep 20 ^Z [1]+ Stopped sleep 20 [root@CentOS ~]$ bg 1
[1]+ sleep 20 &
[root@CentOS ~]$
안돼
셸 또는 터미널에서 작업 할 때 기본적으로 셸이 닫히거나 사용자가 로그 아웃하면 셸에 연결된 모든 프로세스와 작업이 종료된다는 점에 유의할 필요가 있습니다. nohup을 사용할 때 사용자가 로그 아웃하거나 프로세스가 연결된 셸을 닫으면 프로세스가 계속 실행됩니다.
[root@CentOS]# nohup ping www.google.com &
[1] 27299
nohup: ignoring input and appending output to ‘nohup.out’
[root@CentOS]# pgrep ping
27299
[root@CentOS]# kill -KILL `pgrep ping`
[1]+ Killed nohup ping www.google.com
[root@CentOS rdc]# cat nohup.out
PING www.google.com (216.58.193.68) 56(84) bytes of data.
64 bytes from sea15s07-in-f4.1e100.net (216.58.193.68): icmp_seq = 1 ttl = 128
time = 51.6 ms
64 bytes from sea15s07-in-f4.1e100.net (216.58.193.68): icmp_seq = 2 ttl = 128
time = 54.2 ms
64 bytes from sea15s07-in-f4.1e100.net (216.58.193.68): icmp_seq = 3 ttl = 128
time = 52.7 ms
ps 명령
그만큼 ps명령은 일반적으로 관리자가 특정 프로세스의 스냅 샷을 조사하는 데 사용됩니다. ps 는 일반적으로 분석 할 특정 프로세스를 필터링하기 위해 grep 과 함께 사용됩니다 .
[root@CentOS ~]$ ps axw | grep python
762 ? Ssl 0:01 /usr/bin/python -Es /usr/sbin/firewalld --nofork -nopid
1296 ? Ssl 0:00 /usr/bin/python -Es /usr/sbin/tuned -l -P
15550 pts/0 S+ 0:00 grep --color=auto python
위의 명령에서 파이썬 인터프리터를 사용하는 모든 프로세스를 볼 수 있습니다. 결과에는 python 문자열을 찾는 grep 명령도 포함되었습니다 .
다음은 ps 와 함께 사용되는 가장 일반적인 명령 줄 스위치 입니다.
스위치 | 동작 |
---|---|
ㅏ | 현재 사용자에 대한보고 프로세스의 제약 조건 만 제외합니다. |
엑스 | tty 또는 셸에 연결되지 않은 프로세스를 표시합니다. |
w | 출력의 넓은 출력 표시 형식 |
이자형 | 명령 후 환경을 표시합니다. |
-이자형 | 모든 프로세스를 선택합니다. |
-영형 | 사용자 정의 형식 출력 |
-유 | 특정 사용자의 모든 프로세스를 표시합니다. |
-씨 | 이름 또는 프로세스 ID로 모든 프로세스를 표시합니다. |
--종류 | 정의에 따라 프로세스를 정렬합니다. |
nobody 사용자 가 사용중인 모든 프로세스를 보려면 -
[root@CentOS ~]$ ps -u nobody PID TTY TIME CMD 1853 ? 00:00:00 dnsmasq [root@CentOS ~]$
firewalld 프로세스 에 대한 모든 정보를 보려면 -
[root@CentOS ~]$ ps -wl -C firewalld F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 0 S 0 762 1 0 80 0 - 81786 poll_s ? 00:00:01 firewalld [root@CentOS ~]$
어떤 프로세스가 가장 많은 메모리를 소비하는지 봅시다.
[root@CentOS ~]$ ps aux --sort=-pmem | head -10 USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND cnetos 6130 0.7 5.7 1344512 108364 ? Sl 02:16 0:29 /usr/bin/gnome-shell cnetos 6449 0.0 3.4 1375872 64440 ? Sl 02:16 0:00 /usr/libexec/evolution-calendar-factory root 5404 0.6 2.1 190256 39920 tty1 Ssl+ 02:15 0:27 /usr/bin/Xorg :0 -background none -noreset -audit 4 -verbose -auth /run/gdm/auth-for-gdm-iDefCt/database -seat seat0 -nolisten tcp vt1 cnetos 6296 0.0 1.7 1081944 32136 ? Sl 02:16 0:00 /usr/libexec/evolution/3.12/evolution-alarm-notify cnetos 6350 0.0 1.5 560728 29844 ? Sl 02:16 0:01 /usr/bin/prlsga cnetos 6158 0.0 1.4 1026956 28004 ? Sl 02:16 0:00 /usr/libexec/gnome-shell-calendar-server cnetos 6169 0.0 1.4 1120028 27576 ? Sl 02:16 0:00 /usr/libexec/evolution-source-registry root 762 0.0 1.4 327144 26724 ? Ssl 02:09 0:01 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid cnetos 6026 0.0 1.4 1090832 26376 ? Sl 02:16 0:00 /usr/libexec/gnome-settings-daemon [root@CentOS ~]$
사용자 centos 및 형식별로 모든 프로세스를 확인하고 사용자 지정 출력을 표시합니다.
[cnetos@CentOS ~]$ ps -u cnetos -o pid,uname,comm
PID USER COMMAND
5802 centos gnome-keyring-d
5812 cnetos gnome-session
5819 cnetos dbus-launch
5820 cnetos dbus-daemon
5888 cnetos gvfsd
5893 cnetos gvfsd-fuse
5980 cnetos ssh-agent
5996 cnetos at-spi-bus-laun
pstree 명령
pstreeps 와 유사 하지만 자주 사용되지는 않습니다. 프로세스를 깔끔한 트리 방식으로 표시합니다.
[centos@CentOS ~]$ pstree
systemd─┬─ModemManager───2*[{ModemManager}]
├─NetworkManager─┬─dhclient
│ └─2*[{NetworkManager}]
├─2*[abrt-watch-log]
├─abrtd
├─accounts-daemon───2*[{accounts-daemon}]
├─alsactl
├─at-spi-bus-laun─┬─dbus-daemon───{dbus-daemon}
│ └─3*[{at-spi-bus-laun}]
├─at-spi2-registr───2*[{at-spi2-registr}]
├─atd
├─auditd─┬─audispd─┬─sedispatch
│ │ └─{audispd}
│ └─{auditd}
├─avahi-daemon───avahi-daemon
├─caribou───2*[{caribou}]
├─cgrulesengd
├─chronyd
├─colord───2*[{colord}]
├─crond
├─cupsd
pstree 의 총 출력은 100 줄을 초과 할 수 있습니다. 일반적으로 ps 는 더 유용한 정보를 제공합니다.
top 명령
topLinux에서 성능 문제를 해결할 때 가장 자주 사용되는 명령 중 하나입니다. Linux에서 실시간 통계 및 프로세스 모니터링에 유용합니다. 다음은 명령 줄에서 가져올 때 top 의 기본 출력입니다 .
Tasks: 170 total, 1 running, 169 sleeping, 0 stopped, 0 zombie
%Cpu(s): 2.3 us, 2.0 sy, 0.0 ni, 95.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 1879668 total, 177020 free, 607544 used, 1095104 buff/cache
KiB Swap: 3145724 total, 3145428 free, 296 used. 1034648 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
5404 root 20 0 197832 48024 6744 S 1.3 2.6 1:13.22 Xorg
8013 centos 20 0 555316 23104 13140 S 1.0 1.2 0:14.89 gnome-terminal-
6339 centos 20 0 332336 6016 3248 S 0.3 0.3 0:23.71 prlcc
6351 centos 20 0 21044 1532 1292 S 0.3 0.1 0:02.66 prlshprof
top을 실행하는 동안 사용되는 일반적인 핫키 ( 셸에서 top이 실행될 때 키를 눌러 핫키 에 액세스)
명령 | 동작 |
---|---|
비 | 상단 메뉴에서 굵은 강조 표시를 활성화 / 비활성화합니다. |
지 | 색 구성표를 순환합니다. |
엘 | 부하 평균 제목을 순환합니다. |
미디엄 | 메모리 평균 제목을 순환합니다. |
티 | 작업 정보 제목 |
h | 도움말 메뉴 |
Shift + F | 정렬 및 표시 필드를 사용자 정의합니다. |
다음은 top에 대한 일반적인 명령 줄 스위치입니다 .
명령 | 동작 |
---|---|
-영형 | 열을 기준으로 정렬 (오름차순 또는 내림차순으로 정렬하려면 앞에-또는 +를 추가 할 수 있음) |
-유 | 지정된 사용자의 프로세스 만 표시 |
-디 | 상단 의 지연 시간을 업데이트합니다. |
-영형 | 열 목록 반환 상단이 정렬 적용 할 수 있습니다 |
상단의 정렬 옵션 화면, Shift + F를 사용하여 표시됩니다 . 이 화면에서는 상단 표시 및 정렬 옵션을 사용자 지정할 수 있습니다.
Fields Management for window 1:Def, whose current sort field is %MEM
Navigate with Up/Dn, Right selects for move then <Enter> or Left commits,
'd' or <Space> toggles display, 's' sets sort. Use 'q' or <Esc> to end!
* PID = Process Id TGID = Thread Group Id
* USER = Effective User Name ENVIRON = Environment vars
* PR = Priority vMj = Major Faults delta
* NI = Nice Value vMn = Minor Faults delta
* VIRT = Virtual Image (KiB) USED = Res+Swap Size (KiB)
* RES = Resident Size (KiB) nsIPC = IPC namespace Inode
* SHR = Shared Memory (KiB) nsMNT = MNT namespace Inode
* S = Process Status nsNET = NET namespace Inode
* %CPU = CPU Usage nsPID = PID namespace Inode
* %MEM = Memory Usage (RES) nsUSER = USER namespace Inode
* TIME+ = CPU Time, hundredths nsUTS = UTS namespace Inode
* COMMAND = Command Name/Line
PPID = Parent Process pid
UID = Effective User Id
정상은 , 사용자의 프로세스를 보여주는 RDC를 메모리 사용으로 분류 -
PID USER %MEM PR NI VIRT RES SHR S %CPU TIME+ COMMAND
6130 rdc 6.2 20 0 1349592 117160 33232 S 0.0 1:09.34 gnome-shell
6449 rdc 3.4 20 0 1375872 64428 21400 S 0.0 0:00.43 evolution-calen
6296 rdc 1.7 20 0 1081944 32140 22596 S 0.0 0:00.40 evolution-alarm
6350 rdc 1.6 20 0 560728 29844 4256 S 0.0 0:10.16 prlsga
6281 rdc 1.5 20 0 1027176 28808 17680 S 0.0 0:00.78 nautilus
6158 rdc 1.5 20 0 1026956 28004 19072 S 0.0 0:00.20 gnome-shell-cal
유효한 상위 필드 표시 (압축) −
[centos@CentOS ~]$ top -O
PID
PPID
UID
USER
RUID
RUSER
SUID
SUSER
GID
GROUP
PGRP
TTY
TPGID
kill 명령
그만큼 kill명령은 PID를 통해 명령 쉘에서 프로세스를 종료하는 데 사용됩니다. 때 죽이는 과정을, 우리는 보낼 신호를 지정해야합니다. 신호는 커널이 프로세스를 종료하는 방법을 알려줍니다. 가장 일반적으로 사용되는 신호는 다음과 같습니다.
SIGTERM이는 커널이 프로세스가 안전하다고 판단되는 즉시 중지해야 함을 알리기 때문에 암시됩니다. SIGTERM 은 프로세스가 정상적으로 종료하고 안전한 종료 작업을 수행 할 수있는 기회를 제공합니다.
SIGHUP대부분의 데몬은 SIGHUP를 보내면 다시 시작됩니다 . 구성 파일이 변경된 경우 프로세스에서 자주 사용됩니다.
SIGKILL이후 SIGTERM 종료 프로세스를 요청에 해당합니다. 커널에는 요청을 따르지 않는 프로세스를 종료하는 옵션이 필요합니다. 프로세스가 정지되면 SIGKILL 옵션을 사용하여 프로세스를 명시 적으로 종료합니다.
kill 과 함께 보낼 수있는 모든 신호 목록 을 위해 -l 옵션을 사용할 수 있습니다.
[root@CentOS]# kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
[root@CentOS rdc]#
SIGHUP 를 사용하여 시스템을 다시 시작합니다.
[root@CentOS]# pgrep systemd
1
464
500
643
15071
[root@CentOS]# kill -HUP 1
[root@CentOS]# pgrep systemd
1
464
500
643
15196
15197
15198
[root@CentOS]#
pkill관리자가 보낼 수 킬 프로세스 이름으로 신호를.
[root@CentOS]# pgrep ping
19450
[root@CentOS]# pkill -9 ping
[root@CentOS]# pgrep ping
[root@CentOS]#
killall모든 프로세스를 종료합니다. killall 을 루트로 사용하면 모든 사용자에 대한 모든 프로세스가 종료 되므로 주의하십시오 .
[root@CentOS]# killall chrome
무료 명령
free시스템의 메모리를 빠르게 확인하는 데 자주 사용되는 매우 간단한 명령입니다. 사용 된 물리적 및 스왑 메모리의 총량을 표시합니다.
[root@CentOS]# free
total used free shared buff/cache available
Mem: 1879668 526284 699796 10304 653588 1141412
Swap: 3145724 0 3145724
[root@CentOS]#
좋은 명령
nice관리자는 CPU 사용량 측면에서 프로세스의 예약 우선 순위를 설정할 수 있습니다. 좋은 점은 기본적으로 커널이 프로세스 또는 작업에 대한 CPU 시간 조각을 예약하는 방법입니다. 기본적으로 프로세스에 CPU 리소스에 대한 동일한 액세스 권한이 부여된다고 가정합니다.
먼저 top을 사용하여 현재 실행중인 프로세스의 상태를 확인합니다.
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
28 root 39 19 0 0 0 S 0.0 0.0 0:00.17 khugepaged
690 root 39 19 16808 1396 1164 S 0.0 0.1 0:00.01 alsactl]
9598 rdc 39 19 980596 21904 10284 S 0.0 1.2 0:00.27 tracker-extract
9599 rdc 39 19 469876 9608 6980 S 0.0 0.5 0:00.04 tracker-miner-a
9609 rdc 39 19 636528 13172 8044 S 0.0 0.7 0:00.12 tracker-miner-f
9611 rdc 39 19 469620 8984 6496 S 0.0 0.5 0:00.02 tracker-miner-u
27 root 25 5 0 0 0 S 0.0 0.0 0:00.00 ksmd
637 rtkit 21 1 164648 1276 1068 S 0.0 0.1 0:00.11 rtkit-daemon
1 root 20 0 128096 6712 3964 S 0.3 0.4 0:03.57 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.01 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:00.50 ksoftirqd/0
7 root 20 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
9 root 20 0 0 0 0 S 0.0 0.0 0:02.07 rcu_sched
우리는 NI가 묘사 한 NICE 칼럼 에 초점을 맞추고 싶습니다 . niceness 범위는 -20에서 양수 19 사이입니다. -20은 주어진 가장 높은 우선 순위를 나타냅니다.
nohup nice --20 ping www.google.com &
Renice
renice를 사용하면 이미 실행중인 프로세스의 현재 우선 순위를 변경할 수 있습니다.
renice 17 -p 30727
위의 명령은 ping 프로세스 명령 의 우선 순위를 낮 춥니 다 .
firewalld 는 CentOS의 iptables에 대한 기본 프런트 엔드 컨트롤러입니다. firewalld 프런트 엔드는 원시의 iptables를 통해 두 가지 장점이 있습니다 -
구성하기 쉬운 영역을 사용하여 체인 및 규칙을 추상화합니다.
규칙 세트는 동적이므로 설정이 변경 및 / 또는 수정 될 때 상태 저장 연결이 중단되지 않습니다.
기억 firewalld 하지 대체 - iptables에 대한 래퍼입니다. 사용자 지정 iptables 명령은 firewalld 와 함께 사용할 수 있지만 방화벽 기능을 중단하지 않으려면 firewalld를 사용하는 것이 좋습니다.
먼저 firewalld 가 시작되고 활성화되어 있는지 확인하겠습니다 .
[root@CentOS rdc]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2017-01-26 21:42:05 MST; 3h 46min ago
Docs: man:firewalld(1)
Main PID: 712 (firewalld)
Memory: 34.7M
CGroup: /system.slice/firewalld.service
└─712 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid
firewalld가 활성 상태 (부팅시 시작)이고 현재 실행 중임을 알 수 있습니다. 비활성 상태이거나 시작되지 않은 경우 다음을 사용할 수 있습니다.
systemctl start firewalld && systemctl enable firewalld
방화벽 서비스를 구성 했으므로 이제 작동하는지 확인하겠습니다.
[root@CentOS]# firewall-cmd --state
running
[root@CentOS]#
방화벽 서비스가 완전히 작동한다는 것을 알 수 있습니다.
방화벽은 영역 개념에서 작동 합니다 . 영역은 Network Manager를 통해 네트워크 인터페이스에 적용됩니다. 네트워킹 구성 에서 이에 대해 설명합니다 . 그러나 지금은 기본적으로 기본 영역을 변경하면 기본 상태 인 "기본 영역"에 남아있는 모든 네트워크 어댑터가 변경됩니다.
firewalld 로 기본 제공되는 각 영역을 간략히 살펴 보겠습니다 .
Sr. 아니. | 구역 및 설명 |
---|---|
1 | drop 낮은 신뢰 수준. 모든 수신 연결 및 패킷이 삭제되고 상태 완전성을 통해 발신 연결 만 가능합니다. |
2 | block 들어오는 연결은 개시 자에게 요청이 금지되었음을 알리는 ICMP 메시지로 응답됩니다. |
삼 | public 모든 네트워크가 제한됩니다. 그러나 선택된 들어오는 연결은 명시 적으로 허용 될 수 있습니다. |
4 | external NAT에 대해 firewalld를 구성합니다. 내부 네트워크는 비공개로 유지되지만 연결할 수 있습니다. |
5 | dmz 특정 수신 연결 만 허용됩니다. DMZ 격리 시스템에 사용 |
6 | work 기본적으로 시스템이 안전한 작업 환경에 있다고 가정하면 네트워크에서 더 많은 컴퓨터를 신뢰합니다. |
7 | hone 기본적으로 더 많은 서비스가 필터링되지 않습니다. 시스템이 NFS, SAMBA 및 SSDP와 같은 서비스가 사용되는 홈 네트워크에 있다고 가정합니다. |
8 | trusted 네트워크의 모든 컴퓨터는 신뢰할 수 있습니다. 대부분의 들어오는 연결은 제한없이 허용됩니다.This is not meant for interfaces exposed to the Internet |
사용하는 가장 일반적인 영역은 공공, 하차, 직장 및 집입니다.
각 공통 영역이 사용되는 몇 가지 시나리오는 다음과 같습니다.
public− 관리자가 사용하는 가장 일반적인 영역입니다. 사용자 지정 설정을 적용하고 LAN 작업에 대한 RFC 사양을 준수 할 수 있습니다.
drop− 드롭을 사용하는 좋은 예는 보안 회의, 공용 WiFi 또는 인터넷에 직접 연결된 인터페이스입니다. drop은 ICMP 프로브를 포함하여 모든 원치 않는 요청이 악성이라고 가정합니다. 따라서 다른 상태의 요청은 응답을받지 못합니다. 드롭의 단점은 엄격한 RFC 준수가 필요한 특정 상황에서 애플리케이션의 기능을 손상시킬 수 있다는 것입니다.
work− 준 보안 기업 LAN을 사용 중입니다. 모든 교통이 적당히 안전하다고 가정 할 수있는 곳. 이는 WiFi가 아니며 IDS, IPS 및 물리적 보안 또는 802.1x가있을 수 있음을 의미합니다. 우리는 또한 LAN을 사용하는 사람들에 대해서도 잘 알고 있어야합니다.
home− 홈 LAN에 있습니다. LAN상의 모든 시스템과 사용자에 대해 개인적으로 책임을 져야합니다. LAN에있는 모든 시스템을 알고 있으며 손상되지 않은 시스템은 없습니다. 종종 신뢰할 수있는 개인 간의 미디어 공유를 위해 새로운 서비스가 제공되며 보안을 위해 추가 시간을 들일 필요가 없습니다.
영역과 네트워크 인터페이스는 일대 다 수준에서 작동합니다. 네트워크 인터페이스는 한 번에 하나의 영역 만 적용 할 수 있습니다. 그러나 영역은 여러 인터페이스에 동시에 적용 할 수 있습니다.
사용 가능한 영역과 현재 적용된 영역이 무엇인지 살펴 보겠습니다.
[root@CentOS]# firewall-cmd --get-zones
work drop internal external trusted home dmz public block
[root@CentOS]# firewall-cmd --get-default-zone
public
[root@CentOS]#
firewalld에 사용자 지정 규칙을 추가 할 준비가 되셨습니까?
먼저, 외부에서 포트 스캐너에게 우리의 상자가 어떻게 생겼는지 봅시다.
bash-3.2# nmap -sS -p 1-1024 -T 5 10.211.55.1
Starting Nmap 7.30 ( https://nmap.org ) at 2017-01-27 23:36 MST
Nmap scan report for centos.shared (10.211.55.1)
Host is up (0.00046s latency).
Not shown: 1023 filtered ports
PORT STATE SERVICE
22/tcp open ssh
Nmap done: 1 IP address (1 host up) scanned in 3.71 seconds
bash-3.2#
들어오는 요청을 포트 80으로 허용합시다.
먼저 기본으로 적용되는 영역을 확인합니다.
[root@CentOs]# firewall-cmd --get-default-zone
public
[root@CentOS]#
그런 다음 포트 80을 허용하는 규칙을 현재 기본 영역으로 설정합니다.
[root@CentOS]# firewall-cmd --zone=public --add-port = 80/tcp
success
[root@CentOS]#
이제 포트 80 연결을 허용 한 후 상자를 선택하겠습니다.
bash-3.2# nmap -sS -p 1-1024 -T 5 10.211.55.1
Starting Nmap 7.30 ( https://nmap.org ) at 2017-01-27 23:42 MST
Nmap scan report for centos.shared (10.211.55.1)
Host is up (0.00053s latency).
Not shown: 1022 filtered ports
PORT STATE SERVICE
22/tcp open ssh
80/tcp closed http
Nmap done: 1 IP address (1 host up) scanned in 3.67 seconds
bash-3.2#
이제 요청하지 않은 트래픽을 80으로 허용합니다.
기본 영역을 드롭 하고 포트 스캔에 어떤 일이 발생하는지 살펴 보겠습니다 .
[root@CentOS]# firewall-cmd --set-default-zone=drop
success
[root@CentOS]# firewall-cmd --get-default-zone
drop
[root@CentOs]#
이제보다 안전한 영역에서 네트워크 인터페이스를 사용하여 호스트를 검색해 보겠습니다.
bash-3.2# nmap -sS -p 1-1024 -T 5 10.211.55.1
Starting Nmap 7.30 ( https://nmap.org ) at 2017-01-27 23:50 MST
Nmap scan report for centos.shared (10.211.55.1)
Host is up (0.00094s latency).
All 1024 scanned ports on centos.shared (10.211.55.1) are filtered
Nmap done: 1 IP address (1 host up) scanned in 12.61 seconds
bash-3.2#
이제 모든 것이 외부에서 필터링됩니다.
아래에 설명 된대로 호스트는 드롭 시 ICMP 핑 요청에 응답하지 않습니다 .
bash-3.2# ping 10.211.55.1
PING 10.211.55.1 (10.211.55.1): 56 data bytes
Request timeout for icmp_seq 0
Request timeout for icmp_seq 1
Request timeout for icmp_seq 2
기본 영역을 다시 공개로 설정하겠습니다 .
[root@CentOs]# firewall-cmd --set-default-zone=public
success
[root@CentOS]# firewall-cmd --get-default-zone
public
[root@CentOS]#
이제 public 에서 현재 필터링 규칙 집합을 확인하겠습니다 .
[root@CentOS]# firewall-cmd --zone=public --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: enp0s5
sources:
services: dhcpv6-client ssh
ports: 80/tcp
protocols:
masquerade: no
forward-ports:
sourceports:
icmp-blocks:
rich rules:
[root@CentOS rdc]#
구성된대로 포트 80 필터 규칙은 실행중인 구성의 컨텍스트 내에 만 있습니다. 즉, 시스템이 재부팅되거나 방화벽 서비스가 다시 시작되면 규칙이 삭제됩니다.
곧 httpd 데몬을 구성 할 예정이므로 변경 사항을 지속적으로 적용 해 보겠습니다.
[root@CentOS]# firewall-cmd --zone=public --add-port=80/tcp --permanent
success
[root@CentOS]# systemctl restart firewalld
[root@CentOS]#
이제 퍼블릭 영역의 포트 80 규칙은 재부팅 및 서비스 재시작시에도 지속됩니다.
다음은 firewall-cmd 와 함께 적용되는 일반적인 firewalld 명령 입니다.
명령 | 동작 |
---|---|
방화벽 -cmd --get-zones | 인터페이스에 적용 할 수있는 모든 영역을 나열합니다. |
firewall-cmd — 상태 | 방화벽 서비스의 현재 상태를 반환합니다. |
방화벽 -cmd --get-default-zone | 현재 기본 영역을 가져옵니다. |
firewall-cmd --set-default-zone = <영역> | 기본 영역을 현재 컨텍스트로 설정합니다. |
방화벽 -cmd --get-active-zone | 인터페이스에 적용된 컨텍스트의 현재 영역을 가져옵니다. |
방화벽 -cmd --zone = <영역> --list-all | 제공된 영역의 구성을 나열합니다. |
firewall-cmd --zone = <zone> --addport = <포트 / 전송 프로토콜> | 영역 필터에 포트 규칙을 적용합니다. |
--영구적 인 | 영역을 지속적으로 변경합니다. 플래그는 수정 명령과 함께 인라인으로 사용됩니다. |
이는 firewalld 관리 및 구성의 기본 개념입니다 .
CentOS에서 호스트 기반 방화벽 서비스를 구성하는 것은보다 정교한 네트워킹 시나리오에서 복잡한 작업이 될 수 있습니다. CentOS에서 firewalld 및 iptables 의 고급 사용 및 구성은 전체 자습서를 수행 할 수 있습니다. 그러나 우리는 대부분의 일상 작업을 완료하기에 충분한 기본 사항을 제시했습니다.
PHP는 오늘날 가장 많이 사용되는 웹 언어 중 하나입니다. CentOS에 LAMP 스택을 설치하는 것은 모든 시스템 관리자가 수행해야하는 작업입니다.
전통적인 LAMP 스택은 (L) inux (A) pache (M) ySQL (P) HP로 구성됩니다.
CentOS 의 LAMP 스택 에는 세 가지 주요 구성 요소가 있습니다.
- 웹 서버
- 웹 개발 플랫폼 / 언어
- 데이터베이스 서버
Note− LAMP Stack 이라는 용어 에는 PostgreSQL, MariaDB, Perl, Python, Ruby, NGINX Webserver 등의 기술도 포함될 수 있습니다.
이 자습서에서는 CentOS GNU Linux 의 기존 LAMP 스택 인 Apache 웹 서버, MySQL 데이터베이스 서버 및 PHP를 사용합니다.
실제로 MariaDB를 사용할 것입니다. MySQL 구성 파일, 데이터베이스 및 테이블은 MariaDB에 투명합니다. MariaDB는 이제 MySQL 대신 표준 CentOS 저장소에 포함됩니다. 이는 오라클이 MySQL 개발을 인수했기 때문에 라이선스 및 오픈 소스 규정 준수의 한계 때문입니다.
가장 먼저해야 할 일은 Apache를 설치하는 것입니다.
[root@CentOS]# yum install httpd
Loaded plugins: fastestmirror, langpacks
base
| 3.6 kB 00:00:00
extras
| 3.4 kB 00:00:00
updates
| 3.4 kB 00:00:00
extras/7/x86_64/primary_d
| 121 kB 00:00:00
Loading mirror speeds from cached hostfile
* base: mirror.sigmanet.com
* extras: linux.mirrors.es.net
* updates: mirror.eboundhost.com
Resolving Dependencies
--> Running transaction check
---> Package httpd.x86_64 0:2.4.6-45.el7.centos will be installed
--> Processing Dependency: httpd-tools = 2.4.6-45.el7.centos for package:
httpd-2.4.6-45.el7.centos.x86_64
--> Processing Dependency: /etc/mime.types for package: httpd-2.4.645.el7.centos.x86_64
--> Running transaction check
---> Package httpd-tools.x86_64 0:2.4.6-45.el7.centos will be installed
---> Package mailcap.noarch 0:2.1.41-2.el7 will be installed
--> Finished Dependency Resolution
Installed:
httpd.x86_64 0:2.4.6-45.el7.centos
Dependency Installed:
httpd-tools.x86_64 0:2.4.6-45.el7.centos
mailcap.noarch 0:2.1.41-2.el7
Complete!
[root@CentOS]#
httpd 서비스를 구성 해 보겠습니다 .
[root@CentOS]# systemctl start httpd && systemctl enable httpd
이제 firewalld를 통해 웹 서버에 액세스 할 수 있는지 확인하겠습니다.
bash-3.2# nmap -sS -p 1-1024 -T 5 -sV 10.211.55.1
Starting Nmap 7.30 ( https://nmap.org ) at 2017-01-28 02:00 MST
Nmap scan report for centos.shared (10.211.55.1)
Host is up (0.00054s latency).
Not shown: 1022 filtered ports
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 6.6.1 (protocol 2.0)
80/tcp open http Apache httpd 2.4.6 ((CentOS))
Service detection performed. Please report any incorrect results at
https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 10.82 seconds bash-3.2#
nmap 서비스 프로브에서 알 수 있듯이 Apache 웹 서버는 CentOS 호스트의 요청을 수신하고 응답합니다.
MySQL 데이터베이스 서버 설치
[root@CentOS rdc]# yum install mariadb-server.x86_64 && yum install mariadb-
devel.x86_64 && mariadb.x86_64 && mariadb-libs.x86_64
다음과 같은 MariaDB 용 저장소 패키지를 설치하고 있습니다.
mariadb-server.x86_64
기본 MariaDB 서버 데몬 패키지.
mariadb-devel.x86_64
MySQL / MariaDB와 호환되는 소스에서 파일을 컴파일해야합니다.
mariadb.x86_64
명령 줄에서 MariaDB 서버를 관리하기위한 MariaDB 클라이언트 유틸리티.
mariadb-libs.x86_64
MySQL / MariaDB 지원으로 컴파일 된 다른 애플리케이션에 필요할 수있는 MariaDB 용 공통 라이브러리입니다.
이제 MariaDB 서비스를 시작하고 활성화하겠습니다.
[root@CentOS]# systemctl start mariadb
[root@CentOS]# systemctl enable mariadb
Note− Apache와 달리 호스트 기반 방화벽 (방화벽)을 통해 MariaDB에 연결할 수 없습니다. 데이터베이스 서버를 사용할 때 원격 소켓 액세스가 특별히 필요하지 않는 한 로컬 소켓 연결 만 허용하는 것이 최상의 보안 관행으로 간주됩니다.
MariaDB 서버가 연결을 수락하는지 확인합시다.
[root@CentOS#] netstat -lnt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN
tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
[root@CentOS rdc]#
보시다시피 MariaDB는 포트 3306 tcp에서 수신 대기합니다. 호스트 기반 방화벽 (방화벽)은 포트 3306으로 들어오는 연결을 차단합니다.
PHP 설치 및 구성
[root@CentOS#] yum install php.x86_64 && php-common.x86_64 && php-mysql.x86_64
&& php-mysqlnd.x86_64 && php-pdo.x86_64 && php-soap.x86_64 && php-xml.x86_64
일반적인 호환성을 위해 다음 PHP 패키지를 설치하는 것이 좋습니다.
- php-common.x86_64
- php-mysql.x86_64
- php-mysqlnd.x86_64
- php-pdo.x86_64
- php-soap.x86_64
- php-xml.x86_64
[root@CentOS]# yum install -y php-common.x86_64 php-mysql.x86_64 php-
mysqlnd.x86_64 php-pdo.x86_64 php-soap.x86_64 php-xml.x86_64
이것은 / var / www / html /의 Apache 웹 루트에있는 간단한 php 파일입니다.
[root@CentOS]# cat /var/www/html/index.php
<html>
<head>
<title>PHP Test Page</title>
</head>
<body>
PHP Install
<?php
echo "We are now running PHP on GNU Centos Linux!<br />"
?>
</body>
</html>
[root@CentOS]#
페이지의 소유 그룹을 http 데몬이 실행중인 시스템 사용자로 변경해 보겠습니다.
[root@CentOS]# chgrp httpd /var/www/html/index.php && chmod g+rx /var/www/html/index.php
---
ncat을 통해 수동으로 요청하는 경우.
bash-3.2# ncat 10.211.55.1 80
GET / index.php
HTTP/1.1 200 OK
Date: Sat, 28 Jan 2017 12:06:02 GMT
Server: Apache/2.4.6 (CentOS) PHP/5.4.16
X-Powered-By: PHP/5.4.16
Content-Length: 137
Connection: close
Content-Type: text/html; charset=UTF-8
<html>
<head>
<title>PHP Test Page</title>
</head>
<body>
PHP Install
We are now running PHP on GNU Centos Linux!<br />
</body>
</html>
bash-3.2#
PHP와 LAMP는 매우 인기있는 웹 프로그래밍 기술입니다. LAMP 설치 및 구성은 CentOS 관리자의 요구 사항 목록에 포함됩니다. 사용하기 쉬운 CentOS 패키지는 소스 코드에서 Apache, MySQL 및 PHP를 컴파일하는 데 많은 작업을 수행했습니다.
Python은 널리 사용되는 해석 언어로 Linux (및 기타 운영 체제)에서 스크립팅 된 애플리케이션을 코딩하는 세계에 전문성을 가져 왔습니다. Perl이 한때 산업 표준이었던 곳에서 Python은 여러면에서 Perl을 능가했습니다.
Python과 Perl의 장점은 다음과 같습니다.
개선의 빠른 진행
언어의 표준 인 라이브러리
코드의 가독성은 언어 정의에서 고려됩니다.
GUI 지원에서 웹 개발에 이르기까지 모든 것을위한 많은 전문 프레임 워크
파이썬은 Perl이 할 수있는 모든 것을 할 수 있으며, 많은 경우에 더 나은 방식으로 할 수 있습니다. Perl은 여전히 Linux 관리자의 도구 상자에 속하지만 Python을 배우는 것은 기술 세트로서 훌륭한 선택입니다.
Python의 가장 큰 단점은 때때로 강점과 관련이 있습니다. 역사상 Python은 원래 프로그래밍을 가르치기 위해 설계되었습니다. 때로는 "쉽게 읽기"및 "올바른 방식으로 작업"이라는 핵심 기반이 간단한 코드를 작성할 때 불필요한 복잡성을 유발할 수 있습니다. 또한 표준 라이브러리로 인해 버전 2.X에서 3.X로 전환하는 데 문제가 발생했습니다.
Python 스크립트는 실제로 운영 체제의 기능에 필수적인 기능을 위해 CentOS의 핵심에서 사용됩니다. 이 때문에 CentOS의 핵심 Python 환경에서 개발 Python 환경을 격리하는 것이 중요합니다.
우선, 현재 두 가지 버전의 Python이 있습니다. Python 2.X 과 Python 3.X.
버전 2.X가 감가 상각으로 빠르게 마감되고 있지만 (몇 년 동안) 두 단계 모두 여전히 활성 상태입니다. 두 가지 활성 버전의 Python에 대한 이유는 기본적으로 버전 2.X의 단점을 수정했기 때문입니다. 이를 위해서는 버전 3.X의 일부 핵심 기능이 일부 버전 2.X 스크립트를 지원할 수없는 방식으로 다시 실행되어야했습니다.
기본적으로 이러한 전환을 극복하는 가장 좋은 방법은 3.X 용으로 개발하고 레거시 스크립트 용으로 최신 2.X 버전을 유지하는 것입니다. 현재 CentOS 7.X는 버전 2.X의 반 최신 버전에 의존합니다.
이 글을 쓰는 현재 최신 버전의 Python은 다음과 같습니다. 3.4.6 과 2.7.13.
이것이 파이썬의 어떤 결론도 혼동하거나 이끌어 내지 않도록하십시오. Python 환경 설정은 정말 간단합니다. Python 프레임 워크와 라이브러리를 사용하면 실제로이 작업을 수행하기가 정말 쉽습니다.
Python 환경을 설정하기 전에 정상적인 환경이 필요합니다. 시작하려면 CentOS 설치가 완전히 업데이트되었는지 확인하고 일부 건물 유틸리티를 설치해 보겠습니다.
Step 1 − CentOS를 업데이트합니다.
[root@CentOS]# yum -y update
Step 2 − 빌드 유틸리티를 설치합니다.
[root@CentOS]# yum -y groupinstall "development tools"
Step 3 − 필요한 패키지를 설치합니다.
[root@CentOS]# yum install -y zlib-dev openssl-devel sqlite-devel bip2-devel
이제 소스에서 현재 Python 2.X 및 3.X를 설치해야합니다.
- 압축 된 아카이브 다운로드
- 파일의 압축을 풉니 다
- 소스 코드 컴파일
/ usr / src / 에 각 Python 설치에 대한 빌드 디렉토리를 생성하여 시작하겠습니다.
[root@CentOS]# mkdir -p /usr/src/pythonSource
이제 각각에 대한 소스 tarball을 다운로드 해 보겠습니다.
[root@CentOS]# wget https://www.python.org/ftp/python/2.7.13/Python-2.7.13.tar.xz
[root@CentOS]# wget https://www.python.org/ftp/python/3.6.0/Python-3.6.0.tar.xz
이제 아카이브에서 각각을 추출해야합니다.
Step 1 − xz-libs를 설치하고 tarball을 추출합니다.
[root@CentOS]# yum install xz-libs
[root@CentOS python3]# xz -d ./*.xz
[root@CentOS python3]# ls
Python-2.7.13.tar Python-3.6.0.tar
[root@CentOS python3]#
Step 2 − tarball에서 각 설치 프로그램의 압축을 풉니 다.
[root@CentOS]# tar -xvf ./Python-2.7.13.tar
[root@CentOS]# tar -xvf ./Python-3.6.0.tar
Step 3 − 각 디렉토리를 입력하고 구성 스크립트를 실행합니다.
[root@CentOS]# ./configure --prefix=/usr/local
root@CentOS]# make altinstall
Note − 반드시 사용하십시오 altinstall설치하지 마십시오. 이렇게하면 CentOS와 Python의 개발 버전이 분리됩니다. 그렇지 않으면 CentOS의 기능이 손상 될 수 있습니다.
이제 컴파일 프로세스가 시작되는 것을 볼 수 있습니다. 커피 한 잔을 잡고 완료 될 때까지 15 분간 휴식을 취하십시오. Python에 필요한 모든 종속성을 설치 했으므로 컴파일 프로세스가 오류없이 완료되어야합니다.
최신 2.X 버전의 Python이 설치되어 있는지 확인하겠습니다.
[root@CentOS Python-2.7.13]# /usr/local/bin/python2.7 -V
Python 2.7.13
[root@CentOS Python-2.7.13]#
Note − Python 2.X 용 개발 환경을 가리키는 shebang 줄을 접두사로 붙이는 것이 좋습니다.
[root@CentOS Python-2.7.13]# cat ver.py
#!/usr/local/bin/python2.7
import sys
print(sys.version)
[root@CentOS Python-2.7.13]# ./ver.py
2.7.13 (default, Jan 29 2017, 02:24:08)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]
마찬가지로 버전 2.X 및 3.X에 대해 별도의 Python 설치가 있습니다. 여기에서 각각 다음과 같은 유틸리티를 사용할 수 있습니다.pip 과 virtualenv Python 환경 및 패키지 설치 관리의 부담을 더욱 덜어줍니다.
Ruby는 웹 개발과 Linux 관리 모두를위한 훌륭한 언어입니다. Ruby는 이전에 논의 된 모든 언어 (PHP, Python 및 Perl)에서 발견 된 많은 이점을 제공합니다.
Ruby를 설치하려면 관리자가 Ruby 환경을 쉽게 설치하고 관리 할 수있는 rbenv 를 통해 부트 스트랩하는 것이 가장 좋습니다 .
Ruby를 설치하는 다른 방법은 Ruby 용 표준 CentOS 패키지입니다. 모든 이점과 함께 rbenv 방법 을 사용하는 것이 좋습니다 . CentOS 패키지는 Ruby가 아닌 사람들에게 더 쉬울 것입니다.
먼저 rbenv 설치 프로그램에 필요한 몇 가지 종속성을 살펴 보겠습니다.
- git-core
- zlib
- zlib-devel
- gcc-c++
- patch
- readline
- readline-devel
- libyaml-devel
- libffi-devel
- openssl-devel
- make
- bzzip2
- autoconf
- automake
- libtool
- bison
- curl
- sqlite-devel
이러한 패키지의 대부분은 CentOS를 설치할 때 선택한 옵션 및 역할에 따라 이미 설치되어있을 수 있습니다. 의존성이 필요한 패키지를 설치할 때 골칫거리가 덜할 수 있으므로 확실하지 않은 모든 것을 설치하는 것이 좋습니다.
[root@CentOS]# yum -y install git-core zlib zlib-devel gcc-c++ patch readline
readline-devel libyaml-devel libffi-devel openssl-devel make bzip2 autoconf
automake libtool bison curl sqlite-devel
방법 1 : 동적 Ruby 개발 환경을위한 rbenv
이제 Ruby를 사용할 사용자로서 -
[rdc@CentOS ~]$ git clone https://github.com/rbenv/rbenv.git
[rdc@CentOS ~]$ https://github.com/rbenv/ruby-build.git
ruby-build는 rbenv에 설치 기능을 제공합니다 -
Note− install.sh 를 실행하기 전에 루트 또는 관리 사용자로 전환해야합니다.
[rdc@CentOS ruby-build]$ cd ~/ruby-build
[rdc@CentOS ruby-build]# ./install.sh
rbenv에 대한 쉘을 설정하고 올바른 옵션을 설치했는지 확인합시다.
[rdc@CentOS ~]$ source ~/rbenv/rbenv.d/exec/gem-rehash.bash [rdc@CentOS ruby-build]$ ~/rbenv/bin/rbenv
rbenv 1.1.0-2-g4f8925a
Usage: rbenv <command> [<args>]
몇 가지 유용한 rbenv 명령은 다음과 같습니다.
명령어 | 동작 |
---|---|
현지 | 로컬 애플리케이션 별 Ruby 버전을 설정하거나 표시합니다. |
글로벌 | 글로벌 Ruby 버전을 설정하거나 표시합니다. |
껍질 | 셸별 Ruby 버전을 설정하거나 표시합니다. |
설치 | ruby-build를 사용하여 Ruby 버전을 설치합니다. |
제거 | 특정 Ruby 버전을 제거합니다. |
다시 만들다 | rbenv shim을 다시 해시합니다 (실행 파일을 설치 한 후 실행). |
버전 | 현재 Ruby 버전과 그 출처를 보여줍니다. |
버전 | rbenv에서 사용할 수있는 모든 Ruby 버전을 나열합니다. |
어느 | 실행 파일의 전체 경로를 표시합니다. |
어떻게 | 주어진 실행 파일을 포함하는 모든 Ruby 버전을 나열합니다. |
이제 Ruby를 설치해 보겠습니다.
[rdc@CentOS bin]$ ~/rbenv/bin/rbenv install -v 2.2.1
컴파일이 완료된 후-
[rdc@CentOS ~]$ ./ruby -v
ruby 2.2.1p85 (2015-02-26 revision 49769) [x86_64-linux]
[rdc@CentOS ~]$
이제 Ruby 2.X 브랜치의 업데이트 및 작동 버전이있는 작동중인 Ruby 환경이 있습니다.
방법 2 : CentOS 패키지에서 Ruby 설치
이것은 가장 간단한 방법입니다. 그러나 CentOS에서 패키징 된 버전 및 gem에 의해 제한 될 수 있습니다. 심각한 개발 작업을 위해서는 rbenv 메소드를 사용하여 Ruby를 설치 하는 것이 좋습니다 .
Ruby, 필요한 개발 패키지 및 몇 가지 일반적인 gem을 설치합니다.
[root@CentOS rdc]# yum install -y ruby.x86_64 ruby-devel.x86_64 ruby-
libs.x86_64 ruby-gem-json.x86_64 rubygem-rake.noarch
불행히도 우리는 다소 오래된 버전의 Ruby를 남겼습니다.
[root@CentOS rdc]# ruby -v
ruby 2.0.0p648 (2015-12-16) [x86_64-linux]
[root@CentOS rdc]#
Perl오랫동안 주변에있었습니다. 원래 텍스트 파일을 구문 분석하는 데 사용되는보고 언어로 설계되었습니다. 인기가 높아지면서 Perl은 강력한 스크립팅 언어에 필요한 모듈 지원 또는 CPAN, 소켓, 스레딩 및 기타 기능을 추가했습니다.
PHP, Python 또는 Ruby에 비해 Perl의 가장 큰 장점은 최소한의 번거 로움으로 작업을 수행 할 수 있다는 것입니다. Perl의이 철학이 항상 올바른 방식으로 작업을 수행한다는 의미는 아닙니다. 그러나 Linux에서 관리 작업의 경우 Perl은 스크립팅 언어의 선택으로 간주됩니다.
Python이나 Ruby에 비해 Perl의 장점은 다음과 같습니다.
강력한 텍스트 처리
Perl은 스크립트 작성을 빠르고 더럽게 만듭니다 (일반적으로 Perl 스크립트는 Python 또는 Ruby의 동등한 스크립트보다 수십 줄 더 짧습니다)
Perl은 무엇이든 할 수 있습니다 (거의)
Perl의 몇 가지 단점은 다음과 같습니다.
구문이 혼란 스러울 수 있습니다.
Perl의 코딩 스타일은 독특하고 공동 작업을 방해 할 수 있습니다.
Perl은 실제로 객체 지향적이지 않습니다.
일반적으로 Perl을 사용할 때 표준화 및 모범 사례에 대해 많은 생각을하지 않습니다.
Perl, Python 또는 PHP 사용 여부를 결정할 때 다음과 같은 질문을해야합니다.
- 이 응용 프로그램에 버전 관리가 필요합니까?
- 다른 사람이 코드를 수정해야합니까?
- 다른 사람들이이 응용 프로그램을 사용해야합니까?
- 이 애플리케이션이 다른 시스템이나 CPU 아키텍처에서 사용될 수 있습니까?
위의 모든 답변이 "아니오"인 경우 Perl은 좋은 선택이며 최종 결과 측면에서 속도를 높일 수 있습니다.
이에 대해 언급 했으므로 최신 버전의 Perl을 사용하도록 CentOS 서버를 구성 해 보겠습니다.
Perl을 설치하기 전에 Perl에 대한 지원을 이해해야합니다. 공식적으로 Perl은 마지막 두 안정 버전까지만 지원됩니다. 따라서 우리는 개발 환경을 CentOS 버전과 격리시키고 싶습니다.
격리 이유는 누군가가 Perl의 도구를 CentOS 커뮤니티에 릴리스하면 CentOS와 함께 제공되는 Perl에서 작동하도록 수정 될 가능성이 더 높기 때문입니다. 그러나 우리는 또한 개발 목적으로 최신 버전을 설치하고 싶습니다. Python과 마찬가지로 CentOS는 최첨단이 아닌 안정성에 중점을 둔 Perl을 제공합니다.
CentOS 7에서 현재 Perl 버전을 확인해 보겠습니다.
[root@CentOS]# perl -v
This is perl 5, version 16, subversion 3 (v5.16.3) built for x86_64-linux-thread-multi
현재 Perl 5.16.3을 실행하고 있습니다. 이 글을 쓰는 현재 최신 버전은 다음과 같습니다 : perl-5.24.0
코드에서 최신 Perl 모듈을 사용할 수 있도록 버전을 업그레이드하고 싶습니다. 다행히도 Perl 환경을 유지하고 Perl의 CentOS 버전을 격리 할 수있는 훌륭한 도구가 있습니다. 그것은이라고perlbrew.
Perl Brew를 설치합시다.
[root@CentOS]# curl -L https://install.perlbrew.pl | bash
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 170 100 170 0 0 396 0 --:--:-- --:--:-- --:--:-- 397
100 1247 100 1247 0 0 1929 0 --:--:-- --:--:-- --:--:-- 1929
이제 Perl Brew가 설치되었으므로 최신 버전의 Perl을위한 환경을 만들어 보겠습니다.
첫째, perlbrew 설치를 부트 스트랩하려면 현재 설치된 Perl 버전이 필요합니다. 따라서 CentOS 저장소에서 필요한 Perl 모듈을 가져 오겠습니다.
Note − 가능한 경우 항상 CentOS Perl 설치와 함께 CPAN 대신 CentOS Perl 모듈을 사용하려고합니다.
Step 1 − CentOS Perl Make :: Maker 모듈을 설치합니다.
[root@CentOS]# yum -y install perl-ExtUtils-MakeMaker.noarch
Step 2 − 최신 버전의 perl을 설치합니다.
[root@CentOS build]# source ~/perl5/perlbrew/etc/bashrc
[root@CentOS build]# perlbrew install -n -j4 --threads perl-5.24.1
Perl 설치를 위해 선택한 옵션은 다음과 같습니다.
n − 테스트 없음
j4 − 설치 루틴을 위해 4 개의 스레드를 병렬로 실행 (우리는 쿼드 코어 CPU를 사용하고 있음)
threads − Perl에 대한 스레딩 지원 활성화
설치가 성공적으로 수행 된 후 최신 Perl 환경으로 전환하겠습니다.
[root@CentOS]# ~/perl5/perlbrew/bin/perlbrew use perl-5.24.1
A sub-shell is launched with perl-5.24.1 as the activated perl. Run 'exit' to finish it.
[root@CentOS]# perl -v
This is perl 5, version 24, subversion 1 (v5.24.1) built for x86_64-linuxthread-multi
(with 1 registered patch, see perl -V for more detail)
Copyright 1987-2017, Larry Wall
Perl may be copied only under the terms of either the Artistic License or the GNU General
Public License, which may be found in the Perl 5 source kit.
Complete documentation for Perl, including FAQ lists, should be found on this system
using "man perl" or "perldoc perl". If you have access to the Internet, point your
browser at http://www.perl.org/, the Perl Home Page.
[root@CentOS]#
perlbrew 환경 내에서 실행되는 간단한 perl 스크립트 인쇄 perl 버전-
[root@CentOS]# cat ./ver.pl
#!/usr/bin/perl
print $^V . "\n";
[root@CentOS]# perl ./ver.pl
v5.24.1
[root@CentOS]#
일단 perl이 설치되면 perl brew의 cpanm으로 cpan 모듈을로드 할 수 있습니다.
[root@CentOS]# perl-brew install-cpanm
이제 cpanm 설치 프로그램을 사용하여 perl brew에서 현재 Perl 버전 5.24.1로 LWP 모듈을 만들어 보겠습니다.
Step 1 − 현재 Perl 버전의 컨텍스트로 전환하십시오.
[root@CentOS ~]# ~/perl5/perlbrew/bin/perlbrew use perl-5.24.1
perl-5.24.1이 활성화 된 perl로 하위 쉘이 시작됩니다. 완료하려면 '종료'를 실행하십시오.
[root@CentOS ~]#
Step 2 − LWP 사용자 에이전트 Perl 모듈을 설치합니다.
[root@CentOS ~]# ~/perl5/perlbrew/bin/cpanm -i LWP::UserAgent
Step 3 − 이제 새로운 CPAN 모듈로 Perl 환경을 테스트 해 보겠습니다.
[root@CentOS ~]# cat ./get_header.pl
#!/usr/bin/perl
use LWP;
my $browser = LWP::UserAgent->new(); my $response = $browser->get("http://www.slcc.edu/"); unless(!$response->is_success) {
print $response->header("Server");
}
[root@CentOS ~]# perl ./get_header.pl
Microsoft-IIS/8.5 [root@CentOS ~]#
거기 있습니다! Perl Brew는 perl 환경을 간단하게 격리 할 수 있으며 Perl에서 얻을 수있는 모범 사례로 간주 될 수 있습니다.
LDAP로 알려진 Light Weight Directory Access Protocol디렉토리에서 알려진 기업 내 X.500 서비스 컨테이너에 액세스하는 데 사용되는 프로토콜입니다. Windows Server 관리에 익숙한 사용자는 LDAP가 본질적으로 Active Directory와 매우 유사하다고 생각할 수 있습니다. Windows 워크 스테이션을 OpenLDAP CentOS 엔터프라이즈에 연결하는 데 널리 사용되는 개념이기도합니다. 다른 스펙트럼에서는 CentOS Linux 워크 스테이션이 리소스를 공유하고 Windows 도메인의 기본 기능에 참여할 수 있습니다.
CentOS에 Directory Server Agent, Directory System Agent 또는 DSA (이 두문자어는 모두 하나이며 동일 함)로 LDAP를 배포하는 것은 NDS와 함께 Directory Tree 구조를 사용하는 이전 Novell Netware 설치와 유사합니다.
LDAP의 간략한 역사
LDAP는 기본적으로 엔터프라이즈 리소스로 X.500 디렉터리에 액세스하는 효율적인 방법으로 만들어졌습니다. X.500과 LDAP는 모두 동일한 특성을 공유하며 LDAP 클라이언트가 일부 도우미를 사용하여 X.500 디렉토리에 액세스 할 수있을 정도로 유사합니다. LDAP에는 자체 디렉토리 서버도 있습니다.slapd. LDAP 와 DAP 의 주요 차이점 은 경량 버전이 TCP를 통해 작동하도록 설계 되었다는 것 입니다.
반면 DAP는 전체 OSI 모델을 사용합니다. 오늘날의 네트워크에서 인터넷, TCP / IP 및 이더넷의 출현으로 특정 레거시 컴퓨팅 모델 외부에서 DAP 및 기본 X.500 엔터프라이즈 디렉터리를 모두 사용하는 디렉터리 서비스 이식을 발견하는 경우는 거의 없습니다.
CentOS Linux 용 openldap과 함께 사용되는 주요 구성 요소는 다음과 같습니다.
openldap | LDAP 지원 라이브러리 |
---|---|
openldap 서버 | LDAP 서버 |
openldap 클라이언트 | LDAP 클라이언트 유틸리티 |
openldap-devel | OpenLDAP 용 개발 라이브러리 |
compay-openldap | OpenLDAP 공유 라이브러리 |
때리다 | OpenLDAP의 디렉토리 서버 데몬 |
slurpd | 엔터프라이즈 도메인에서 LDAP 복제에 사용 |
Note − 기업 이름을 지정할 때 다음을 사용하는 것이 가장 좋습니다. .localTLD. .net 또는 .com을 사용 하면 온라인 및 내부 도메인 인프라를 분리 할 때 문제가 발생할 수 있습니다. 회사 내부에서 외부 및 내부 작업 모두에 acme.com 을 사용하는 추가 작업을 상상해보십시오 . 따라서 acme.com 또는 acme.net 이라는 인터넷 리소스를 사용하는 것이 현명 할 수 있습니다 . 그런 다음 로컬 네트워킹 엔터프라이즈 리소스는 acme.local 로 표시 됩니다. 이것은 DNS 레코드 구성을 수반하지만 단순성, 유창함 및 보안으로 지불합니다.
CentOS에 Open LDAP 설치
YUM 에서 openldap, openldap-servers, openldap-clients 및 migrationstools를 설치합니다 .
[root@localhost]# yum -y install openldap openldap-servers openldap-clients
migration tools
Loaded plugins: fastestmirror, langpacks
updates
| 3.4 kB 00:00:00
updates/7/x86_64/primary_db
| 2.2 MB 00:00:05
Determining fastest mirrors
(1/2): extras/7/x86_64/primary_db
| 121 kB 00:00:01
(2/2): base/7/x86_64/primary_db
| 5.6 MB 00:00:16
Package openldap-2.4.40-13.el7.x86_64 already installed and latest version
Resolving Dependencies
--> Running transaction check
---> Package openldap-clients.x86_64 0:2.4.40-13.el7 will be installed
---> Package openldap-servers.x86_64 0:2.4.40-13.el7 will be installed
--> Finished Dependency Resolution
base/7/x86_64/group_gz
| 155 kB 00:00:00
Dependencies Resolved
===============================================================================
===============================================================================
Package Arch
Version Repository Size
===============================================================================
===============================================================================
Installing:
openldap-clients x86_64
2.4.40-13.el7 base 188 k
openldap-servers x86_64
2.4.40-13.el7 base 2.1 M
Transaction Summary
===============================================================================
===============================================================================
Install 2 Packages
Total download size: 2.3 M
Installed size: 5.3 M
Downloading packages:
Installed:
openldap-clients.x86_64 0:2.4.40-13.el7
openldap-servers.x86_64 0:2.4.40-13.el7
Complete!
[root@localhost]#
이제 slapd 서비스를 시작하고 활성화 해 보겠습니다.
[root@centos]# systemctl start slapd
[root@centos]# systemctl enable slapd
이 시점 에서 / etc / openldap 에 openldap 구조 가 있는지 확인합시다 .
root@localhost]# ls /etc/openldap/
certs check_password.conf ldap.conf schema slapd.d
[root@localhost]#
그런 다음 slapd 서비스가 실행 중인지 확인하십시오.
root@centos]# netstat -antup | grep slapd
tcp 0 0 0.0.0.0:389 0.0.0.0:* LISTEN 1641/slapd
tcp6 0 0 :::389 :::* LISTEN 1641/slapd
[root@centos]#
다음으로 Open LDAP 설치를 구성 해 보겠습니다 .
시스템 ldap 사용자가 생성 되었는지 확인하십시오 .
[root@localhost]# id ldap
uid=55(ldap) gid=55(ldap) groups=55(ldap)
[root@localhost]#
LDAP 자격 증명을 생성하십시오.
[root@localhost]# slappasswd
New password:
Re-enter new password:
{SSHA}20RSyjVv6S6r43DFPeJgASDLlLoSU8g.a10
[root@localhost]#
slappasswd의 출력을 저장해야합니다.
Open LDAP 구성
Step 1 − 도메인에 대한 LDAP를 구성하고 관리 사용자를 추가합니다.
먼저 openLDAP 환경을 설정하려고합니다. 다음은 ldapmodify 명령 과 함께 사용할 템플릿 입니다.
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=vmnet,dc=local
dn: olcDatabase = {2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=ldapadm,dc=vmnet,dc=local
dn: olcDatabase = {2}hdb,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: <output from slap
ldapmodify 명령을 사용하여 /etc/openldap/slapd.d/cn=config/olcDatabase = {1} monitor.ldif를 변경합니다.
[root@localhost]# ldapmodify -Y EXTERNAL -H ldapi:/// -f /home/rdc/Documents/db.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber = 0+uidNumber = 0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase = {2}hdb,cn=config"
modifying entry "olcDatabase = {2}hdb,cn=config"
modifying entry "olcDatabase = {2}hdb,cn=config"
[root@localhost cn=config]#
수정 된 LDAP 구성을 확인해 보겠습니다.
root@linux1 ~]# vi /etc/openldap/slapd.d/cn=config/olcDatabase={2}hdb.ldif
[root@centos]# cat /etc/openldap/slapd.d/cn\=config/olcDatabase\=\{2\}hdb.ldif
# AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify.
# CRC32 a163f14c
dn: olcDatabase = {2}hdb
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {2}hdb
olcDbDirectory: /var/lib/ldap
olcDbIndex: objectClass eq,pres
olcDbIndex: ou,cn,mail,surname,givenname eq,pres,sub
structuralObjectClass: olcHdbConfig
entryUUID: 1bd9aa2a-8516-1036-934b-f7eac1189139
creatorsName: cn=config
createTimestamp: 20170212022422Z
olcSuffix: dc=vmnet,dc=local
olcRootDN: cn=ldapadm,dc=vmnet,dc=local
olcRootPW:: e1NTSEF1bUVyb1VzZTRjc2dkYVdGaDY0T0k =
entryCSN: 20170215204423.726622Z#000000#000#000000
modifiersName: gidNumber = 0+uidNumber = 0,cn=peercred,cn=external,cn=auth
modifyTimestamp: 20170215204423Z
[root@centos]#
보시다시피 LDAP 엔터프라이즈 수정이 성공했습니다.
다음으로 OpenLDAP 용 자체 서명 SSL 인증서를 생성하려고합니다. 이렇게하면 엔터프라이즈 서버와 클라이언트 간의 통신이 보호됩니다.
Step 2 − OpenLDAP 용 자체 서명 인증서를 생성합니다.
우리는 사용 하려면 openssl을 자체 서명 된 SSL 인증서를 만들 수 있습니다. 다음 장으로 이동하십시오.Create LDAP SSL Certificate with opensslOpenLDAP와의 보안 통신에 대한 지침. 그런 다음 SSL 인증서가 구성되면 OpenLDAP 엔터프라이즈 구성을 완료합니다.
Step 3 − 인증서와 보안 통신을 사용하도록 OpenLDAP를 구성합니다.
다음 정보를 사용하여 vim 에서 certs.ldif 파일을 만듭니다.
dn: cn=config
changetype: modify
replace: olcTLSCertificateFile
olcTLSCertificateFile: /etc/openldap/certs/yourGeneratedCertFile.pem
dn: cn=config
changetype: modify
replace: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/openldap/certs/youGeneratedKeyFile.pem
그런 다음 다시 ldapmodify 명령을 사용하여 변경 사항을 OpenLDAP 구성에 병합합니다.
[root@centos rdc]# ldapmodify -Y EXTERNAL -H ldapi:/// -f certs.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber = 0+uidNumber = 0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "cn=config"
[root@centos]#
마지막으로 OpenLADP 구성을 테스트 해 보겠습니다.
[root@centos]# slaptest -u
config file testing succeeded
[root@centos]#
Step 4 − slapd 데이터베이스를 설정합니다.
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG &&
chown ldap:ldap /var/lib/ldap/*
OpenLDAP 스키마를 업데이트합니다.
cosine 및 nis LDAP 스키마를 추가합니다.
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif
마지막으로 엔터프라이즈 스키마를 만들고 현재 OpenLDAP 구성에 추가합니다.
다음은 vmnet이라는 도메인에 대한 것입니다. ldapadm 이라는 LDAP 관리자가있는 로컬 .
dn: dc=vmnet,dc=local
dc: vmnet
objectClass: top
objectClass: domain
dn: cn=ldapadm ,dc=vmnet,dc=local
objectClass: organizationalRole
cn: ldapadm
description: LDAP Manager
dn: ou = People,dc=vmnet,dc=local
objectClass: organizationalUnit
ou: People
dn: ou = Group,dc=vmnet,dc=local
objectClass: organizationalUnit
ou: Group
마지막으로 이것을 현재 OpenLDAP 스키마로 가져옵니다.
[root@centos]# ldapadd -x -W -D "cn=ldapadm,dc=vmnet,dc=local" -f ./base.ldif
Enter LDAP Password:
adding new entry "dc=vmnet,dc=local"
adding new entry "cn=ldapadm ,dc=vmnet,dc=local"
adding new entry "ou=People,dc=vmnet,dc=local"
adding new entry "ou=Group,dc=vmnet,dc=local"
[root@centos]#
Step 5 − OpenLDAP Enterprise 사용자를 설정합니다.
vim 또는 선호하는 텍스트 편집기를 열고 다음 형식을 복사하십시오. 이것은 "vmnet.local"LDAP 도메인의 "entacct"라는 사용자에 대해 설정됩니다.
dn: uid=entacct,ou=People,dc=vmnet,dc=local
objectClass: top
objectClass: account
objectClass: posixAccount
objectClass: shadowAccount
cn: entacct
uid: entacct
uidNumber: 9999
gidNumber: 100
homeDirectory: /home/enyacct
loginShell: /bin/bash
gecos: Enterprise User Account 001
userPassword: {crypt}x
shadowLastChange: 17058
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
이제 저장된 위의 파일을 OpenLdap 스키마로 가져옵니다.
[root@centos]# ldapadd -x -W -D "cn=ldapadm,dc=vmnet,dc=local" -f entuser.ldif
Enter LDAP Password:
adding new entry "uid=entacct,ou=People,dc=vmnet,dc=local"
[root@centos]#
사용자가 LDAP Enterprise에 액세스하기 전에 다음과 같이 암호를 할당해야합니다.
ldappasswd -s password123 -W -D "cn=ldapadm,dc=entacct,dc=local" -x "uid=entacct
,ou=People,dc=vmnet,dc=local"
-s 사용자의 비밀번호를 지정합니다.
-x 업데이트 된 비밀번호가 적용되는 사용자 이름입니다.
-D LDAP 스키마에 대해 인증하기위한 * 고유 이름 "입니다.
마지막으로 Enterprise 계정에 로그인하기 전에 OpenLDAP 항목을 확인하겠습니다 .
[root@centos rdc]# ldapsearch -x cn=entacct -b dc=vmnet,dc=local
# extended LDIF
#
# LDAPv3
# base <dc=vmnet,dc=local> with scope subtree
# filter: cn=entacct
# requesting: ALL
#
# entacct, People, vmnet.local
dn: uid=entacct,ou=People,dc=vmnet,dc=local
objectClass: top
objectClass: account
objectClass: posixAccount
objectClass: shadowAccount
cn: entacct
uid: entacct
uidNumber: 9999
gidNumber: 100
homeDirectory: /home/enyacct
loginShell: /bin/bash
gecos: Enterprise User Account 001
userPassword:: e2NyeXB0fXg=
shadowLastChange: 17058
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
/ etc / passwd 및 / etc / groups 와 같은 것을 OpenLDAP 인증으로 변환하려면 마이그레이션 도구를 사용해야합니다. 이는 migrationtools 패키지에 포함되어 있습니다 . 그런 다음 / usr / share / migrationtools에 설치 합니다 .
[root@centos openldap-servers]# ls -l /usr/share/migrationtools/
total 128
-rwxr-xr-x. 1 root root 2652 Jun 9 2014 migrate_aliases.pl
-rwxr-xr-x. 1 root root 2950 Jun 9 2014 migrate_all_netinfo_offline.sh
-rwxr-xr-x. 1 root root 2946 Jun 9 2014 migrate_all_netinfo_online.sh
-rwxr-xr-x. 1 root root 3011 Jun 9 2014 migrate_all_nis_offline.sh
-rwxr-xr-x. 1 root root 3006 Jun 9 2014 migrate_all_nis_online.sh
-rwxr-xr-x. 1 root root 3164 Jun 9 2014 migrate_all_nisplus_offline.sh
-rwxr-xr-x. 1 root root 3146 Jun 9 2014 migrate_all_nisplus_online.sh
-rwxr-xr-x. 1 root root 5267 Jun 9 2014 migrate_all_offline.sh
-rwxr-xr-x. 1 root root 7468 Jun 9 2014 migrate_all_online.sh
-rwxr-xr-x. 1 root root 3278 Jun 9 2014 migrate_automount.pl
-rwxr-xr-x. 1 root root 2608 Jun 9 2014 migrate_base.pl
Step 6 − 마지막으로, 요청을 처리 할 수 있도록 slapd 서비스에 대한 액세스를 허용해야합니다.
firewall-cmd --permanent --add-service=ldap
firewall-cmd --reload
LDAP 클라이언트 액세스 구성
LDAP 클라이언트 액세스를 구성하려면 클라이언트에 openldap, open-ldap 클라이언트 및 nss_ldap 패키지가 필요합니다.
클라이언트 시스템에 대한 LDAP 인증 구성은 조금 더 쉽습니다.
Step 1 − 종속 패키지 설치 −
# yum install -y openldap-clients nss-pam-ldapd
Step 2− authconfig로 LDAP 인증을 구성합니다 .
authconfig --enableldap --enableldapauth --ldapserver=10.25.0.1 --
ldapbasedn="dc=vmnet,dc=local" --enablemkhomedir --update
Step 3 − nslcd 서비스를 다시 시작합니다.
systemctl restart nslcd
TLS 및 SSL 배경
TLS는 SSL을 진행하는 소켓 계층 보안의 새로운 표준입니다. TLS는 SSL을 발전시키는 다른 보안 및 프로토콜 래퍼 기능과 함께 더 나은 암호화 표준을 제공합니다. 종종 TLS와 SSL이라는 용어는 같은 의미로 사용됩니다. 그러나 전문 CentOS 관리자로서 각각을 구분하는 차이점과 기록을 기록하는 것이 중요합니다.
SSL 은 버전 3.0까지 올라갑니다. SSL은 Netscape에서 산업 표준으로 개발 및 홍보되었습니다. Netscape가 AOL (90 년대에는 America Online으로 알려진 ISP)에 인수 된 후 AOL은 SSL 보안 향상에 필요한 변경 사항을 실제로 홍보하지 않았습니다.
버전 3.1에서 SSL 기술은 개방형 시스템 표준으로 이동하고 TLS 로 변경되었습니다 . SSL 에 대한 저작권 은 여전히 AOL이 소유하고 있기 때문에 새로운 용어가 만들어졌습니다.TLS - Transport Layer Security. 따라서 TLS 가 실제로 SSL 과 다르다는 점 을 인식하는 것이 중요 합니다 . 특히 오래된 SSL 기술에는 알려진 보안 문제가 있으며 일부는 오늘날 사용되지 않는 것으로 간주됩니다.
Note−이 자습서 에서는 기술 3.1 이상을 말할 때 TLS 라는 용어를 사용합니다 . 그런 다음 SSL 기술 3.0 이하에 특정한 주석을 달 때 SSL.
SSL vs TLS 버전 관리
다음 표는 TLS 및 SSL 버전 관리가 서로 관련되는 방식을 보여줍니다. 몇 사람이 SSL 버전 3.2에 대해 말하는 것을 들었습니다 . 그러나 그들은 아마도 블로그를 읽음으로써 용어를 얻었을 것입니다. 전문 관리자로서 우리는 항상 표준 용어를 사용하려고합니다. 따라서 SSL 은 과거 기술에 대한 참조가되어야합니다. 간단한 것들이 CentOS 구직자를 노련한 CS 전공처럼 보이게 만들 수 있습니다.
TLS | SSL |
---|---|
- | 3.0 |
1.0 | 3.1 |
1.1 | 3.2 |
1.2 | 3.3 |
TLS 는 오늘날 인터넷 사용자에게 중요한 두 가지 주요 기능을 수행합니다. 하나는 당사자가 누구인지 확인합니다.authentication. 두, 그것은 제공합니다end-to-end encryption 이 기본 기능 (ftp, http, 이메일 프로토콜 등)이없는 상위 레벨 프로토콜의 전송 계층에서.
첫 번째 는 당사자 가 누구 이며 종단 간 암호화로서 보안에 중요한지 확인합니다 . 소비자가 결제 권한이없는 웹 사이트에 암호화 된 연결을 가지고있는 경우 금융 데이터는 여전히 위험합니다. 이것은 모든 피싱 사이트가 가지지 못하는 것입니다.a properly signed TLS certificate verifying website operators are who they claim to be from a trusted CA.
적절하게 서명 된 인증서가없는 문제를 해결하는 방법은 두 가지뿐입니다. 사용자가 자체 서명 된 인증서에 대해 웹 브라우저의 신뢰를 허용하도록 속이거나 사용자가 기술에 정통하지 않고 신뢰할 수있는 인증서의 중요성을 알지 않기를 바랍니다. 권한 (또는 CA).
이 자습서에서는 자체 서명 된 인증서를 사용합니다. 즉,이 인증서에 웹 사이트를 방문하는 모든 웹 브라우저에서 신뢰할 수있는 상태를 명시 적으로 제공하지 않으면 사용자가 사이트를 방문하지 못하도록하는 오류가 표시됩니다. 그런 다음 자체 서명 된 인증서로 사이트에 액세스하기 전에 사용자가 몇 가지 작업을 수행하도록합니다. 보안을 위해 이것은 좋은 것임을 기억하십시오.
openssl 설치 및 구성
openssl 은 TLS의 오픈 소스 구현을위한 표준입니다. openssl 은 Linux, BSD 배포, OS X와 같은 시스템에서 사용되며 Windows도 지원합니다.
openssl은 전송 계층 보안을 제공 하고 개발자를위한 인증 및 종단 간 암호화 의 세부 프로그래밍을 추상화하므로 중요합니다 . 이것이 바로 TLS를 사용하는 거의 모든 단일 오픈 소스 애플리케이션에서 openssl이 사용되는 이유입니다. 또한 모든 최신 버전의 Linux에 기본적으로 설치됩니다.
기본적으로 openssl 은 버전 5 이상에서 CentOS에 설치되어야합니다. 확실하게 YUM을 통해 openssl 을 설치해 보겠습니다 . YUM은 패키지가 이미 설치되어 있는지 알려줄만큼 지능적이므로 설치 만 실행하십시오. 호환성을 위해 이전 버전의 CentOS를 실행중인 경우 yum -y 설치를 수행하면 최근의 심장 출혈 취약점에 대해 openssl이 업데이트됩니다.
설치 프로그램을 실행할 때 실제로 openssl 업데이트가있는 것으로 나타났습니다 .
[root@centos]# yum -y install openssl
Resolving Dependencies
--> Running transaction check
---> Package openssl.x86_64 1:1.0.1e-60.el7 will be updated
---> Package openssl.x86_64 1:1.0.1e-60.el7_3.1 will be an update
--> Processing Dependency: openssl-libs(x86-64) = 1:1.0.1e-60.el7_3.1 for
package: 1:openssl-1.0.1e-60.el7_3.1.x86_64
--> Running transaction check
---> Package openssl-libs.x86_64 1:1.0.1e-60.el7 will be updated
---> Package openssl-libs.x86_64 1:1.0.1e-60.el7_3.1 will be an update
--> Finished Dependency Resolution
Dependencies Resolved
===============================================================================
===============================================================================
Package Arch
Version Repository Size
===============================================================================
===============================================================================
Updating:
openssl x86_64
1:1.0.1e-60.el7_3.1 updates 713 k
Updating for dependencies:
OpenLDAP 용 자체 서명 된 인증서 만들기
이것은 이전 OpenLDAP 설치에 대해 자체 서명을 생성하는 방법 입니다.
자체 서명 된 OpenLDAP 인증서를 생성합니다.
openssl req -new -x509 -nodes -out /etc/openldap/certs/myldaplocal.pem -keyout
/etc/openldap/certs/myldaplocal.pem -days 365
[root@centos]# openssl req -new -x509 -nodes -out /etc/openldap/certs/vmnet.pem
-keyout /etc/openldap/certs/vmnet.pem -days 365
Generating a 2048 bit RSA private key
.............................................+++
................................................+++
writing new private key to '/etc/openldap/certs/vmnet.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:US
State or Province Name (full name) []:Califonia
Locality Name (eg, city) [Default City]:LA
Organization Name (eg, company) [Default Company Ltd]:vmnet
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:centos
Email Address []:[email protected]
[root@centos]#
이제 OpenLDAP 인증서를 / etc / openldap / certs /에 배치해야합니다.
[root@centos]# ls /etc/openldap/certs/*.pem
/etc/openldap/certs/vmnetcert.pem /etc/openldap/certs/vmnetkey.pem
[root@centos]#
보시다시피 / etc / openldap / certs / 디렉토리에 인증서와 키가 모두 설치되어 있습니다. 마지막으로, 현재 루트 사용자가 소유하고 있으므로 각각에 대한 권한을 변경해야합니다.
[root@centos]# chown -R ldap:ldap /etc/openldap/certs/*.pem
[root@centos]# ls -ld /etc/openldap/certs/*.pem
-rw-r--r--. 1 ldap ldap 1395 Feb 20 10:00 /etc/openldap/certs/vmnetcert.pem
-rw-r--r--. 1 ldap ldap 1704 Feb 20 10:00 /etc/openldap/certs/vmnetkey.pem
[root@centos]#
Apache 웹 서버용 자체 서명 된 인증서 생성
이 튜토리얼에서는 Apache가 이미 설치되어 있다고 가정합니다. 다른 자습서 (CentOS 방화벽 구성)에서 Apache를 설치했으며 향후 자습서를 위해 Apache의 고급 설치로 이동합니다. 따라서 Apache를 아직 설치하지 않았다면 다음 단계를 따르십시오.
Apache HTTPd는 다음 단계를 사용하여 설치할 수 있습니다.
Step 1 − Apache httpd 서버용 mod_ssl을 설치합니다.
먼저 mod_ssl로 Apache를 구성해야합니다. YUM 패키지 관리자를 사용하면 매우 간단합니다.
[root@centos]# yum -y install mod_ssl
그런 다음 Apache 데몬을 다시로드하여 Apache가 새 구성을 사용하는지 확인합니다.
[root@centos]# systemctl reload httpd
이 시점에서 Apache는 로컬 호스트에서 TLS 연결을 지원하도록 구성됩니다.
Step 2 − 자체 서명 된 SSL 인증서를 생성합니다.
먼저 개인 TLS 키 디렉터리를 구성하겠습니다.
[root@centos]# mkdir /etc/ssl/private
[root@centos]# chmod 700 /etc/ssl/private/
Note− 루트 만이 디렉토리에 대한 읽기 / 쓰기 권한을 가지고 있는지 확인하십시오. 전 세계 읽기 / 쓰기 액세스를 통해 개인 키를 사용하여 스니핑 된 트래픽을 해독 할 수 있습니다.
인증서 및 키 파일 생성.
[root@centos]# sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout
/etc/ssl/private/self-gen-apache.key -out /etc/ssl/certs/self-sign-apache.crt
Generating a 2048 bit RSA private key
..........+++
....+++
-----
Country Name (2 letter code) [XX]:US
State or Province Name (full name) []:xx
Locality Name (eg, city) [Default City]:xxxx
Organization Name (eg, company) [Default Company Ltd]:VMNET
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:centos.vmnet.local
Email Address []:
[root@centos]#
Note − 등록 된 도메인 이름이없는 경우 서버의 공인 IP 주소를 사용할 수 있습니다.
인증서를 살펴 보겠습니다.
[root@centos]# openssl x509 -in self-sign-apache.crt -text -noout
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 17620849408802622302 (0xf489d52d94550b5e)
Signature Algorithm: sha256WithRSAEncryption
Issuer: C=US, ST=UT, L=xxxx, O=VMNET, CN=centos.vmnet.local
Validity
Not Before: Feb 24 07:07:55 2017 GMT
Not After : Feb 24 07:07:55 2018 GMT
Subject: C=US, ST=UT, L=xxxx, O=VMNET, CN=centos.vmnet.local
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
Modulus:
00:c1:74:3e:fc:03:ca:06:95:8d:3a:0b:7e:1a:56:
f3:8d:de:c4:7e:ee:f9:fa:79:82:bf:db:a9:6d:2a:
57:e5:4c:31:83:cf:92:c4:e7:16:57:59:02:9e:38:
47:00:cd:b8:31:b8:34:55:1c:a3:5d:cd:b4:8c:b0:
66:0c:0c:81:8b:7e:65:26:50:9d:b7:ab:78:95:a5:
31:5e:87:81:cd:43:fc:4d:00:47:5e:06:d0:cb:71:
9b:2a:ab:f0:90:ce:81:45:0d:ae:a8:84:80:c5:0e:
79:8a:c1:9b:f4:38:5d:9e:94:4e:3a:3f:bd:cc:89:
e5:96:4a:44:f5:3d:13:20:3d:6a:c6:4d:91:be:aa:
ef:2e:d5:81:ea:82:c6:09:4f:40:74:c1:b1:37:6c:
ff:50:08:dc:c8:f0:67:75:12:ab:cd:8d:3e:7b:59:
e0:83:64:5d:0c:ab:93:e2:1c:78:f0:f4:80:9e:42:
7d:49:57:71:a2:96:c6:b8:44:16:93:6c:62:87:0f:
5c:fe:df:29:89:03:6e:e5:6d:db:0a:65:b2:5e:1d:
c8:07:3d:8a:f0:6c:7f:f3:b9:32:b4:97:f6:71:81:
6b:97:e3:08:bd:d6:f8:19:40:f1:15:7e:f2:fd:a5:
12:24:08:39:fa:b6:cc:69:4e:53:1d:7e:9a:be:4b:
다음은 openssl 명령 과 함께 사용한 각 옵션에 대한 설명입니다.
명령 | 동작 |
---|---|
req -X509 | 키 관리를 위해 X.509 CSR 관리 PKI 표준을 사용합니다. |
-노드 | 암호로 인증서를 보호하지 마십시오. Apache는 암호를 중단하지 않고 인증서를 사용할 수 있어야합니다. |
-2555 일 | 인증서의 유효 기간을 7 년 또는 2555 일로 알려줍니다. 필요에 따라 기간을 조정할 수 있습니다. |
-newkey rsa : 2048 | 2048 비트 길이의 RSA를 사용하여 키와 인증서를 모두 생성하도록 지정되었습니다. |
다음으로 클라이언트와 PFS를 협상하기위한 Diffie-Heliman 그룹을 생성하려고합니다.
[centos#] openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
이 작업은 5 ~ 15 분 정도 소요됩니다.
Perfect Forward Secrecy− 개인 키가 손상된 경우 세션 데이터를 보호하는 데 사용됩니다. 이렇게하면 각 세션에 대해 고유 한 클라이언트와 서버간에 사용되는 키가 생성됩니다.
이제 Perfect Forward Secrecy 구성을 인증서에 추가하십시오.
[root@centos]# cat /etc/ssl/certs/dhparam.pem | tee -a /etc/ssl/certs/self-sign-apache.crt
키 및 인증서 파일을 사용하도록 Apache 구성
우리는 변경 만드는 것입니다 /etc/httpd/conf.d/ssl.conf을 -
ssl.conf를 다음과 같이 변경 합니다 . 그러나 그렇게하기 전에 원본 파일을 백업해야합니다. vi 또는 emcas 와 같은 고급 텍스트 편집기에서 프로덕션 서버를 변경할 때 편집하기 전에 항상 구성 파일을 백업하는 것이 좋습니다.
[root@centos]# cp /etc/httpd/conf.d/ssl.conf ~/
이제 ssl.conf의 잘 작동하는 복사본을 홈 폴더의 루트에 복사 한 후 편집을 계속하겠습니다.
- Locate
- 다음과 같이 DocumentRoot와 ServerName을 모두 편집하십시오.
\\# General setup for the virtual host, inherited from global configuration
DocumentRoot "/var/www/html"
ServerName centos.vmnet.local:443
DocumentRoot이것은 기본 아파치 디렉토리의 경로입니다. 이 폴더에는 웹 서버 또는 사이트의 기본 페이지를 요청하는 HTTP 요청을 표시하는 기본 페이지가 있어야합니다.
ServerName는 서버의 IP 주소 또는 호스트 이름이 될 수있는 서버 이름입니다. TLS의 경우 호스트 이름으로 인증서를 만드는 것이 가장 좋습니다. OpenLdap 자습서에서 로컬 엔터프라이즈 도메인 vmnet.local 에 centos의 호스트 이름을 만들었습니다.
이제 다음 줄에 주석을 달고 싶습니다.
SSLProtocol
# SSL Protocol support:
# List the enable protocol levels with which clients will be able to
# connect. Disable SSLv2 access by default:
~~~~> #SSLProtocol all -SSLv2
# SSL Cipher Suite:
# List the ciphers that the client is permitted to negotiate.
# See the mod_ssl documentation for a complete list.
~~~~> #SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SEED:!IDEA
그런 다음 Apache에 인증서와 개인 / 공개 키 쌍을 찾을 수있는 위치를 알려줍니다.
자체 서명 된 인증서 파일의 경로 지정
# Server Certificate:
# Point SSLCertificateFile at a PEM encoded certificate. If
# the certificate is encrypted, then you will be prompted for a
# pass phrase. Note that a kill -HUP will prompt again. A new
# certificate can be generated using the genkey(1) command.
~~~~> SSLCertificateFile /etc/ssl/certs/self-sign-apache.crt
specify path to our private key file
# Server Private Key:
# If the key is not combined with the certificate, use this
# directive to point at the key file. Keep in mind that if
# you've both a RSA and a DSA private key you can configure
# both in parallel (to also allow the use of DSA ciphers, etc.)
~~~~> SSLCertificateKeyFile /etc/ssl/private/self-gen-apache.key
마지막으로 포트 443을 통해 https에 대한 인바운드 연결을 허용해야합니다 .
이 장에서는 Apache HTTP Server가 등장한 배경에 대해 조금 배우고 CentOS Linux 7에 최신 안정 버전을 설치합니다.
Apache WebServer에 대한 간략한 역사
Apache는 오랫동안 사용되어 온 웹 서버입니다. 사실, 거의 http 자체가 존재하는 한!
Apache는 NCSA라고도하는 National Center for Supercomputing Applications에서 다소 작은 프로젝트로 시작했습니다. 90 년대 중반에 "httpd"는 인터넷에서 가장 인기있는 웹 서버 플랫폼으로 시장 점유율의 약 90 % 이상을 차지했습니다.
현재로서는 단순한 프로젝트였습니다. 웹 마스터로 알려진 숙련 된 IT 직원은 웹 서버 플랫폼 및 웹 서버 소프트웨어 유지 관리와 프런트 엔드 및 백 엔드 사이트 개발을 담당했습니다. httpd의 핵심은 플러그인 또는 확장으로 알려진 사용자 정의 모듈을 사용하는 기능이었습니다. 웹 마스터는 또한 핵심 서버 소프트웨어에 패치를 작성할 수있을만큼 숙련되었습니다.
90 년대 중반에 httpd의 수석 개발자이자 프로젝트 관리자가 NCSA를 떠나 다른 일을했습니다. 이로 인해 가장 인기있는 웹 데몬은 정체 상태에있었습니다.
httpd의 사용이 너무나 널리 퍼 졌기 때문에 숙련 된 httpd 웹 마스터 그룹이 httpd의 미래를 요구하는 정상 회담을 요청했습니다. 현재 안정적인 릴리스에 최상의 확장 및 패치를 조정하고 적용하기로 결정했습니다. 그런 다음 현재 http 서버의 할아버지가 탄생하고 Apache HTTP Server라는 이름을 붙였습니다.
Little Known Historical Fact− 아파치는 아메리카 원주민 전사 부족의 이름을 따서 명명되지 않았습니다. 사실 그것은 많은 재능있는 컴퓨터 과학자들의 많은 수정 (또는 패치)으로 만들어졌습니다.patchy 또는 Apache.
CentOS Linux 7에 현재 안정적인 버전 설치
Step 1 − yum을 통해 httpd를 설치합니다.
yum -y install httpd
이 시점에서 Apache HTTP Server는 yum을 통해 설치됩니다.
Step 2 − httpd 필요에 따라 httpd.conf 파일을 편집하십시오.
기본 Apache 설치에서 Apache의 구성 파일 이름은 httpd.conf 이고 / etc / httpd /에 있습니다. 이제 vim 에서 열어 보겠습니다 .
의 처음 몇 줄 을 httpd.conf 에서 열린 정력 -
#
# This is the main Apache HTTP server configuration file. It contains the
# configuration directives that give the server its instructions.
# See <URL:http://httpd.apache.org/docs/2.4/> for detailed information.
# In particular, see
# <URL:http://httpd.apache.org/docs/2.4/mod/directives.html>
# for a discussion of each configuration directive.
CentOS 설치가 http 포트 80에서 http 요청을 처리 할 수 있도록 다음과 같이 변경합니다.
청취 호스트 및 포트
# Listen: Allows you to bind Apache to specific IP addresses and/or
# ports, instead of the default. See also the <VirtualHost>
# directive.
#
# Change this to Listen on specific IP addresses as shown below to
# prevent Apache from glomming onto all bound IP addresses.
#
#Listen 12.34.56.78:80
Listen 80
여기에서 특정 포트 또는 IP 주소를 수신하도록 Apache를 변경합니다. 예를 들어, 8080과 같은 대체 포트에서 httpd 서비스를 실행하려는 경우 또는 별도의 IP 주소를 사용하여 여러 인터페이스로 구성된 웹 서버가있는 경우입니다.
들리다
Apache가 모든 수신 데몬을 모든 IP 주소에 연결하지 못하도록합니다. 이는 IPv6 또는 IPv4 트래픽 만 지정하는 것을 중지하는 데 유용합니다. 또는 멀티 홈 호스트의 모든 네트워크 인터페이스에 바인딩 할 수도 있습니다.
#
# Listen: Allows you to bind Apache to specific IP addresses and/or
# ports, instead of the default. See also the <VirtualHost>
# directive.
#
# Change this to Listen on specific IP addresses as shown below to
# prevent Apache from glomming onto all bound IP addresses.
#
Listen 10.0.0.25:80
#Listen 80
DocumentRoot
"문서 루트"는 Apache가 서버를 방문 할 때 요청을 처리 할 색인 파일을 찾는 기본 디렉토리입니다. http://www.yoursite.com/ 문서 루트에서 색인 파일을 검색하고 제공합니다.
#
# DocumentRoot: The directory out of which you will serve your
# documents. By default, all requests are taken from this directory, but
# symbolic links and aliases may be used to point to other locations.
#
DocumentRoot "/var/www/html"
Step 3 − httpd 서비스를 시작하고 활성화합니다.
[root@centos rdc]# systemctl start httpd && systemctl reload httpd
[root@centos rdc]#
Step 4 − 포트 80 요청에 대한 액세스를 허용하도록 방화벽을 구성합니다.
[root@centos]# firewall-cmd --add-service=http --permanent
Maria DB와 함께 사용하기 위해 CentOS를 구성 할 때 간단히 언급했듯이 CentOS 7 yum 저장소 에는 네이티브 MySQL 패키지가 없습니다 . 이를 설명하기 위해 MySQL 호스트 저장소를 추가해야합니다.
CentOS Linux의 MariaDB 대 MySQL
한 가지 주목할 점은 MySQL에는 MariaDB와 다른 기본 종속성 집합이 필요하다는 것입니다. 또한 MySQL을 사용하면 CentOS의 개념과 철학, 즉 최대 안정성을 위해 설계된 프로덕션 패키지가 깨집니다.
따라서 Maria 또는 MySQL을 사용할지 결정할 때 두 가지 옵션을 고려해야합니다. 현재 DB Schema가 Maria와 작동합니까? Maria보다 MySQL을 설치하면 어떤 이점이 있습니까?
Maria 구성 요소는 MySQL 구조에 100 % 투명하며 더 나은 라이선스로 일부 효율성이 추가됩니다. 설득력있는 이유가없는 한 CentOS에서 MariaDB를 사용하도록 구성하는 것이 좋습니다.
CentOS에서 Maria를 선호하는 가장 큰 이유는 다음과 같습니다.
대부분의 사람들은 MariaDB를 사용할 것입니다. 문제가 발생하면 Maria에 대해 더 많은 도움을받을 수 있습니다.
CentOS는 Maria와 함께 실행되도록 설계되었습니다. 따라서 Maria는 더 나은 안정성을 제공 할 것입니다.
Maria는 공식적으로 CentOS를 지원합니다.
MySQL 저장소 다운로드 및 추가
다음에서 MySQL 저장소를 다운로드하여 설치하고 싶습니다.
http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
Step 1 − 리포지토리를 다운로드합니다.
저장소는 간편한 설치를 위해 rpm 패키지로 편리하게 패키지로 제공됩니다. wget 으로 다운로드 할 수 있습니다 -
[root@centos]# wget http://repo.mysql.com/mysql-community-release-el75.noarch.rpm
--2017-02-26 03:18:36-- http://repo.mysql.com/mysql-community-release-el75.noarch.rpm
Resolving repo.mysql.com (repo.mysql.com)... 104.86.98.130
Step 2 − YUM에서 MySQL을 설치합니다.
우리는 이제 사용할 수 있습니다 yum을 설치하는 패키지 관리자를 MySQL의 -
[root@centos]# yum -y install mysql-server
Step 3 − MySQL 데몬 서비스를 시작하고 활성화합니다.
[root@centos]# systemctl start mysql
[root@centos]# systemctl enable mysql
Step 4 − MySQL 서비스가 실행되고 있는지 확인하십시오.
[root@centos]# netstat -antup | grep 3306
tcp6 0 0 :::3306 :::* LISTEN 6572/mysqld
[root@centos]#
참조 : 방화벽 규칙은 허용되지 않습니다. MySQL을 사용하도록 구성하는 것이 일반적입니다.Unix Domain Sockets. 이를 통해 LAMP 스택의 웹 서버 만 로컬에서 MySQL 데이터베이스에 액세스하여 데이터베이스 소프트웨어에서 공격 벡터의 완전한 차원을 취할 수 있습니다.
CentOS 7 서버에서 이메일을 보내려면 최신 MTA (메일 전송 에이전트)를 구성하기위한 설정이 필요합니다. Mail Transfer Agent는 SMTP를 통해 시스템 사용자 또는 회사 인터넷 도메인에 대한 아웃 바운드 메일을 보내는 데몬입니다.
이 튜토리얼은 로컬 사용을 위해 데몬을 설정하는 과정만을 가르칩니다. 비즈니스 운영을위한 MTA 설정을위한 고급 구성에 대해서는 자세히 설명하지 않습니다. 이는 DNS, 블랙리스트에 포함되지 않은 정적 라우팅 가능 IP 주소 가져 오기, 고급 보안 및 서비스 설정 구성을 포함하되 이에 국한되지 않는 많은 기술의 조합입니다. 간단히 말해서이 튜토리얼은 기본 구성에 익숙해지기위한 것입니다. 인터넷 연결 호스트의 MTA 구성에는이 자습서를 사용하지 마십시오.
보안과 관리의 용이성에 모두 초점을 맞추면서 우리는 Postfix이 튜토리얼의 MTA로. 이전 버전의 CentOS에 설치된 기본 MTA는 Sendmail 입니다.Sendmail훌륭한 MTA입니다. 그러나 저자의 겸손한 의견 중 Postfix는 MTA에 대한 다음 메모를 처리 할 때 최적의 위치를 차지합니다. 최신 버전의 CentOS에서 Postfix는 기본 MTA로 Sendmail을 대체했습니다.
Postfix는 널리 사용되고 잘 문서화 된 MTA입니다. 그것은 적극적으로 유지되고 개발됩니다. 최소한의 구성을 염두에두고 (이는 이메일 일뿐) 시스템 리소스를 효율적으로 사용할 수 있습니다 (다시 말하지만 이메일 일뿐입니다).
Step 1 − YUM 패키지 관리자에서 Postfix를 설치합니다.
[root@centos]# yum -y install postfix
Step 2 − Postfix 구성 파일을 구성합니다.
Postfix 구성 파일은 다음 위치에 있습니다. /etc/postfix/main.cf
단순 Postfix 구성에서는 특정 호스트에 대해 호스트 이름, 도메인, 오리진, inet_interfaces 및 대상을 구성해야합니다.
Configure the hostname− 호스트 이름은 Postfix 호스트의 정규화 된 도메인 이름입니다. OpenLDAP 장에서 CentOS 상자의 이름을 vmnet.local 도메인의 centos로 지정했습니다 . 이 장에서는 그것에 대해 고수합시다.
# The myhostname parameter specifies the internet hostname of this
# mail system. The default is to use the fully-qualified domain name
# from gethostname(). $myhostname is used as a default value for many
# other configuration parameters.
#
myhostname = centos.vmnet.local
Configure the domain− 위에서 언급 했듯이이 자습서에서 사용할 도메인은 vmnet.local입니다.
# The mydomain parameter specifies the local internet domain name.
# The default is to use $myhostname minus the first component. # $mydomain is used as a default value for many other configuration
# parameters.
#
mydomain = vmnet.local
Configure the origin − 단일 서버 및 도메인 설정의 경우 다음 섹션의 주석 처리를 제거하고 기본 Postfix 변수를 그대로두면됩니다.
# SENDING MAIL
#
# The myorigin parameter specifies the domain that locally-posted
# mail appears to come from. The default is to append $myhostname, # which is fine for small sites. If you run a domain with multiple # machines, you should (1) change this to $mydomain and (2) set up
# a domain-wide alias database that aliases each user to
# [email protected].
#
# For the sake of consistency between sender and recipient addresses,
# myorigin also specifies the default domain name that is appended
# to recipient addresses that have no @domain part.
#
myorigin = $myhostname myorigin = $mydomain
Configure the network interfaces− Postfix는 단일 네트워크 인터페이스와 해당 인터페이스와 관련된 모든 프로토콜 및 IP 주소에서 수신 대기합니다. 이것은 Postfix에 대해 활성화 된 기본 설정을 그대로두면됩니다.
# The inet_interfaces parameter specifies the network interface
# addresses that this mail system receives mail on. By default,
# the software claims all active interfaces on the machine. The
# parameter also controls delivery of mail to user@[ip.address].
#
# See also the proxy_interfaces parameter, for network addresses that
# are forwarded to us via a proxy or network address translator.
#
# Note: you need to stop/start Postfix when this parameter changes.
#
#inet_interfaces = all
#inet_interfaces = $myhostname #inet_interfaces = $myhostname, localhost
#inet_interfaces = localhost
# Enable IPv4, and IPv6 if supported
inet_protocols = all
Step 3 − Postfix에 대한 SASL 지원을 구성합니다.
SASL 인증 지원이 없으면 Postfix는 로컬 사용자의 이메일 전송 만 허용합니다. 또는 사용자가 로컬 도메인에서 이메일을 보낼 때 릴레이 거부 오류가 발생합니다.
Note − SASL 또는 Simple Application Security Layer Framework다른 응용 프로그램 계층 프로토콜 사이에서 다른 기술을 지원하는 인증을 위해 설계된 프레임 워크입니다. 인증 메커니즘을 응용 프로그램 계층 프로토콜에 맡기는 대신 SASL 개발자 (및 소비자)는 편의성 또는 더 안전한 인증 (보안 서비스에 대한 액세스에 대해 말할 때)이 내장되어 있지 않을 수있는 더 높은 수준의 프로토콜을 위해 현재 인증 프로토콜을 활용합니다.
"cyrus-sasl * 패키지 설치
[root@centos]# yum -y install cyrus-sasl
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: repos.forethought.net
* extras: repos.dfw.quadranet.com
* updates: mirrors.tummy.com
Package cyrus-sasl-2.1.26-20.el7_2.x86_64 already installed and latest version
Nothing to do
SASL 인증을 위해 /etc/postfix/main.cf 구성
smtpd_sasl_auth_enable = yes
smtpd_recipient_restrictions =
permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination
smtpd_sasl_security_options = noanonymous
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
main.conf의 내 SASL 옵션
##Configure SASL Options Entries:
smtpd_sasl_auth_enable = yes
smptd_recipient_restrictions =
permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination
smtp_sasl_type = dovecot
smtp_sasl_path = private/auth/etc
Step 4 − 들어오는 SMTP 서비스를 허용하도록 FirewallD를 구성합니다.
[root@centos]# firewall-cmd --permanent --add-service=smtp
success
[root@centos]# firewall-cmd --reload
success
[root@centos]#
이제 CentOS 호스트가 포트 25 (SMTP)의 요청을 허용하고 이에 응답하는지 확인하겠습니다.
Nmap scan report for 172.16.223.132
Host is up (0.00035s latency).
Not shown: 993 filtered ports
PORT STATE SERVICE
20/tcp closed ftp-data
21/tcp open ftp
22/tcp open ssh
25/tcp open smtp
80/tcp open http
389/tcp open ldap
443/tcp open https
MAC Address: 00:0C:29:BE:DF:5F (VMware)
보시다시피 SMTP는 수신 대기하고 데몬은 내부 LAN의 요청에 응답합니다.
Dovecot IMAP 및 POP3 서버 설치
Dovecot은 소규모 조직에서 대규모 조직의 수신 메일 요구를 처리하도록 설계된 보안 IMAP 및 POP3 서버입니다. CentOS와 함께 많이 사용되기 때문에 CentOS 및 MTA SASL Provider를위한 수신 메일 서버를 설치하고 구성하는 예로 Dovecot을 사용할 것입니다.
앞서 언급했듯이 DNS에 대한 MX 레코드를 구성하거나 서비스가 도메인에 대한 메일을 처리하도록 허용하는 보안 규칙을 만들지 않습니다. 따라서 인터넷에 연결된 호스트에 이러한 서비스를 설정하는 것만으로도 SPF 레코드가없는 보안 허점에 대한 레버리지 여지를 남길 수 있습니다.
Step 1 − Dovecot을 설치합니다.
[root@centos]# yum -y install dovecot
Step 2 − dovecot을 구성합니다.
dovecot의 기본 구성 파일은 /etc/dovecot.conf에 있습니다 . 먼저 기본 구성 파일을 백업합니다. 편집하기 전에 항상 구성 파일을 백업하는 것이 좋습니다. 이렇게하면 id (예 :) 줄 바꿈이 텍스트 편집기에 의해 파괴되고 수년간의 변경 사항이 손실됩니다. 현재 백업을 프로덕션에 복사하면 되돌릴 수 있습니다.
dovecot에 대한 프로토콜 및 데몬 서비스 활성화
# Protocols we want to be serving.
protocols = imap imaps pop3 pop3s
이제 dovecot 데몬이 시작시 수신하도록 설정해야합니다.
[root@localhost]# systemctl start dovecot
[root@localhost]# systemctl enable dovecot
Dovecot이 imap, pop3, imap 보안 및 pop3 보안에 대해 지정된 포트에서 로컬로 수신하는지 확인하겠습니다.
[root@localhost]# netstat -antup | grep dovecot
tcp 0 0 0.0.0.0:110 0.0.0.0:* LISTEN 4368/dovecot
tcp 0 0 0.0.0.0:143 0.0.0.0:* LISTEN 4368/dovecot
tcp 0 0 0.0.0.0:993 0.0.0.0:* LISTEN 4368/dovecot
tcp 0 0 0.0.0.0:995 0.0.0.0:* LISTEN 4368/dovecot
tcp6 0 0 :::110 :::* LISTEN 4368/dovecot
tcp6 0 0 :::143 :::* LISTEN 4368/dovecot
tcp6 0 0 :::993 :::* LISTEN 4368/dovecot
tcp6 0 0 :::995 :::* LISTEN 4368/dovecot
[root@localhost]#
보시다시피 dovecot 은 IPv4 및 IPv4에 대해 지정된 포트에서 수신 대기합니다.
POP3 | 110 |
POP3 | 995 |
IMAP | 143 |
IMAP | 993 |
이제 방화벽 규칙을 만들어야합니다.
[root@localhost]# firewall-cmd --permanent --add-port=110/tcp
success
[root@localhost]# firewall-cmd --permanent --add-port=143/tcp
success
[root@localhost]# firewall-cmd --permanent --add-port=995/tcp
success
[root@localhost]# firewall-cmd --permanent --add-port=993/tcp
success
[root@localhost]# firewall-cmd --reload
success
[root@localhost]#
우리의 수신 메일의 단절은 요청 받고있다 POP3 , POP3S , IMAP 및 IMAPS LAN상의 호스트를.
Port Scanning host: 192.168.1.143
Open TCP Port: 21 ftp
Open TCP Port: 22 ssh
Open TCP Port: 25 smtp
Open TCP Port: 80 http
Open TCP Port: 110 pop3
Open TCP Port: 143 imap
Open TCP Port: 443 https
Open TCP Port: 993 imaps
Open TCP Port: 995 pop3s
CentOS에 FTP를 설치하기 전에 사용 및 보안에 대해 약간 배워야합니다. FTP컴퓨터 시스템간에 파일을 전송하기위한 정말 효율적이고 잘 정의 된 프로토콜입니다. FTP는 이제 수십 년 동안 사용되고 개선되었습니다. 대기 시간이 있거나 빠른 속도로 네트워크를 통해 파일을 효율적으로 전송하려면 FTP를 선택하는 것이 좋습니다. SAMBA 또는 SMB보다 더 그렇습니다.
그러나 FTP에는 몇 가지 보안 문제가 있습니다. 실제로 심각한 보안 문제가 있습니다. FTP는 정말 약한 일반 텍스트 인증 방법을 사용합니다. 이러한 이유로 인증 된 세션은 sFTP 또는 FTPS에 의존해야합니다. 여기서 TLS는 로그인 및 전송 세션의 종단 간 암호화에 사용됩니다.
위의 경고와 함께 평범한 오래된 FTP는 오늘날 비즈니스 환경에서 여전히 사용되고 있습니다. 주요 용도는 익명 FTP 파일 저장소입니다. 파일을 다운로드하거나 업로드하는 데 인증이 필요하지 않은 상황입니다. 익명 FTP 사용의 몇 가지 예는 다음과 같습니다.
대규모 소프트웨어 회사는 여전히 익명의 ftp 저장소를 사용하여 인터넷 사용자가 셰어웨어와 패치를 다운로드 할 수 있도록합니다.
인터넷 사용자가 공개 문서를 업로드하고 다운로드 할 수 있습니다.
일부 응용 프로그램은 FTP를 통해 자동으로 암호화되고 보관 된 로그 또는 구성 파일을 저장소로 보냅니다.
따라서 CentOS 관리자로서 FTP를 설치하고 구성 할 수 있다는 것은 여전히 설계된 기술입니다.
우리는 FTP 데몬을 사용할 것입니다. vsFTP, 또는 매우 안전한 FTP 데몬. vsFTP는 한동안 개발에 사용되었습니다. 안전하고 설치 및 구성이 쉬우 며 신뢰할 수있는 것으로 유명합니다.
Step 1 − YUM 패키지 관리자로 vsFTPd를 설치합니다.
[root@centos]# yum -y install vsftpd.x86_64
Step 2 − systemctl을 사용하여 부팅시 시작하도록 vsFTP를 구성합니다.
[root@centos]# systemctl start vsftpd
[root@centos]# systemctl enable vsftpd
Created symlink from /etc/systemd/system/multi-
user.target.wants/vsftpd.service to /usr/lib/systemd/system/vsftpd.service.
Step 3 − FTP 제어 및 전송 세션을 허용하도록 FirewallD를 구성합니다.
[root@centos]# firewall-cmd --add-service=ftp --permanent
success
[root@centos]#
FTP 데몬이 실행 중인지 확인하십시오.
[root@centos]# netstat -antup | grep vsftp
tcp6 0 0 :::21 :::* LISTEN 13906/vsftpd
[root@centos]#
Step 4 − 익명 액세스를 위해 vsFTPD를 구성합니다.
루트 FTP 디렉터리 만들기
[root@centos]# mkdir /ftp
FTP 루트의 소유자 및 그룹을 ftp로 변경
[root@centos]# chown ftp:ftp /ftp
Set minimal permissions for FTP root:
[root@centos]# chmod -R 666 /ftp/
[root@centos]# ls -ld /ftp/
drw-rw-rw-. 2 ftp ftp 6 Feb 27 02:01 /ftp/
[root@centos]#
이 경우 사용자에게 전체 루트 FTP 트리에 대한 읽기 / 쓰기 액세스 권한을 부여했습니다.
/etc/vsftpd/vsftpd.conf 구성 "
[root@centos]# vim /etc/vsftpd/vsftpd.conf
# Example config file /etc/vsftpd/vsftpd.conf
#
# The default compiled in settings are fairly paranoid. This sample file
# loosens things up a bit, to make the ftp daemon more usable.
# Please see vsftpd.conf.5 for all compiled in defaults.
#
# READ THIS: This example file is NOT an exhaustive list of vsftpd options.
# Please read the vsftpd.conf.5 manual page to get a full idea of vsftpd's
# capabilities.
vsftp.conf 파일 에서 다음 지시문을 변경 하려고 합니다.
anon_mkdir_write_enable = YES의 주석 처리 를 제거하여 익명 업로드를 활성화합니다.
시스템 ftp 사용자 가 소유 한 chown 업로드 된 파일
chown_uploads = 예
chown_username = ftp
vsftp에서 사용하는 시스템 사용자를 ftp 사용자로 변경합니다. nopriv_user = ftp
사용자가 로그인하기 전에 읽을 수 있도록 맞춤 배너를 설정합니다.
ftpd_banner = 익명 FTP 저장소에 오신 것을 환영합니다. 모든 연결이 모니터링되고 기록됩니다.
IPv4 연결 만 설정합시다-
들어 봐 = 예
listen_ipv6 = 아니요
이제 변경 사항을 적용하려면 vsftp 서비스를 다시 시작하거나 HUP 해야합니다 .
[root@centos]# systemctl restart vsftpd
FTP 호스트에 연결하고 FTP 데몬이 응답하는지 확인하겠습니다.
[root@centos rdc]# ftp 10.0.4.34
Connected to localhost (10.0.4.34).
220 Welcome to our Anonymous FTP Repo. All connections are monitored and logged.
Name (localhost:root): anonymous
331 Please specify the password.
Password:
'230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
관리자로서 CentOS의 원격 관리에 대해 이야기 할 때 두 가지 방법을 살펴 보겠습니다.
- 콘솔 관리
- GUI 관리
원격 콘솔 관리
원격 콘솔 관리는 ssh와 같은 서비스를 통해 명령 줄에서 관리 작업을 수행하는 것을 의미합니다. CentOS Linux를 효과적으로 사용하려면 관리자로서 명령 줄에 능숙해야합니다. 그 중심에있는 Linux는 콘솔에서 사용하도록 설계되었습니다. 오늘날에도 일부 시스템 관리자는 물리적 터미널과 GUI가 설치되지 않은 베어 본 Linux 박스를 실행하여 명령의 힘을 선호하고 하드웨어 비용을 절감합니다.
원격 GUI 관리
원격 GUI 관리는 일반적으로 원격 X-Session 또는 VNC와 같은 GUI 애플리케이션 계층 프로토콜의 두 가지 방법으로 수행됩니다. 각각의 장점과 단점이 있습니다. 그러나 대부분의 경우 VNC는 관리를위한 최상의 선택입니다. 기본적으로 X Windows 프로토콜을 지원하지 않는 Windows 또는 OS X와 같은 다른 운영 체제에서 그래픽 제어가 가능합니다.
원격 X 세션을 사용하는 것은 X-Window의 Window-Manager와 X에서 실행되는 DesktopManager 모두에 고유합니다. 그러나 전체 X 세션 아키텍처는 대부분 Linux에서 사용됩니다. 모든 시스템 관리자가 원격 X 세션을 설정하기 위해 Linux 랩톱을 가지고있는 것은 아닙니다. 따라서 VNC 서버의 적응 버전을 사용하는 것이 가장 일반적입니다.
VNC의 가장 큰 단점은 다음과 같습니다. VNC는 원격 X-Session과 같은 다중 사용자 환경을 기본적으로 지원하지 않습니다. 따라서 최종 사용자에 대한 GUI 액세스의 경우 원격 XSession이 최선의 선택이 될 것입니다. 그러나 우리는 주로 CentOS 서버를 원격으로 관리하는 데 관심이 있습니다.
원격 X-Session을 사용하는 수백 명의 최종 사용자와 여러 관리자를위한 VNC 구성에 대해 설명합니다.
원격 콘솔 액세스를위한 SSH를 통한 보안 기반 마련
ssh 또는 Secure Shell이제 모든 Linux 서버를 원격으로 관리하기위한 표준입니다. 텔넷과 달리 SSH는 통신의 신뢰성과 종단 간 암호화를 위해 TLS를 사용합니다. 적절하게 구성되면 관리자는 자신의 암호와 서버를 원격으로 신뢰할 수 있습니다.
SSH를 구성하기 전에 기본 보안 및 최소 공통 액세스에 대해 조금 이야기하겠습니다. SSH가 기본 포트 22에서 실행중인 경우 조만간 일반적인 사용자 이름과 암호에 대한 무차별 대입 사전 공격을 받게 될 것입니다. 이것은 영토와 함께 제공됩니다. 거부 파일에 추가 한 호스트의 수에 관계없이 매일 다른 IP 주소에서 들어옵니다.
몇 가지 일반적인 규칙을 사용하면 몇 가지 사전 조치를 취하고 악당이 시간을 낭비하게 할 수 있습니다. 다음은 프로덕션 서버에서 원격 관리를 위해 SSH를 사용하여 따라야 할 몇 가지 보안 규칙입니다.
일반적인 사용자 이름이나 암호를 사용하지 마십시오. 시스템의 사용자 이름은 시스템 기본값이 아니거나 다음과 같은 회사 이메일 주소와 연결되어서는 안됩니다.[email protected]
루트 액세스 또는 관리 액세스는 SSH를 통해 허용되지 않아야합니다. SSH를 통해 인증되면 고유 한 사용자 이름과 su를 루트 또는 관리 계정에 사용합니다.
비밀번호 정책은 필수입니다. "This & IS & a & GUD & P @ ssW0rd & 24 & me"와 같은 복잡한 SSH 사용자 비밀번호. 점진적인 무차별 대입 공격에 대한 취약성을 제거하기 위해 몇 개월마다 암호를 변경하십시오.
장기간 사용하지 않거나 포기한 계정을 비활성화합니다. 채용 관리자가 한 달 동안 인터뷰를하지 않을 것이라는 음성 메일을받은 경우 예를 들어 기술에 정통한 개인이 손에 많은 시간을 할애 할 수 있습니다.
매일 로그를 확인하십시오. 시스템 관리자는 매일 아침 시스템 및 보안 로그를 검토하는 데 최소 30-40 분을 할애합니다. 질문이 있으면 모든 사람에게 사전 조치를 취하지 않을 시간이 없다는 사실을 알리십시오. 이 관행은 문제가 최종 사용자와 회사 이익에 나타나기 전에 경고 신호를 분리하는 데 도움이됩니다.
Note On Linux Security− Linux Administration에 관심이있는 사람은 누구나 최신 사이버 보안 뉴스 및 기술을 적극적으로 추구해야합니다. 다른 운영 체제가 손상되는 경우가 많지만 안전하지 않은 Linux 상자는 사이버 범죄자들이 찾는 보물입니다. 고속 인터넷 연결에서 Linux의 힘을 사용하면 숙련 된 사이버 범죄자가 Linux를 사용하여 다른 운영 체제에 대한 공격을 활용할 수 있습니다.
원격 액세스를위한 SSH 설치 및 구성
Step 1 − SSH 서버 및 모든 종속 패키지를 설치합니다.
[root@localhost]# yum -y install openssh-server
'Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: repos.centos.net
* extras: repos.dfw.centos.com
* updates: centos.centos.com
Resolving Dependencies
--> Running transaction check
---> Package openssh-server.x86_64 0:6.6.1p1-33.el7_3 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
Step 2 − 셸 액세스를 위해 추가하려면 보안을 정기적으로 사용하십시오.
[root@localhost ~]# useradd choozer
[root@localhost ~]# usermod -c "Remote Access" -d /home/choozer -g users -G
wheel -a choozer
Note− SSH 액세스가 인증되면 root 로 su 할 수 있도록 wheel 그룹에 새 사용자를 추가했습니다 . 또한 일반적인 단어 목록에서 찾을 수없는 사용자 이름을 사용했습니다. 이렇게하면 SSH가 공격을받을 때 계정이 잠기지 않습니다.
sshd 서버에 대한 구성 설정이있는 파일은 / etc / ssh / sshd_config 입니다.
처음에 편집하고 싶은 부분은-
LoginGraceTime 60m
PermitRootLogin no
Step 3− SSH 데몬 sshd를 다시로드합니다 .
[root@localhost]# systemctl reload sshd
로그 아웃 유예 기간을 60 분으로 설정하는 것이 좋습니다. 일부 복잡한 관리 작업은 기본값 인 2 분을 초과 할 수 있습니다. 변경 사항을 구성하거나 조사 할 때 SSH 세션 시간 초과가 발생하는 것보다 더 실망스러운 것은 없습니다.
Step 4 − 루트 자격 증명을 사용하여 로그인 해 보겠습니다.
bash-3.2# ssh centos.vmnet.local
[email protected]'s password:
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
Step 5− 더 이상 루트 자격 증명 으로 ssh를 통해 원격으로 로그인 할 수 없습니다 . 권한이없는 사용자 계정에 로그인 하고 루트 계정에 su 를 입력 해 보겠습니다 .
bash-3.2# ssh [email protected]
[email protected]'s password:
[choozer@localhost ~]$ su root
Password:
[root@localhost choozer]#
Step 6− 마지막으로 SSHD 서비스가 부팅시로드되고 firewalld가 외부 SSH 연결을 허용 하는지 확인합니다 .
[root@localhost]# systemctl enable sshd
[root@localhost]# firewall-cmd --permanent --add-service=ssh
success
[root@localhost]# firewall-cmd --reload
success
[root@localhost]#
이제 SSH가 설정되었으며 원격 관리를위한 준비가되었습니다. 기업 경계에 따라 기업 LAN 외부에서 SSH 원격 관리를 허용하도록 패킷 필터링 경계 장치를 구성해야 할 수도 있습니다.
원격 CentOS 관리를위한 VNC 구성
CentOS 6-7에서 VNC를 통해 원격 CentOS 관리를 활성화하는 몇 가지 방법이 있습니다. 가장 쉽지만 가장 제한적인 방법은 단순히 vino 라는 패키지를 사용하는 것 입니다.VinoGnome Desktop 플랫폼을 중심으로 설계된 Linux 용 Virtual Network Desktop Connection 애플리케이션입니다. 따라서 Gnome Desktop으로 설치가 완료된 것으로 가정합니다. Gnome Desktop이 설치되지 않은 경우 계속하기 전에 설치하십시오. Vino는 기본적으로 Gnome GUI 설치와 함께 설치됩니다.
Gnome에서 Vino와 화면 공유를 구성하려면 화면 공유를 위해 CentOS 시스템 환경 설정으로 이동하려고합니다.
Applications->System Tools->Settings->Sharing
VNC 데스크톱 공유 구성에 대한 참고 사항-
Disable New Connections must ask for access−이 옵션을 사용하려면 모든 연결을 확인하기위한 물리적 액세스가 필요합니다. 이 옵션은 누군가가 물리적 데스크톱에 있지 않는 한 원격 관리를 방지합니다.
Enable Require a password− 사용자 비밀번호와는 별개입니다. 가상 데스크톱에 대한 액세스를 제어하고 잠긴 데스크톱에 액세스하려면 사용자 암호가 필요합니다 (보안에 유용함).
Forward UP&P Ports: If available leave disabled− 포워딩 UP & P 포트는 계층 3 장치에 대한 범용 플러그 앤 플레이 요청을 보내 호스트에 대한 VNC 연결을 자동으로 허용합니다. 우리는 이것을 원하지 않습니다.
vino가 VNC 포트 5900에서 듣고 있는지 확인하십시오.
[root@localhost]# netstat -antup | grep vino
tcp 0 0 0.0.0.0:5900 0.0.0.0:* LISTEN 4873/vino-server
tcp6 0 0 :::5900 :::* LISTEN 4873/vino-server
[root@localhost]#
이제 들어오는 VNC 연결을 허용하도록 방화벽을 구성하겠습니다.
[root@localhost]# firewall-cmd --permanent --add-port=5900/tcp
success
[root@localhost]# firewall-cmd --reload
success
[root@localhost rdc]#
마지막으로, 보시다시피 CentOS Box를 연결하여 Windows 또는 OS X에서 VNC 클라이언트로 관리 할 수 있습니다.
SSH에 대해 설명한 것과 동일한 VNC 규칙을 준수하는 것이 중요합니다. SSH와 마찬가지로 VNC는 IP 범위에서 지속적으로 검색되고 취약한 암호를 테스트합니다. 콘솔 시간 초과와 함께 기본 CentOS 로그인을 활성화 된 상태로두면 원격 VNC 보안에 도움이됩니다. 공격자는 VNC 및 사용자 암호가 필요하므로 화면 공유 암호가 다르고 사용자 암호만큼 추측하기 어려운지 확인하십시오.
VNC 화면 공유 암호를 입력 한 후 잠긴 데스크톱에 액세스하려면 사용자 암호도 입력해야합니다.
Security Note− 기본적으로 VNC는 암호화 된 프로토콜이 아닙니다. 따라서 VNC 연결은 암호화를 위해 SSH를 통해 터널링되어야합니다.
VNC를 통해 SSH 터널 설정
SSH 터널을 설정하면 VNC 연결을 터널링하기위한 SSH 암호화 계층이 제공됩니다. 또 다른 훌륭한 기능은 SSH 압축을 사용하여 VNC GUI 화면 업데이트에 다른 압축 레이어를 추가한다는 것입니다. CentOS 서버 관리를 다룰 때 더 안전하고 빠른 것은 항상 좋은 것입니다!
따라서 VNC 연결을 시작할 클라이언트에서 원격 SSH 터널을 설정해 보겠습니다. 이 데모에서는 OS X를 사용하고 있습니다. 먼저 root 로 sudo -s 해야 합니다 .
bash-3.2# sudo -s
password:
사용자 암호를 입력하면 이제 # 프롬프트 가있는 루트 쉘 이 있어야 합니다.
bash-3.2#
이제 SSH 터널을 만들어 보겠습니다 .
ssh -f [email protected] -L 2200:192.168.1.143:5900 -N
이 명령을 분해 해 보겠습니다.
ssh − 로컬 ssh 유틸리티를 실행합니다.
-f − 작업이 완전히 실행 된 후 ssh가 백그라운드에서 실행되어야합니다.
[email protected] − VNC 서비스를 호스팅하는 CentOS 서버의 원격 ssh 사용자
-L 2200:192.168.1.143:5900 − 터널 생성 [로컬 포트] : [원격 호스트] : [VNC 서비스의 원격 포트]
-N ssh에게 원격 시스템에서 명령을 실행하지 않기를 원합니다.
bash-3.2# ssh -f [email protected] -L 2200:192.168.1.143:5900 -N
[email protected]'s password:
원격 ssh 사용자의 암호를 성공적으로 입력하면 ssh 터널 이 생성됩니다. 이제 멋진 부분입니다! 연결하기 위해 터널 포트의 로컬 호스트 (이 경우 포트 2200)에서 VNC 클라이언트를 가리 킵니다. 다음은 Mac 랩톱의 VNC 클라이언트에 대한 구성입니다.
마지막으로 원격 VNC 데스크톱 연결입니다!
SSH 터널링의 멋진 점은 거의 모든 프로토콜에 사용할 수 있다는 것입니다. SSH 터널은 일반적으로 ISP의 송신 및 수신 포트 필터링을 우회하고 다른 세션 계층 모니터링을 회피하면서 애플리케이션 계층 IDS / IPS를 속이는 데 사용됩니다.
ISP는 비 비즈니스 계정에 대해 포트 5900을 필터링 할 수 있지만 포트 22에서 SSH를 허용합니다 (또는 포트 22가 필터링 된 경우 모든 포트에서 SSH를 실행할 수 있음).
애플리케이션 수준 IPS 및 IDS는 페이로드를 확인합니다. 예를 들어, 일반적인 버퍼 오버 플로우 또는 SQL 주입. 종단 간 SSH 암호화는 애플리케이션 계층 데이터를 암호화합니다.
SSH 터널링은 작업을 수행하기위한 Linux 관리자 도구 상자의 훌륭한 도구입니다. 그러나 관리자로서 우리는 SSH 터널링에 액세스 할 수있는 권한이 낮은 사용자의 가용성을 잠그는 방법을 모색하고자합니다.
Administration Security Note− SSH 터널링을 제한하는 것은 관리자의 입장에서 고려해야 할 사항입니다. 사용자가 먼저 SSH 터널링이 필요한 이유를 평가합니다. 사용자에게 터널링이 필요한 것; 실제 위험 확률 및 최악의 경우 영향과 함께.
이것은 중급 입문서 영역을 벗어난 고급 주제입니다. 이 주제에 대한 연구는 CentOS Linux Administration의 상위 계층에 도달하려는 사람들에게 권장됩니다.
원격 X-Windows에 SSH 터널 사용
Linux에서 X-Windows의 디자인은 Windows에 비해 정말 깔끔합니다. 다른 리눅스 박스에서 원격 리눅스 박스를 제어하고 싶다면 X에 내장 된 메커니즘을 이용할 수 있습니다.
X-Windows (종종 "X"라고 함)는 한 Linux 상자에서 시작된 응용 프로그램 창을 다른 Linux 상자의 X 표시 부분에 표시하는 메커니즘을 제공합니다. 따라서 SSH를 통해 X-Windows 응용 프로그램이 전 세계의 다른 Linux 상자 디스플레이로 전달되도록 요청할 수 있습니다!
ssh 터널을 통해 원격으로 X 애플리케이션을 실행하려면 단일 명령 만 실행하면됩니다.
[root@localhost]# ssh -X [email protected]
The syntax is − ssh -X [user] @ [host], 호스트는 유효한 사용자로 ssh를 실행해야합니다.
다음은 원격 XWindows ssh 터널을 통해 Ubuntu Workstation에서 실행되는 GIMP의 스크린 샷입니다.
다른 Linux 서버 또는 워크 스테이션에서 원격으로 애플리케이션을 실행하는 것은 매우 간단합니다. 또한 몇 가지 방법을 통해 전체 X-Session을 시작하고 전체 데스크톱 환경을 원격으로 가질 수 있습니다.
XDMCP
NX와 같은 헤드리스 소프트웨어 패키지
X 및 Gnome 또는 KDE와 같은 데스크탑 관리자에서 대체 디스플레이 및 데스크탑 구성
이 방법은 물리적 디스플레이가없는 헤드리스 서버에 가장 일반적으로 사용되며 중간 수준의 입문서 범위를 초과합니다. 그러나 사용 가능한 옵션을 아는 것이 좋습니다.
CentOS 트래픽 모니터링을위한 향상된 기능을 추가 할 수있는 여러 타사 도구가 있습니다. 이 튜토리얼에서는 메인 CentOS 배포 리포지토리와 Fedora EPEL 리포지토리에 패키징 된 것에 초점을 맞출 것입니다.
관리자 (어떤 이유로 든)가 기본 CentOS 리포지토리에 도구 만 남아있는 상황은 항상 있습니다. 논의 된 대부분의 유틸리티는 물리적 액세스 쉘을 사용하는 관리자가 사용하도록 설계되었습니다. 액세스 가능한 웹 GUI로 트래픽을 모니터링 할 때 ntop-ng 또는 Nagios와 같은 타사 유틸리티를 사용하는 것이 최선의 선택입니다 (처음부터 이러한 시설을 다시 생성하는 것보다).
두 가지 구성 가능한 웹 GUI 솔루션에 대한 추가 연구를 위해 다음은 연구를 시작하는 몇 가지 링크입니다.
LAN / WAN 시나리오를위한 트래픽 모니터링
Nagios
Nagios는 오랫동안 사용되어 왔기 때문에 시도되고 테스트되었습니다. 한때는 모두 무료이며 오픈 소스 였지만, 이후 엔터프라이즈 정교화의 필요성을 지원하기 위해 유료 라이선스 모델을 사용하는 엔터프라이즈 솔루션으로 발전했습니다. 따라서 Nagios와의 롤아웃을 계획하기 전에 오픈 소스 라이선스 버전이 귀하의 요구를 충족하는지 또는 기업 예산을 염두에두고 지출 계획을 세울 것인지 확인하십시오.
대부분의 오픈 소스 Nagios 트래픽 모니터링 소프트웨어는 다음에서 찾을 수 있습니다. https://www.nagios.org
Nagious의 요약 된 역사를 보려면 공식 Nagios 역사 페이지가 있습니다. https://www.nagios.org/about/history/
ntopng
웹 GUI를 통해 대역폭 및 트래픽 모니터링을 허용하는 또 다른 훌륭한 도구는 ntopng 입니다. ntopng 는 Unix 유틸리티 ntop 과 유사하며 전체 LAN 또는 WAN에 대한 데이터를 수집 할 수 있습니다. 관리, 구성 및 차트 작성을위한 웹 GUI를 제공하면 전체 IT 부서에서 쉽게 사용할 수 있습니다.
Nagious와 마찬가지로 ntopng는 오픈 소스 및 유료 엔터프라이즈 버전을 모두 사용할 수 있습니다. ntopng에 대한 자세한 내용은 다음 웹 사이트를 방문하십시오.http://www.ntop.org/
Fedora EPEL Repository ─ Enterprise Linux 용 추가 패키지 설치
트래픽 모니터링에 필요한 일부 도구에 액세스하려면 EPEL 저장소를 사용하도록 CentOS 시스템을 구성해야합니다.
EPEL Repository는 CentOS에서 공식적으로 유지 관리하거나 지원하지 않습니다. 그러나 CentOS, Fedora Core 또는 Red Hat Linux Enterprise에 포함되지 않은 Enterprise Linux 전문가가 일반적으로 사용하는 패키지를 해결하기 위해 Fedora Core 자원 봉사자 그룹이 관리합니다.
Caution −
EPEL Repository는 CentOS에 대해 공식적이지 않으며 공통 종속성이있는 프로덕션 서버의 호환성 및 기능을 손상시킬 수 있습니다. 이를 염두에두고 시스템 크리티컬 박스에 배포하기 전에 항상 프로덕션과 동일한 서비스를 실행하는 비 프로덕션 서버에서 테스트하는 것이 좋습니다.
실제로 CentOS가있는 다른 타사 저장소에 비해 EHEL 저장소를 사용하는 가장 큰 장점은 바이너리가 오염되지 않았 음을 확인할 수 있다는 것입니다. 신뢰할 수없는 소스의 저장소를 사용하지 않는 것이 모범 사례로 간주됩니다.
그렇긴하지만 공식 EPEL Repository는 CentOS와 매우 일반적이어서 YUM을 통해 쉽게 설치할 수 있습니다.
[root@CentOS rdc]# yum -y install epel-release
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: repo1.dal.innoscale.net
* extras: repo1.dal.innoscale.net
* updates: mirror.hmc.edu
Resolving Dependencies
--> Running transaction check
---> Package epel-release.noarch 0:7-9 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
--{ condensed output }--
EPEL Repository를 설치 한 후 업데이트하려고합니다.
[root@CentOS rdc]# yum repolist
Loaded plugins: fastestmirror, langpacks
epel/x86_64/metalink
| 11 kB 00:00:00
epel
| 4.3 kB 00:00:00
(1/3): epel/x86_64/group_gz
| 170 kB 00:00:00
(2/3): epel/x86_64/updateinfo
| 753 kB 00:00:01
(3/3): epel/x86_64/primary_db
--{ condensed output }--
이 시점에서 EPEL 저장소를 구성하고 사용할 준비가되어 있어야합니다. 인터페이스 대역폭 모니터링을 위해 nload 를 설치하는 것으로 시작하겠습니다 .
이 튜토리얼에서 초점을 맞출 도구는 다음과 같습니다.
- nload
- ntop
- ifstst
- iftop
- vnstat
- 그물 돼지
- Wireshark
- TCP 덤프
- Traceroute
이들은 모두 Linux Enterprises에서 트래픽을 모니터링하기위한 표준입니다. 각 범위의 사용법은 단순에서 고급까지이므로 Wireshark 및 TCP Dump와 같은 도구에 대해서만 간략하게 설명합니다.
nload 설치 및 사용
EPEL 저장소가 CentOS에 설치 및 구성되었으므로 이제 nload 를 설치하고 사용할 수 있습니다 . 이 유틸리티는 실시간으로 인터페이스 당 대역폭을 차트로 표시하도록 설계되었습니다.
대부분의 다른 기본 설치와 마찬가지로 nload 는 YUM 패키지 관리자를 통해 설치됩니다.
[root@CentOS rdc]# yum -y install nload
Resolving Dependencies
--> Running transaction check
---> Package nload.x86_64 0:0.7.4-4.el7 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
===============================================================================
===============================================================================
Package Arch
Version Repository Size
===============================================================================
===============================================================================
Installing:
nload x86_64
0.7.4-4.el7 epel 70 k
Transaction Summary
===============================================================================
===============================================================================
Install 1 Package
Total download size: 70 k
Installed size: 176 k
Downloading packages:
--{ condensed output }--
이제 nload가 설치되었으며 사용은 매우 간단합니다.
[root@CentOS rdc]# nload enp0s5
nload 는 지정된 인터페이스를 모니터링합니다. 이 경우, enp0s5는 이더넷 인터페이스, 네트워크 트래픽 부하 및 총 대역폭 사용량을 위해 터미널에서 실시간으로 제공됩니다.
알 수있는 바와 같이, nload는 상기 데이터의 물리적 표현을 제공과 "#"해시 마크 흐름을 따라, 특정 인터페이스에서 들어오고 나가는 데이터를 차트 것이다.
묘사 된 스크린 샷은 백그라운드 데몬 트래픽으로로드되는 간단한 웹 페이지입니다.
nload 에 대한 일반적인 명령 줄 스위치는 다음 과 같습니다.
명령 | 동작 |
---|---|
-ㅏ | 기간 |
-티 | 시간 업데이트 간격 (밀리 초), 기본값은 500입니다. |
-유 | 교통 측정 h 표시 설정 |
-유 | -u와 동일한 옵션으로 총 입출력 트래픽 측정 단위를 설정합니다. |
nload의 표준 구문은 다음과 같습니다.
nload [options] <interface>
인터페이스가 지정되지 않은 경우 nload 는 자동으로 첫 번째 이더넷 인터페이스를 가져옵니다. 총 데이터 입출력을 메가 바이트 단위로 측정하고 현재 데이터 전송 속도를 메가 비트 단위로 측정 해 보겠습니다.
[root@CentOS rdc]# nload -U M -u m
현재 인터페이스로 들어오고 나가는 데이터는 초당 메가 비트로 측정되며 각 "Ttl"행은 총 데이터 입출력을 메가 바이트로 표시합니다.
nload 는 관리자가 인터페이스를 통해 전달 된 데이터의 양과 지정된 인터페이스에서 현재 들어오고 나가는 데이터의 양을 확인하는 데 유용합니다.
nload를 닫지 않고 다른 인터페이스를 보려면 왼쪽 / 오른쪽 화살표 키를 사용하면됩니다. 이것은 시스템에서 사용 가능한 모든 인터페이스를 순환합니다.
-m 스위치를 사용하여 여러 인터페이스를 동시에 모니터링 할 수 있습니다.
[root@CentOS rdc]# nload -u K -U M -m lo -m enp0s5
두 인터페이스를 동시에 로드 모니터링 (lo 및 enp0s5) −
systemd는 CentOS Linux에서 시스템 로깅이 관리되는 방식을 변경했습니다. 로그 항목을 정렬하고 필터링하는 기본 방법 으로 tail 또는 grep 과 같은 도구를 사용하는 것보다 시스템의 모든 데몬이 개별 위치에 로그를 배치하는 대신 ,journald 시스템 로그 분석에 단일 관리 지점을 가져 왔습니다.
systemd 로깅 의 기본 구성 요소 는 journal, jounralctl 및 journald.conf입니다.
journald 는 기본 로깅 데몬이며 journald.conf 를 편집하여 구성하는 반면 journalctl 은 journald에 의해 기록 된 이벤트를 분석하는 데 사용됩니다 .
journald에 의해 기록되는 이벤트 에는 커널 이벤트, 사용자 프로세스 및 데몬 서비스가 포함됩니다.
올바른 시스템 시간대 설정
journalctl을 사용하기 전에 시스템 시간이 올바른 시간으로 설정되어 있는지 확인해야합니다. 이를 위해 timedatectl 을 사용 합니다.
현재 시스템 시간을 확인합시다.
[root@centos rdc]# timedatectl status
Local time: Mon 2017-03-20 00:14:49 MDT
Universal time: Mon 2017-03-20 06:14:49 UTC
RTC time: Mon 2017-03-20 06:14:49
Time zone: America/Denver (MDT, -0600)
NTP enabled: yes
NTP synchronized: yes
RTC in local TZ: no
DST active: yes
Last DST change: DST began at
Sun 2017-03-12 01:59:59 MST
Sun 2017-03-12 03:00:00 MDT
Next DST change: DST ends (the clock jumps one hour backwards) at
Sun 2017-11-05 01:59:59 MDT
Sun 2017-11-05 01:00:00 MST
[root@centos rdc]#
현재 시스템은 현지 시간대에 맞습니다. 시스템이 아닌 경우 올바른 시간대를 설정하십시오. 설정을 변경 한 후 CentOS는 현재 시간대에서 시간대 오프셋을 자동으로 계산하여 시스템 시계를 즉시 조정합니다.
로하자 목록은 모든 시간대 timedatectl -
[root@centos rdc]# timedatectl list-timezones
Africa/Abidjan
Africa/Accra
Africa/Addis_Ababa
Africa/Algiers
Africa/Asmara
Africa/Bamako
Africa/Bangui
Africa/Banjul
Africa/Bissau
그것은 timedatectl list-timezones 의 경합 출력입니다 . 특정 지역 시간대를 찾으려면 grep 명령을 사용할 수 있습니다.
[root@centos rdc]# timedatectl list-timezones | grep -i "america/New_York"
America/New_York
[root@centos rdc]#
CentOS에서 사용하는 레이블은 일반적으로 공백 대신 밑줄이있는 국가 / 지역입니다 (New_York 대 "New York").
이제 시간대를 설정해 보겠습니다.
[root@centos rdc]# timedatectl set-timezone "America/New_York"
[root@centos rdc]# date
Mon Mar 20 02:28:44 EDT 2017
[root@centos rdc]#
시스템 시계가 자동으로 시간을 조정해야합니다.
journalctl을 사용하여 로그 분석
journalctl을 사용할 때 일반적인 명령 줄 스위치 -
스위치 | 동작 |
---|---|
-케이 | 커널 메시지 만 나열 |
-유 | 특정 단위 (httpd, sshd 등) 별 목록 |
-비 | 레이블 오프셋을 부팅합니다. |
-영형 | 출력 형식을 기록합니다. |
-피 | 로그 유형 (이름 또는 번호)별로 필터링 |
-에프 | Fieldname 또는 fieldnamevalue |
--utc | UTC 오프셋 시간 |
--이후 | 기간별로 필터링 |
부팅 로그 검사
먼저 CentOS Linux에서 부팅 로그를 검사하고 구성합니다. 가장 먼저 눈에 띄는 것은 CentOS는 기본적으로 재부팅 후에도 지속되는 부팅 로깅을 저장하지 않는다는 것입니다.
재부팅 인스턴스 별 부팅 로그를 확인하려면 다음 명령을 실행할 수 있습니다.
[root@centos rdc]# journalctl --list-boots
-4 bca6380a31a2463aa60ba551698455b5 Sun 2017-03-19 22:01:57 MDT—Sun 2017-03-19 22:11:02 MDT
-3 3aaa9b84f9504fa1a68db5b49c0c7208 Sun 2017-03-19 22:11:09 MDT—Sun 2017-03-19 22:15:03 MDT
-2 f80b231272bf48ffb1d2ce9f758c5a5f Sun 2017-03-19 22:15:11 MDT—Sun 2017-03-19 22:54:06 MDT
-1 a071c1eed09d4582a870c13be5984ed6 Sun 2017-03-19 22:54:26 MDT—Mon 2017-03-20 00:48:29 MDT
0 9b4e6cdb43b14a328b1fa6448bb72a56 Mon 2017-03-20 00:48:38 MDT—Mon 2017-03-20 01:07:36 MDT
[root@centos rdc]#
시스템을 재부팅하면 다른 항목을 볼 수 있습니다.
[root@centos rdc]# journalctl --list-boots
-5 bca6380a31a2463aa60ba551698455b5 Sun 2017-03-19 22:01:57 MDT—Sun 2017-03-19 22:11:02 MDT
-4 3aaa9b84f9504fa1a68db5b49c0c7208 Sun 2017-03-19 22:11:09 MDT—Sun 2017-03-19 22:15:03 MDT
-3 f80b231272bf48ffb1d2ce9f758c5a5f Sun 2017-03-19 22:15:11 MDT—Sun 2017-03-19 22:54:06 MDT
-2 a071c1eed09d4582a870c13be5984ed6 Sun 2017-03-19 22:54:26 MDT—Mon 2017-03-20 00:48:29 MDT
-1 9b4e6cdb43b14a328b1fa6448bb72a56 Mon 2017-03-20 00:48:38 MDT—Mon 2017-03-20 01:09:57 MDT
0 aa6aaf0f0f0d4fcf924e17849593d972 Mon 2017-03-20 01:10:07 MDT—Mon 2017-03-20 01:12:44 MDT
[root@centos rdc]#
이제 마지막 부팅 로깅 인스턴스를 살펴 보겠습니다.
root@centos rdc]# journalctl -b -5
-- Logs begin at Sun 2017-03-19 22:01:57 MDT, end at Mon 2017-03-20 01:20:27 MDT. --
Mar 19 22:01:57 localhost.localdomain systemd-journal[97]: Runtime journal is using 8.0M
(max allowed 108.4M
Mar 19 22:01:57 localhost.localdomain kernel: Initializing cgroup subsys cpuset
Mar 19 22:01:57 localhost.localdomain kernel: Initializing cgroup subsys cpu
Mar 19 22:01:57 localhost.localdomain kernel: Initializing cgroup subsys cpuacct
Mar 19 22:01:57 localhost.localdomain kernel: Linux version 3.10.0514.6.2.el7.x86_64
([email protected].
Mar 19 22:01:57 localhost.localdomain kernel: Command line:
BOOT_IMAGE=/vmlinuz-3.10.0-514.6.2.el7.x86_64 ro
Mar 19 22:01:57 localhost.localdomain kernel: Disabled fast string operations
Mar 19 22:01:57 localhost.localdomain kernel: e820: BIOS-provided physical RAM map:
위는 마지막 부팅의 압축 된 출력입니다. 또한 시간, 일, 주, 월, 연도의 부트 로그를 다시 참조 할 수 있습니다. 그러나 기본적으로 CentOS는 영구 부팅 로그를 저장하지 않습니다. 부팅 로그를 지속적으로 저장하려면 몇 가지 구성을 변경해야합니다.
- 부팅 로그를위한 중앙 저장소 지점 만들기
- 새 로그 폴더에 적절한 권한 부여
- 영구 로깅을위한 journald.conf 구성
영구 부팅 로그의 부팅 위치 구성
journald 가 영구 부팅 로그를 저장하려는 초기 위치 는 / var / log / journal 입니다. 이것은 기본적으로 존재하지 않으므로 만들어 보겠습니다.
[root@centos rdc]# mkdir /var/log/journal
이제 디렉토리에 journald 데몬 액세스 권한을 부여해 보겠습니다.
systemd-tmpfiles --create --prefix /var/log/journal
마지막으로 journald에 영구 부팅 로그를 저장해야한다고 알려 드리겠습니다 . 에서 정력 또는 좋아하는 텍스트 편집기를 열고 /etc/systemd/jounrald.conf " .
# See journald.conf(5) for details.
[Journal]=Storage=peristent
우리가 관련된 라인은 Storage = 입니다. 먼저 주석 #을 제거한 다음 다음으로 변경하십시오.Storage = persistent위에 묘사 된대로. CentOS 시스템을 저장하고 재부팅하고 journalctl list-boots를 실행할 때 여러 항목이 있어야합니다 .
Note− VPS 제공 업체와 같이 지속적으로 변경되는 머신 ID로 인해 journald 가 영구 부팅 로그를 저장하지 못할 수 있습니다 . 이러한 시나리오에 대한 많은 해결 방법이 있습니다. 그럴듯한 VPS 해결 방법을 찾은 사람들의 신뢰할 수있는 조언을 따르는 것보다 CentOS 관리자 포럼에 게시 된 현재 수정 사항을 숙독하는 것이 가장 좋습니다.
특정 부트 로그를 검사하기 위해, 우리는 단순히 각각 사용하여 오프셋 얻을 필요가 journald --list 부츠를 하여 오프셋 -b 스위치를. 따라서 두 번째 부팅 로그를 확인하려면 다음을 사용합니다.
journalctl -b -2
부팅 로그 오프셋이 지정되지 않은 -b 의 기본값 은 항상 마지막 재부팅 후 현재 부팅 로그입니다.
로그 유형별로 로그 분석
journald 이벤트 는 번호가 매겨지고 7 가지 유형으로 분류됩니다.
0 - emerg :: System is unusable
1 - alert :: Action must be taken immediatly
2 - crit :: Action is advised to be taken immediatly
3 - err :: Error effecting functionality of application
4 - warning :: Usually means a common issue that can affect security or usilbity
5 - info :: logged informtation for common operations
6 - debug :: usually disabled by default to troubleshoot functionality
따라서, 우리는 다음과 같은 명령을 통해 발행 할 수있는 모든 경고를보고 싶다면 journalctl을 -
[root@centos rdc]# journalctl -p 4
-- Logs begin at Sun 2017-03-19 22:01:57 MDT, end at Wed 2017-03-22 22:33:42 MDT. --
Mar 19 22:01:57 localhost.localdomain kernel: ACPI: RSDP 00000000000f6a10 00024
(v02 PTLTD )
Mar 19 22:01:57 localhost.localdomain kernel: ACPI: XSDT 0000000095eea65b 0005C
(v01 INTEL 440BX 06040000 VMW 01
Mar 19 22:01:57 localhost.localdomain kernel: ACPI: FACP 0000000095efee73 000F4
(v04 INTEL 440BX 06040000 PTL 00
Mar 19 22:01:57 localhost.localdomain kernel: ACPI: DSDT 0000000095eec749 1272A
(v01 PTLTD Custom 06040000 MSFT 03
Mar 19 22:01:57 localhost.localdomain kernel: ACPI: FACS 0000000095efffc0 00040
Mar 19 22:01:57 localhost.localdomain kernel: ACPI: BOOT 0000000095eec721 00028
(v01 PTLTD $SBFTBL$ 06040000 LTP 00 Mar 19 22:01:57 localhost.localdomain kernel: ACPI: APIC 0000000095eeb8bd 00742 (v01 PTLTD ? APIC 06040000 LTP 00 Mar 19 22:01:57 localhost.localdomain kernel: ACPI: MCFG 0000000095eeb881 0003C (v01 PTLTD $PCITBL$ 06040000 LTP 00
Mar 19 22:01:57 localhost.localdomain kernel: ACPI: SRAT 0000000095eea757 008A8
(v02 VMWARE MEMPLUG 06040000 VMW 00
Mar 19 22:01:57 localhost.localdomain kernel: ACPI: HPET 0000000095eea71f 00038
(v01 VMWARE VMW HPET 06040000 VMW 00
Mar 19 22:01:57 localhost.localdomain kernel: ACPI: WAET 0000000095eea6f7 00028
(v01 VMWARE VMW WAET 06040000 VMW 00
Mar 19 22:01:57 localhost.localdomain kernel: Zone ranges:
Mar 19 22:01:57 localhost.localdomain kernel: DMA [mem 0x000010000x00ffffff]
Mar 19 22:01:57 localhost.localdomain kernel: DMA32 [mem 0x010000000xffffffff]
Mar 19 22:01:57 localhost.localdomain kernel: Normal empty
Mar 19 22:01:57 localhost.localdomain kernel: Movable zone start for each node
Mar 19 22:01:57 localhost.localdomain kernel: Early memory node ranges
Mar 19 22:01:57 localhost.localdomain kernel: node 0: [mem 0x000010000x0009dfff]
Mar 19 22:01:57 localhost.localdomain kernel: node 0: [mem 0x001000000x95edffff]
Mar 19 22:01:57 localhost.localdomain kernel: node 0: [mem 0x95f000000x95ffffff]
Mar 19 22:01:57 localhost.localdomain kernel: Built 1 zonelists in Node order,
mobility grouping on. Total pages: 60
Mar 19 22:01:57 localhost.localdomain kernel: Policy zone: DMA32
Mar 19 22:01:57 localhost.localdomain kernel: ENERGY_PERF_BIAS: Set to
'normal', was 'performance'
위는 시스템에서 지난 4 일 동안의 모든 경고를 보여줍니다.
systemd를 사용하여 로그를보고 정독하는 새로운 방법은 익숙해지기 위해 연습과 연구가 거의 필요하지 않습니다. 그러나 다양한 출력 형식과 모든 패키징 된 데몬 로그를 보편적으로 만들기위한 특별한주의 사항을 수용 할 가치가 있습니다. journald 는 기존 로그 분석 방법에 비해 뛰어난 유연성과 효율성을 제공합니다.
표준 백업 계획을 배포하기 위해 CentOS에 특정한 방법을 탐색하기 전에 먼저 표준 수준 백업 정책에 대한 일반적인 고려 사항에 대해 논의하겠습니다. 우리가 가장 먼저 익숙해지고 싶은 것은3-2-1 backup rule.
3-2-1 백업 전략
업계 전반에 걸쳐 3-2-1 백업 모델이라는 용어를 자주 듣게됩니다. 이것은 백업 계획을 구현할 때 매우 좋은 접근 방식입니다. 3-2-1은 다음과 같이 정의됩니다.3데이터 사본; 예를 들어 작업 사본이있을 수 있습니다. rsync를 사용하여 중복성을 위해 설계된 CentOS 서버에 복사 순환 된 오프 사이트 USB 백업은 백업 서버의 데이터에서 만들어집니다.2다른 백업 매체. 이 경우 실제로 세 가지 백업 매체가 있습니다. 노트북 또는 워크 스테이션의 SSD 작업 복사본, RADI6 어레이의 CentOS 서버 데이터, USB 드라이브에있는 오프 사이트 백업입니다.1오프 사이트 데이터 사본; 야간에 USB 드라이브를 오프 사이트로 교체하고 있습니다. 또 다른 현대적인 접근 방식은 클라우드 백업 공급자 일 수 있습니다.
시스템 복구
베어 메탈 복원 계획을은 단순히 그대로 모든 데이터를 온라인으로 중요한 시스템을 얻을 수있는 CentOS는 관리자에 의해 배치 계획입니다. 시스템 장애가 100 %이고 과거의 모든 시스템 하드웨어가 손실되었다고 가정 할 때 관리자는 가동 중지 시간을 최소화하면서 손상되지 않은 사용자 데이터로 가동 시간을 달성 할 계획을 가지고 있어야합니다. Linux에서 사용되는 모 놀리 식 커널은 실제로 Windows보다 시스템 이미지를 사용하여 베어 메탈 복원을 훨씬 쉽게 만듭니다. Windows가 마이크로 커널 아키텍처를 사용하는 경우.
전체 데이터 복원 및 베어 메탈 복구는 일반적으로 작업, 구성된 주요 운영 서버의 프로덕션 디스크 이미지, 3-2-1 규칙을 준수하는 사용자 데이터의 중복 백업을 포함한 방법의 조합을 통해 수행됩니다. 신뢰할 수있는 회사 직원에 대한 액세스가 제한된 안전한 내화 금고에 저장 될 수있는 일부 민감한 파일도 있습니다.
기본 CentOS 도구를 사용 하는 다단계 베어 메탈 복원 및 데이터 복구 계획 은 다음으로 구성 될 수 있습니다.
dd는 구성된 서버의 프로덕션 디스크 이미지를 만들고 복원합니다.
모든 사용자 데이터의 증분 백업을 만드는 rsync
tar 및 gzip을 사용하여 관리자의 암호 및 메모와 함께 암호화 된 파일 백업을 저장합니다. 일반적으로 이것은 USB 드라이브에 저장되고 암호화되어 수석 관리자가 액세스하는 금고에 잠글 수 있습니다. 또한 현재 관리자가 복권에 당첨되어 맑은 섬 어딘가로 사라질 경우 다른 사람이 중요한 보안 자격 증명을 알 수 있습니다.
하드웨어 오류 또는 재해로 인해 시스템이 충돌하는 경우 작업을 복원하는 다른 단계는 다음과 같습니다.
구성된 베어 메탈 이미지로 작업 서버 구축
백업에서 작업 서버로 데이터 복원
처음 두 작업을 수행하는 데 필요한 자격 증명에 물리적으로 액세스 할 수 있습니다.
파일 수준 백업에 rsync 사용
rsync 는 파일 디렉토리를 로컬 또는 다른 서버에 동기화하는 데 유용한 유틸리티입니다. rsync 는 시스템 관리자가 수년 동안 사용해 왔기 때문에 데이터 백업을 위해 매우 정제되었습니다. 저자의 의견으로는 동기화 의 가장 좋은 기능 중 하나 는 명령 줄에서 스크립팅 할 수 있다는 것입니다.
이 튜토리얼에서는 다양한 방법으로 rsync에 대해 설명합니다.
- 몇 가지 일반적인 옵션을 탐색하고 논의
- 로컬 백업 생성
- SSH를 통해 원격 백업 만들기
- 로컬 백업 복원
rsync목적에 따라 이름이 지정되었습니다. Remote Sync 는 강력하고 유연하게 사용할 수 있습니다.
다음은 ssh를 통한 기본 rsync 원격 백업입니다.
MiNi:~ rdc$ rsync -aAvz --progress ./Desktop/ImportantStuff/
[email protected]:home/rdc/ Documents/RemoteStuff/
[email protected]'s password:
sending incremental file list
6,148 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=23/25)
2017-02-14 16_26_47-002 - Veeam_Architecture001.png
33,144 100% 31.61MB/s 0:00:00 (xfr#2, to-chk=22/25)
A Guide to the WordPress REST API | Toptal.pdf
892,406 100% 25.03MB/s 0:00:00 (xfr#3, to-chk=21/25)
Rick Cardon Technologies, LLC..webloc
77 100% 2.21kB/s 0:00:00 (xfr#4, to-chk=20/25)
backbox-4.5.1-i386.iso
43,188,224 1% 4.26MB/s 0:08:29
sent 2,318,683,608 bytes received 446 bytes 7,302,941.90 bytes/sec
total size is 2,327,091,863 speedup is 1.00
MiNi:~ rdc$
다음 동기화는 LAN을 통해 거의 2.3GB의 데이터를 전송했습니다. rsync의 장점은 파일 단위로 블록 수준에서 점진적으로 작동한다는 것입니다. 즉, 1MB 텍스트 파일에서 두 문자 만 변경하면 다음 동기화시 LAN을 통해 하나 또는 두 개의 블록 만 전송됩니다!
또한 CPU 사용률을 낮추기 위해 더 많은 네트워크 대역폭을 사용하기 위해 증분 기능을 비활성화 할 수 있습니다. 이것은 1Gb 전용 Backup-Lan에서 10 분마다 여러 개의 10MB 데이터베이스 파일을 지속적으로 복사하는 경우 권장 할 수 있습니다. 이유는 다음과 같습니다. 이는 항상 변경되며 10 분마다 증분 전송되며 원격 CPU의 부하에 부담을 줄 수 있습니다. 총 전송로드는 5 분을 초과하지 않기 때문에 데이터베이스 파일 전체를 동기화하는 것이 좋습니다.
다음은 가장 일반적인 스위치입니다 rsync를 -
rsync syntax:
rsync [options] [local path] [[remote host:remote path] or [target path
스위치 | 동작 |
---|---|
-ㅏ | 아카이브 모드이며 -r, -p, -t, -g, -l 가정 |
-디 | 디렉터리 트리 만 동기화, 파일 없음 |
-아르 자형 | 디렉토리로 재귀 |
-엘 | 심볼릭 링크를 심볼릭 링크로 복사 |
-피 | 권한 유지 |
-지 | 그룹 보존 |
-V | 자세한 출력 |
-지 | 네트워크 링크를 통해 압축 |
-엑스 | 확장 된 속성 유지 |
-ㅏ | ACL 보존 |
-티 | 타임 스탬프 유지 |
-W | 증분 블록이 아닌 전체 파일 전송 |
-유 | 대상의 파일을 덮어 쓰지 마십시오. |
--진행 | 전송 진행률 표시 |
--지우다 | 대상에서 오래된 파일 삭제 |
-최대 크기 = XXX | 동기화 할 최대 파일 크기 |
rsync를 사용하는 경우
rsync 에 대한 개인적 선호 는 소스 호스트에서 대상 호스트로 파일을 백업 할 때입니다. 예를 들어, 데이터 복구를위한 모든 홈 디렉토리 또는 재해 복구를 위해 오프 사이트 및 클라우드로 이동합니다.
rsync를 사용한 로컬 백업
한 호스트에서 다른 호스트로 파일을 전송하는 방법을 이미 살펴 보았습니다. 동일한 방법을 사용하여 디렉터리와 파일을 로컬로 동기화 할 수 있습니다.
루트 사용자의 디렉토리에서 / etc / 의 수동 증분 백업을 만들어 보겠습니다 .
먼저 동기화 된 백업을 위해 ~ / root에 디렉토리를 만들어야합니다.
[root@localhost rdc]# mkdir /root/etc_baks
그런 다음 사용 가능한 디스크 공간이 충분한 지 확인하십시오.
[root@localhost rdc]# du -h --summarize /etc/
49M /etc/
[root@localhost rdc]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/cl-root 43G 15G 28G 35% /
우리는 전체 / etc / 디렉토리를 동기화하는 데 좋습니다.
rsync -aAvr /etc/ /root/etc_baks/
동기화 된 / etc / 디렉토리-
[root@localhost etc_baks]# ls -l ./
total 1436
drwxr-xr-x. 3 root root 101 Feb 1 19:40 abrt
-rw-r--r--. 1 root root 16 Feb 1 19:51 adjtime
-rw-r--r--. 1 root root 1518 Jun 7 2013 aliases
-rw-r--r--. 1 root root 12288 Feb 27 19:06 aliases.db
drwxr-xr-x. 2 root root 51 Feb 1 19:41 alsa
drwxr-xr-x. 2 root root 4096 Feb 27 17:11 alternatives
-rw-------. 1 root root 541 Mar 31 2016 anacrontab
-rw-r--r--. 1 root root 55 Nov 4 12:29 asound.conf
-rw-r--r--. 1 root root 1 Nov 5 14:16 at.deny
drwxr-xr-x. 2 root root 32 Feb 1 19:40 at-spi2
--{ condensed output }--
이제 증분 rsync를 수행해 보겠습니다.
[root@localhost etc_baks]# rsync -aAvr --progress /etc/ /root/etc_baks/
sending incremental file list
test_incremental.txt
0 100% 0.00kB/s 0:00:00 (xfer#1, to-check=1145/1282)
sent 204620 bytes received 2321 bytes 413882.00 bytes/sec
total size is 80245040 speedup is 387.77
[root@localhost etc_baks]#
test_incremental.txt 파일 만 복사되었습니다.
rsync를 사용한 원격 차등 백업
백업 계획이 배포 된 서버에 초기 rsync 전체 백업을 수행해 보겠습니다. 이 예제는 실제로 Mac OS X Workstation의 폴더를 CentOS 서버에 백업하는 것입니다. rsync의 또 다른 장점은 rsync가 포팅 된 모든 플랫폼에서 사용할 수 있다는 것입니다.
MiNi:~ rdc$ rsync -aAvz Desktop/ImportanStuff/
[email protected]:Documents/RemoteStuff
[email protected]'s password:
sending incremental file list
./
A Guide to the WordPress REST API | Toptal.pdf
Rick Cardon Tech LLC.webloc
VeeamDiagram.png
backbox-4.5.1-i386.iso
dhcp_admin_script_update.py
DDWRT/
DDWRT/.DS_Store
DDWRT/ddwrt-linksys-wrt1200acv2-webflash.bin
DDWRT/ddwrt_mod_notes.docx
DDWRT/factory-to-ddwrt.bin
open_ldap_config_notes/
open_ldap_config_notes/ldap_directory_a.png
open_ldap_config_notes/open_ldap_notes.txt
perl_scripts/
perl_scripts/mysnmp.pl
php_scripts/
php_scripts/chunked.php
php_scripts/gettingURL.php
sent 2,318,281,023 bytes received 336 bytes 9,720,257.27 bytes/sec
total size is 2,326,636,892 speedup is 1.00
MiNi:~ rdc$
이제 오프 사이트에 저장된 순환 재해 복구 미디어를 사용하여 워크 스테이션에서 RAID6 볼륨을 실행하는 서버로 폴더를 백업했습니다. rsync를 사용하면 값 비싼 중복 디스크 어레이와 순환 차등 백업이있는 서버가 하나 뿐인 표준 3-2-1 백업이 제공되었습니다.
이제 test_file.txt 라는 단일 새 파일 이 추가 된 후 rsync를 사용하여 동일한 폴더의 또 다른 백업을 수행해 보겠습니다 .
MiNi:~ rdc$ rsync -aAvz Desktop/ImportanStuff/
[email protected]:Documents/RemoteStuff
[email protected]'s password:
sending incremental file list
./
test_file.txt
sent 814 bytes received 61 bytes 134.62 bytes/sec
total size is 2,326,636,910 speedup is 2,659,013.61
MiNi:~ rdc$
보시다시피 rsync 를 통해 새 파일 만 서버에 전달되었습니다 . 차등 비교는 파일별로 이루어졌습니다.
몇 가지 유의해야 할 사항은 다음과 같습니다. 변경 사항이있는 유일한 파일이기 때문에 새 파일 test_file.txt 만 복사합니다. rsync는 ssh를 사용합니다. 우리는 어느 시스템에서도 루트 계정을 사용할 필요가 없었습니다.
간단하고 강력하며 효과적인 rsync 는 전체 폴더 및 디렉토리 구조를 백업하는 데 적합합니다. 그러나 rsync 자체는 프로세스를 자동화하지 않습니다. 여기에서 도구 상자를 자세히 살펴보고 작업에 가장 적합한 작고 간단한 도구를 찾아야합니다.
cronjobs로 rsync 백업을 자동화하려면 SSH 사용자가 인증을 위해 SSH 키를 사용하여 설정되어야합니다. 이것은 cronjobs와 결합되어 시간 간격으로 rsync가 자동으로 수행되도록합니다.
블록 별 베어 메탈 복구 이미지에 DD 사용
DD는 GNU 유틸리티를 충족하는 Linux 커널이 등장한 이래로 사용되어 온 Linux 유틸리티입니다.
dd 는 가장 간단한 용어로 선택한 디스크 영역의 이미지를 복사합니다. 그런 다음 물리적 디스크의 선택된 블록을 복사하는 기능을 제공합니다. 따라서 백업이 없으면 dd가 디스크에 쓰면 모든 블록이 교체됩니다. 이전 데이터 손실은 고가의 전문가 수준 데이터 복구를위한 복구 기능을 초과합니다.
dd 로 부팅 가능한 시스템 이미지를 만드는 전체 프로세스 는 다음과 같습니다.
- 부팅 가능한 Linux 배포를 사용하여 CentOS 서버에서 부팅
- 이미징 할 부팅 디스크의 지정을 찾습니다.
- 복구 이미지를 저장할 위치 결정
- 디스크에서 사용 된 블록 크기 찾기
- dd 이미지 작업 시작
이 튜토리얼에서는 시간과 단순성을 위해 CentOS 가상 머신에서 마스터 부트 레코드의 ISO 이미지를 생성합니다. 그런 다음이 이미지를 오프 사이트에 저장합니다. MBR이 손상되어 복원해야하는 경우 전체 부팅 디스크 또는 파티션에 동일한 프로세스를 적용 할 수 있습니다. 그러나 필요한 시간과 디스크 공간은이 자습서에서 실제로 약간 초과됩니다.
CentOS 관리자는 테스트 환경에서 완전히 부팅 가능한 디스크 / 파티션을 복원하고 베어 메탈 복원을 수행하는 데 능숙 해 지도록 권장됩니다. 이는 결국 관리자와 수십 명의 최종 사용자가 다운 타임을 계산하는 실제 상황에서 연습을 완료해야 할 때 많은 부담을 덜어 줄 것입니다. 이런 경우 10 분 동안 알아내는 것은 영원처럼 보이며 땀을 흘릴 수 있습니다.
Note− dd를 사용할 때 소스와 타겟 볼륨을 혼동하지 않도록하십시오. 백업 위치를 부팅 드라이브에 복사하여 데이터와 부팅 가능한 서버를 파괴 할 수 있습니다. 또는 DD를 사용하여 매우 낮은 수준의 데이터를 복사하여 데이터를 영원히 파괴 할 수도 있습니다.
공통 명령 줄 스위치 및 매개 변수는 다음과 DD는 -
스위치 | 동작 |
---|---|
if = | 복사 할 파일 또는 소스 |
of = | 아웃 파일 또는 인 파일의 사본 |
bs | 입력 및 출력 블록 크기 설정 |
obs | 출력 파일 블록 크기 설정 |
ibs | 입력 파일 블록 크기 설정 |
카운트 | 복사 할 블록 수 설정 |
전환 | 이미징을 위해 추가 할 추가 옵션 |
오류 없음 | 오류 처리를 중지하지 마십시오. |
동조 | 오류 또는 정렬 불량이 발생하는 경우 적합하지 않은 입력 블록을 채 웁니다. |
Note on block size− dd의 기본 블록 크기는 512 바이트입니다. 이것은 저밀도 하드 디스크 드라이브의 표준 블록 크기였습니다. 오늘날의 고밀도 HDD는 1TB 이상의 디스크를 허용하기 위해 4096 바이트 (4kB) 블록 크기로 증가했습니다. 따라서 새롭고 용량이 큰 하드 디스크에서 dd를 사용하기 전에 디스크 블록 크기를 확인해야합니다.
이 자습서에서는 dd 로 프로덕션 서버에서 작업하는 대신 VMWare에서 실행되는 CentOS 설치를 사용합니다. 또한 부팅 가능한 USB 스틱으로 작업하는 대신 부팅 가능한 Linux ISO 이미지를 부팅하도록 VMWare를 구성합니다.
먼저 CentOS Gnome ISO 라는 제목의 CentOS 이미지를 다운로드해야합니다 . 이는 거의 3GB이며 부팅 가능한 USB 썸 드라이브를 만들고 문제 해결 및 베어 메탈 이미지를 위해 가상 서버 설치로 부팅하기위한 사본을 항상 보관하는 것이 좋습니다.
다른 부팅 가능한 Linux 배포판도 마찬가지로 작동합니다. Linux Mint는 뛰어난 하드웨어 지원과 유지 관리를위한 세련된 GUI 디스크 도구를 제공하므로 부팅 가능한 ISO에 사용할 수 있습니다.
CentOS GNOME Live 부팅 가능 이미지는 다음에서 다운로드 할 수 있습니다. http://buildlogs.centos.org/rolling/7/isos/x86_64/CentOS-7-x86_64-LiveGNOME.iso
Linux 부팅 가능 이미지에서 부팅하도록 VMWare Workstation 설치를 구성 해 보겠습니다. 이 단계는 OS X의 VMWare 용입니다. 그러나 Linux, Windows 및 Virtual Box의 VMWare Workstation에서도 비슷합니다.
Note− Virtual Box 또는 VMWare Workstation과 같은 가상 데스크톱 솔루션을 사용하는 것은 CentOS 관리 작업을 학습하기위한 랩 시나리오를 설정하는 좋은 방법입니다. 여러 CentOS 설치를 설치할 수있는 기능을 제공하며 하드웨어 구성이 거의 없어서 사용자가 관리에 집중할 수 있으며 변경하기 전에 서버 상태를 저장할 수도 있습니다.
먼저 가상 CD-ROM을 구성하고 가상 CentOS 서버 설치 대신 부팅에 ISO 이미지를 첨부하겠습니다.
이제 시동 디스크를 설정하십시오-
이제 부팅되면 가상 머신이 CentOS 부팅 가능 ISO 이미지에서 부팅되고 이전에 구성된 Virtual CentOS 서버의 파일에 대한 액세스를 허용합니다.
디스크를 확인하여 MBR을 복사 할 위치를 살펴 보겠습니다 (축약 된 출력은 다음과 같습니다).
MiNt ~ # fdisk -l
Disk /dev/sda: 60 GiB, 21474836480 bytes, 41943040 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 /dev/sdb: 20 GiB, 21474836480 bytes, 41943040 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
우리는 물리적 디스크 sda 및 sdb를 모두 찾았습니다 . 각각의 블록 크기는 512 바이트입니다. 이제 dd 명령을 실행하여 SDA1의 MBR에 대한 처음 512 바이트를 복사합니다.
이를 수행하는 가장 좋은 방법은-
[root@mint rdc]# dd if=/dev/sda bs=512 count=1 | gzip -c >
/mnt/sdb/images/mbr.iso.gz
1+0 records in
1+0 records out
512 bytes copied, 0.000171388 s, 3.0 MB/s
[root@mint rdc]# ls /mnt/sdb/
mbr-iso.gz
[root@mint rdc]#
마찬가지로, 우리는 마스터 부트 레코드의 전체 이미지를 가지고 있습니다. 부팅 드라이브를 이미지화 할 공간이 충분하다면 전체 시스템 부팅 이미지를 쉽게 만들 수 있습니다.
dd if=/dev/INPUT/DEVICE-NAME-HERE conv=sync,noerror bs=4K | gzip -c >
/mnt/sdb/boot-server-centos-image.iso.gz
전환 = 동기화가 바이트가 물리적 매체에 대해 정렬되어야 할 때 사용된다. 이 경우 정확한 4K 정렬을 읽지 않으면 dd에 오류가 발생할 수 있습니다 (예 : 3K에 불과하지만 디스크에서 최소 단일 4K 블록을 가져와야하는 파일. 또는 단순히 오류 읽기 및 dd는 파일을 읽을 수 없습니다.). 따라서 conv = sync, noerror 를 사용하는 dd 는 사소하지만 유용한 데이터를 4K 블록 정렬의 물리적 매체에 3K로 채 웁니다 . 대규모 작업을 종료 할 수있는 오류를 표시하지 않습니다.
디스크의 데이터로 작업 할 때 항상 conv = sync, noerror 매개 변수 를 포함하려고합니다 .
이는 디스크가 TCP 데이터와 같은 스트림이 아니기 때문입니다. 특정 크기로 정렬 된 블록으로 구성됩니다. 예를 들어, 512 바이트 블록이있는 경우 300 바이트의 파일에는 여전히 전체 512 바이트의 디스크 공간이 필요합니다 (권한 및 기타 파일 시스템 정보와 같은 inode 정보에 대해 2 블록).
보안 저장소에 gzip 및 tar 사용
gzip과 tar는 CentOS 관리자가 사용하는 데 익숙해 져야하는 두 가지 유틸리티입니다. 단순히 아카이브의 압축을 푸는 것보다 훨씬 더 많이 사용됩니다.
CentOS Linux에서 Gnu Tar 사용
Tar는 Windows의 winrar 와 유사한 보관 유틸리티 입니다. tar로 줄여서 테이프 아카이브 라는 이름 은 유틸리티를 거의 요약합니다. tar 는 논리적 편의를 위해 파일을 가져 와서 아카이브에 저장합니다. 따라서 / etc에 저장된 수십 개의 파일 대신. 백업 및 저장 편의를 위해 아카이브에 "타르"할 수 있습니다.
tar 는 수년 동안 Unix 및 Linux에서 아카이브 파일을 저장하는 표준이었습니다. 따라서 tar를 gzip 또는 bzip 과 함께 사용 하는 것은 각 시스템의 아카이브에 대한 모범 사례로 간주됩니다.
다음은 tar와 함께 사용되는 일반적인 명령 줄 스위치 및 옵션 목록입니다.
스위치 | 동작 |
---|---|
-씨 | 새 .tar 아카이브를 만듭니다. |
-씨 | 다른 디렉토리로 추출 |
-제이 | bzip2 압축 사용 |
-지 | gzip 압축 사용 |
-V | 자세한 내용은 보관 진행 상황을 표시합니다. |
-티 | 아카이브 내용을 나열합니다. |
-에프 | 아카이브의 파일 이름 |
-엑스 | tar 아카이브 추출 |
다음은 tar 아카이브 를 만들기위한 기본 구문입니다 .
tar -cvf [tar archive name]
Note on Compression mechanisms with tar− tar를 사용할 때 두 가지 일반적인 압축 방식 중 하나 인 gzip 및 bzip2를 고수하는 것이 좋습니다. gzip 파일은 CPU 리소스를 덜 사용하지만 일반적으로 크기가 더 큽니다. bzip2는 압축하는 데 더 오래 걸리지 만 더 많은 CPU 리소스를 사용합니다. 그러나 최종 파일 크기가 더 작아집니다.
파일 압축을 사용할 때 우리는 항상 표준 파일 확장자를 사용하여 아카이브를 추출하는 데 필요한 압축 체계를 우리 자신을 포함한 모든 사람에게 알릴 수 있습니다 (시행 착오에 의한 추측이 아님).
bzip2 | .tbz |
bzip2 | .tar.tbz |
bzip2 | .tb2 |
gzip | .tar.gz |
gzip | .tgz |
Windows 상자 또는 Windows에서 사용하기 위해 아카이브를 추출 해야하는 경우 대부분의 세 문자 단일 확장자가 Windows 및 Windows 관리자 만 혼동 할 수 있으므로 .tar.tbz 또는 .tar.gz 를 사용하는 것이 좋습니다. 때로는 원하는 결과)
Mac 워크 스테이션에서 복사 한 원격 백업에서 gzip 압축 된 tar 아카이브를 생성 해 보겠습니다.
[rdc@mint Documents]$ tar -cvz -f RemoteStuff.tgz ./RemoteStuff/
./RemoteStuff/
./RemoteStuff/.DS_Store
./RemoteStuff/DDWRT/
./RemoteStuff/DDWRT/.DS_Store
./RemoteStuff/DDWRT/ddwrt-linksys-wrt1200acv2-webflash.bin
./RemoteStuff/DDWRT/ddwrt_mod_notes.docx
./RemoteStuff/DDWRT/factory-to-ddwrt.bin
./RemoteStuff/open_ldap_config_notes/
./RemoteStuff/open_ldap_config_notes/ldap_directory_a.png
./RemoteStuff/open_ldap_config_notes/open_ldap_notes.txt
./RemoteStuff/perl_scripts/
./RemoteStuff/perl_scripts/mysnmp.pl
./RemoteStuff/php_scripts/
./RemoteStuff/php_scripts/chunked.php
./RemoteStuff/php_scripts/gettingURL.php
./RemoteStuff/A Guide to the WordPress REST API | Toptal.pdf
./RemoteStuff/Rick Cardon Tech LLC.webloc
./RemoteStuff/VeeamDiagram.png
./RemoteStuff/backbox-4.5.1-i386.iso
./RemoteStuff/dhcp_admin_script_update.py
./RemoteStuff/test_file.txt
[rdc@mint Documents]$ ls -ld RemoteStuff.tgz
-rw-rw-r--. 1 rdc rdc 2317140451 Mar 12 06:10 RemoteStuff.tgz
Note− 모든 파일을 아카이브에 직접 추가하는 대신 전체 폴더 RemoteStuff를 아카이브했습니다 . 이것이 가장 쉬운 방법입니다. 추출 할 때 전체 디렉토리 RemoteStuff 가 현재 작업 디렉토리 내의 모든 파일과 함께 ./currentWorkingDirectory/RemoteStuff/ 로 추출되기 때문입니다.
이제 / root / 홈 디렉토리 에서 아카이브를 추출해 보겠습니다 .
[root@centos ~]# tar -zxvf RemoteStuff.tgz
./RemoteStuff/
./RemoteStuff/.DS_Store
./RemoteStuff/DDWRT/
./RemoteStuff/DDWRT/.DS_Store
./RemoteStuff/DDWRT/ddwrt-linksys-wrt1200acv2-webflash.bin
./RemoteStuff/DDWRT/ddwrt_mod_notes.docx
./RemoteStuff/DDWRT/factory-to-ddwrt.bin
./RemoteStuff/open_ldap_config_notes/
./RemoteStuff/open_ldap_config_notes/ldap_directory_a.png
./RemoteStuff/open_ldap_config_notes/open_ldap_notes.txt
./RemoteStuff/perl_scripts/
./RemoteStuff/perl_scripts/mysnmp.pl
./RemoteStuff/php_scripts/
./RemoteStuff/php_scripts/chunked.php
./RemoteStuff/php_scripts/gettingURL.php
./RemoteStuff/A Guide to the WordPress REST API | Toptal.pdf
./RemoteStuff/Rick Cardon Tech LLC.webloc
./RemoteStuff/VeeamDiagram.png
./RemoteStuff/backbox-4.5.1-i386.iso
./RemoteStuff/dhcp_admin_script_update.py
./RemoteStuff/test_file.txt
[root@mint ~]# ping www.google.com
위에서 볼 수 있듯이 모든 파일은 현재 작업 디렉토리 내의 포함 디렉토리로 간단히 추출되었습니다.
[root@centos ~]# ls -l
total 2262872
-rw-------. 1 root root 1752 Feb 1 19:52 anaconda-ks.cfg
drwxr-xr-x. 137 root root 8192 Mar 9 04:42 etc_baks
-rw-r--r--. 1 root root 1800 Feb 2 03:14 initial-setup-ks.cfg
drwxr-xr-x. 6 rdc rdc 4096 Mar 10 22:20 RemoteStuff
-rw-r--r--. 1 root root 2317140451 Mar 12 07:12 RemoteStuff.tgz
-rw-r--r--. 1 root root 9446 Feb 25 05:09 ssl.conf [root@centos ~]#
gzip을 사용하여 파일 백업 압축
앞서 언급했듯이 tar에서 bzip2 또는 gzip을 사용할 수 있습니다. -j 또는 -z명령 줄 스위치. gzip을 사용하여 개별 파일을 압축 할 수도 있습니다. 그러나 bzip 또는 gzip 만 사용하면 tar 와 결합 할 때만 큼 많은 기능을 제공하지 않습니다 .
gzip을 사용할 때 기본 작업은 원본 파일을 제거하고 각 파일을 .gz 확장자를 추가하는 압축 버전으로 바꾸는 것입니다.
gzip의 일반적인 명령 줄 스위치는 다음과 같습니다.
스위치 | 동작 |
---|---|
-씨 | 아카이브에 배치 한 후 파일 유지 |
-엘 | 압축 된 아카이브에 대한 통계 가져 오기 |
-아르 자형 | 디렉토리의 파일을 재귀 적으로 압축합니다. |
-1부터 9까지 | 1에서 9까지의 비율로 압축 수준을 지정합니다. |
gzip 은 일부 Windows O / S zip 유틸리티와 같이 아카이브 기반이 아닌 파일별로 작동합니다. 그 주된 이유는 tar가 이미 고급 아카이브 기능을 제공하기 때문입니다. gzip 은 압축 메커니즘 만 제공하도록 설계되었습니다.
따라서 gzip 을 생각할 때 단일 파일을 생각하십시오. 여러 파일을 생각할 때 tar 아카이브를 생각하십시오 . 이제 이전 tar 아카이브를 사용하여이를 살펴 보겠습니다 .
Note − 노련한 Linux 전문가는 종종 타르 된 아카이브를 타르볼이라고합니다.
rsync 백업 에서 또 다른 tar 아카이브를 만들어 보겠습니다 .
[root@centos Documents]# tar -cvf RemoteStuff.tar ./RemoteStuff/
[root@centos Documents]# ls
RemoteStuff.tar RemoteStuff/
데모 용의가하자 gzip을 새로 생성 된 타르볼을하고, 말 gzip으로 이전 파일을 유지. 기본적으로 -c 옵션이 없으면 gzip은 전체 tar 아카이브를 .gz 파일로 대체 합니다.
[root@centos Documents]# gzip -c RemoteStuff.tar > RemoteStuff.tar.gz
[root@centos Documents]# ls
RemoteStuff RemoteStuff.tar RemoteStuff.tar.gz
We now have our original directory, our tarred directory and finally our gziped tarball.
gzip으로 -l 스위치 를 테스트 해 보겠습니다 .
[root@centos Documents]# gzip -l RemoteStuff.tar.gz
compressed uncompressed ratio uncompressed_name
2317140467 2326661120 0.4% RemoteStuff.tar
[root@centos Documents]#
gzip 이 Windows Zip 유틸리티와 어떻게 다른지 보여주기 위해 텍스트 파일 폴더에서 gzip을 실행 해 보겠습니다.
[root@centos Documents]# ls text_files/
file1.txt file2.txt file3.txt file4.txt file5.txt
[root@centos Documents]#
이제 -r 옵션을 사용하여 디렉토리의 모든 텍스트 파일을 재귀 적으로 압축 해 보겠습니다.
[root@centos Documents]# gzip -9 -r text_files/
[root@centos Documents]# ls ./text_files/
file1.txt.gz file2.txt.gz file3.txt.gz file4.txt.gz file5.txt.gz
[root@centos Documents]#
보다? 일부 사람들이 예상했던 것과는 다릅니다. 모든 원본 텍스트 파일이 제거되고 각각 개별적으로 압축되었습니다. 이 동작 때문에 단일 파일에서 작업해야 할 때 gzip 만 생각하는 것이 가장 좋습니다 .
작업 타르볼 ,의 우리 추출 할 수 rsynced 새 디렉토리에 타르볼.
[root@centos Documents]# tar -C /tmp -zxvf RemoteStuff.tar.gz
./RemoteStuff/
./RemoteStuff/.DS_Store
./RemoteStuff/DDWRT/
./RemoteStuff/DDWRT/.DS_Store
./RemoteStuff/DDWRT/ddwrt-linksys-wrt1200acv2-webflash.bin
./RemoteStuff/DDWRT/ddwrt_mod_notes.docx
./RemoteStuff/DDWRT/factory-to-ddwrt.bin
./RemoteStuff/open_ldap_config_notes/
./RemoteStuff/open_ldap_config_notes/ldap_directory_a.png
./RemoteStuff/open_ldap_config_notes/open_ldap_notes.txt
./RemoteStuff/perl_scripts/
./RemoteStuff/perl_scripts/mysnmp.pl
./RemoteStuff/php_scripts/
./RemoteStuff/php_scripts/chunked.php
위에서 본 것처럼 tarball을 / tmp 디렉토리에 추출하고 압축을 풉니 다.
[root@centos Documents]# ls /tmp
hsperfdata_root
RemoteStuff
TarBall 아카이브 암호화
재해 복구시 조직의 다른 직원이 액세스해야하는 보안 문서를 저장하기 위해 tarball 아카이브를 암호화하는 것은 까다로운 개념 일 수 있습니다. 기본적으로이를 수행하는 세 가지 방법이 있습니다. GnuPG를 사용하거나 openssl을 사용하거나 세 번째 부분 유틸리티를 사용합니다.
GnuPG는 주로 비대칭 암호화를 위해 설계되었으며 암호가 아닌 신원 연결을 염두에두고 있습니다. 사실, 대칭 암호화와 함께 사용할 수 있지만 이것이 GnuPG의 주요 강점은 아닙니다. 따라서 원래 사람보다 더 많은 사람이 액세스해야하는 경우 (예 : 왕국의 모든 키를 레버리지로 보유하고있는 관리자로부터 보호하려는 기업 관리자) 물리적 보안이있는 아카이브 저장에 대해 GnuPG를 할인합니다.
GnuPG와 같은 Openssl은 우리가 원하는 것을 할 수 있으며 CentOS와 함께 제공됩니다. 그러나 다시 말하지만, 우리가 원하는 것을 수행하도록 특별히 설계되지 않았으며 보안 커뮤니티에서 암호화에 대한 질문이있었습니다.
우리의 선택은 7zip. 7zip은 gzip 과 같은 압축 유틸리티 이지만 더 많은 기능이 있습니다. Gnu Gzip과 마찬가지로 7zip과 그 표준은 오픈 소스 커뮤니티에 있습니다. EHEL Repository에서 7zip을 설치하기 만하면됩니다 (다음 장에서는 Extended Enterprise Repositories 설치에 대해 자세히 다룹니다).
Centos에 7zip 설치
7zip은 EHEL 리포지토리가 CentOS에로드되고 구성되면 간단한 설치입니다.
[root@centos Documents]# yum -y install p7zip.x86_64 p7zip-plugins.x86_64
Loaded plugins: fastestmirror, langpacks
base
| 3.6 kB 00:00:00
epel/x86_64/metalink
| 13 kB 00:00:00
epel
| 4.3 kB 00:00:00
extras
| 3.4 kB 00:00:00
updates
| 3.4 kB 00:00:00
(1/2): epel/x86_64/updateinfo
| 756 kB 00:00:04
(2/2):
epel/x86_64/primary_db
| 4.6 MB 00:00:18
Loading mirror speeds from cached hostfile
--> Running transaction check
---> Package p7zip.x86_64 0:16.02-2.el7 will be installed
---> Package p7zip-plugins.x86_64 0:16.02-2.el7 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
간단하게 7zip이 설치되어 tarball 아카이브를위한 256 비트 AES 암호화와 함께 사용할 수 있습니다.
이제 7z를 사용하여 gzip 압축 된 아카이브를 암호로 암호화 해 보겠습니다. 그렇게하는 구문은 매우 간단합니다.
7z a -p <output filename><input filename>
어디, a: 아카이브에 추가 및 -p: 암호화하고 암호를 묻습니다.
[root@centos Documents]# 7z a -p RemoteStuff.tgz.7z RemoteStuff.tar.gz
7-Zip [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
p7zip Version 16.02 (locale=en_US.UTF-8,Utf16=on,HugeFiles=on,64 bits,1 CPU Intel(R)
Core(TM) i5-4278U CPU @ 2.60GHz (40651),ASM,AES-NI)
Scanning the drive:
1 file, 2317140467 bytes (2210 MiB)
Creating archive: RemoteStuff.tgz.7z
Items to compress: 1
Enter password (will not be echoed):
Verify password (will not be echoed) :
Files read from disk: 1
Archive size: 2280453410 bytes (2175 MiB)
Everything is Ok
[root@centos Documents]# ls
RemoteStuff RemoteStuff.tar RemoteStuff.tar.gz RemoteStuff.tgz.7z slapD
text_files
[root@centos Documents]#
이제 256 비트 AES로 gzip 압축 된 tarball을 암호화하는 .7z 아카이브가 있습니다.
Note− 7zip은 암호 및 카운터의 SHA-256 해시와 함께 AES 256 비트 암호화를 사용하며 키 유도를 위해 최대 512K까지 반복됩니다. 복잡한 키를 사용하는 경우 충분히 안전해야합니다.
아카이브를 암호화하고 다시 압축하는 프로세스는 더 큰 아카이브의 경우 다소 시간이 걸릴 수 있습니다.
7zip은 gzip 또는 bzip2보다 더 많은 기능을 제공하는 고급 제품입니다. 그러나 CentOS 또는 Linux 세계에서는 표준이 아닙니다. 따라서 가능한 한 자주 다른 유틸리티를 사용해야합니다.
CentOS 7 시스템은 세 가지 방법으로 업데이트 할 수 있습니다.
- Manually
- Automatically
- 주요 보안 문제에 대해 수동으로 업데이트하고 자동 업데이트 구성
프로덕션 환경에서는 프로덕션 서버에 대해 수동으로 업데이트하는 것이 좋습니다. 또는 최소한 업데이트 계획을 수립하여 관리자가 비즈니스 운영에 필수적인 서비스를 보장 할 수 있습니다.
간단한 보안 업데이트로 인해 관리자의 업그레이드 및 재구성이 필요한 일반 응용 프로그램에서 반복적 인 문제가 발생할 수 있습니다. 따라서 개발 서버와 데스크톱에서 먼저 테스트하기 전에 프로덕션에서 자동 업데이트를 예약하는 데 지치십시오.
CentOS 7 수동 업데이트
CentOS 7을 업데이트하기 위해 yum 명령에 익숙해 져야합니다 .yumCentOS 7에서 패키지 저장소를 다루는 데 사용됩니다. yum 은 일반적으로 사용되는 도구입니다.
- CentOS 7 Linux 시스템 업데이트
- 패키지 검색
- 패키지 설치
- 패키지에 필요한 종속성 감지 및 설치
업데이트에 yum 을 사용하려면 CentOS 서버가 인터넷에 연결되어 있어야합니다. 대부분의 구성은 기본 시스템을 설치 한 다음 yum 을 사용 하여 패키지의 추가 기능에 대해 기본 CentOS 저장소를 쿼리하고 시스템 업데이트를 적용합니다.
우리는 이미 yum 을 사용하여 몇 가지 패키지를 설치했습니다. yum 을 사용할 때 항상 루트 사용자로해야합니다. 또는 루트 액세스 권한이있는 사용자. 이제 사용하기 쉬운 nano 라는 텍스트 편집기를 검색하고 설치해 보겠습니다 .
[root@centos rdc]# yum search nano
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirror.rackspace.com
* epel: mirror.chpc.utah.edu
* extras: repos.forethought.net
* updates: repos.forethought.net
======================================================================
N/S matched: nano
======================================================================
nano.x86_64 : A small text editor
nodejs-nano.noarch : Minimalistic couchdb driver for Node.js
perl-Time-Clock.noarch : Twenty-four hour clock object with nanosecond precision
Name and summary matches only, use "search all" for everything.
[root@centos rdc]#
이제 나노 텍스트 편집기를 설치하겠습니다 .
[root@centos rdc]# yum install nano
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirror.keystealth.org
* epel: pubmirror1.math.uh.edu
* extras: centos.den.host-engine.com
* updates: repos.forethought.net
Resolving Dependencies
--> Running transaction check
---> Package nano.x86_64 0:2.3.1-10.el7 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
================================================================================
Package Arch
Version Repository Size
================================================================================
Installing:
nano x86_64
2.3.1-10.el7 base 440 k
Transaction Summary
Install 1 Package
Total download size: 440 k
Installed size: 1.6 M
Is this ok [y/d/N]: y
Downloading packages:
nano-2.3.1-10.el7.x86_64.rpm
| 440 kB 00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : nano-2.3.1-10.el7.x86_64
1/1
Verifying : nano-2.3.1-10.el7.x86_64
1/1
Installed:
nano.x86_64 0:2.3.1-10.el7
Complete!
[root@centos rdc]#
나노 텍스트 편집기를 설치했습니다. 이 방법 인 IMO는 웹 사이트에서 유틸리티를 검색하고 설치 프로그램을 수동으로 실행하는 것보다 훨씬 쉽습니다. 또한 리포지토리는 디지털 서명을 사용하여 패키지가 yum을 통해 신뢰할 수있는 소스에서 온 것인지 확인합니다. 새 저장소를 신뢰할 때 신뢰성을 검증하는 것은 관리자의 몫입니다. 이것이 타사 리포지토리에 지치는 것이 모범 사례로 간주되는 이유입니다.
Yum을 사용하여 패키지를 제거 할 수도 있습니다.
[root@centos rdc]# yum remove nano
Loaded plugins: fastestmirror, langpacks
Resolving Dependencies
--> Running transaction check
---> Package nano.x86_64 0:2.3.1-10.el7 will be erased
--> Finished Dependency Resolution
Dependencies Resolved
이제 업데이트를 확인하겠습니다.
[root@centos rdc]# yum list updates
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirror.keystealth.org
* epel: pubmirror1.math.uh.edu
* extras: centos.den.host-engine.com
* updates: repos.forethought.net
Updated Packages
NetworkManager.x86_64 1:1.4.0-17.el7_3 updates
NetworkManager-adsl.x86_64 1:1.4.0-17.el7_3 updates
NetworkManager-glib.x86_64 1:1.4.0-17.el7_3 updates
NetworkManager-libnm.x86_64 1:1.4.0-17.el7_3 updates
NetworkManager-team.x86_64 1:1.4.0-17.el7_3 updates
NetworkManager-tui.x86_64 1:1.4.0-17.el7_3 updates
NetworkManager-wifi.x86_64 1:1.4.0-17.el7_3 updates
audit.x86_64 2.6.5-3.el7_3.1 updates
audit-libs.x86_64 2.6.5-3.el7_3.1 updates
audit-libs-python.x86_64
그림과 같이 설치 대기중인 업데이트가 수십 개 있습니다. 실제로는 아직 자동 업데이트를 구성하지 않았기 때문에 약 100 개의 업데이트가 있습니다. 따라서 보류중인 모든 업데이트를 설치하겠습니다.
[root@centos rdc]# yum update
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirrors.usc.edu
* epel: pubmirror1.math.uh.edu
* extras: repos.forethought.net
* updates: repos.forethought.net
Resolving Dependencies
--> Running transaction check
---> Package NetworkManager.x86_64 1:1.4.0-14.el7_3 will be updated
---> Package NetworkManager.x86_64 1:1.4.0-17.el7_3 will be an update
selinux-policy noarch 3.13.1102.el7_3.15 updates 414 k
selinux-policy-targeted noarch 3.13.1102.el7_3.15 updates 6.4 M
systemd x86_64 21930.el7_3.7 updates 5.2 M
systemd-libs x86_64 21930.el7_3.7 updates 369 k
systemd-python x86_64 21930.el7_3.7 updates 109 k
systemd-sysv x86_64 21930.el7_3.7 updates 63 k
tcsh x86_64 6.18.01-13.el7_3.1 updates 338 k
tzdata noarch 2017a1.el7 updates 443 k
tzdata-java noarch 2017a1.el7 updates 182 k
wpa_supplicant x86_64 1:2.021.el7_3 updates 788 k
Transaction Summary
===============================================================================
Install 2 Packages
Upgrade 68 Packages
Total size: 196 M
Total download size: 83 M
Is this ok [y/d/N]:
"y"키를 누르면 CentOS 7 업데이트가 시작됩니다. yum 이 업데이트 할 때 거치는 일반적인 프로세스 는 다음과 같습니다.
- 현재 패키지 확인
- 저장소에서 업데이트 된 패키지를 찾습니다.
- 업데이트 된 패키지에 필요한 종속성을 계산합니다.
- 업데이트 다운로드
- 업데이트 설치
이제 시스템이 최신 상태인지 확인하겠습니다.
[root@centos rdc]# yum list updates
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* updates: mirror.compevo.com
[root@centos rdc]#
보시다시피, 나열된 업데이트가 없습니다.
YUM에 대한 자동 업데이트 구성
엔터프라이즈 환경에서는 앞에서 언급했듯이 자동 업데이트가 선호되는 설치 방법 일 수도 있고 아닐 수도 있습니다. yum을 사용하여 자동 업데이트를 구성하는 단계를 살펴 보겠습니다.
먼저 yum-cron 이라는 패키지를 설치합니다 .
[root@centos rdc]# yum -y install yum-cron
Install 1 Package
Total download size: 61 k
Installed size: 51 k
Downloading packages:
yum-cron-3.4.3-150.el7.centos.noarch.rpm
| 61 kB 00:00:01
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : yum-cron-3.4.3-150.el7.centos.noarch
1/1
Verifying : yum-cron-3.4.3-150.el7.centos.noarch
1/1
Installed:
yum-cron.noarch 0:3.4.3-150.el7.centos
Complete!
[root@centos rdc]#
기본적으로 yum-cron 은 업데이트 만 다운로드하고 설치하지는 않습니다. 업데이트 자동 설치 여부는 관리자에게 있습니다. 가장 큰주의 사항은 일부 업데이트에는 시스템 재부팅이 필요하다는 것입니다. 또한 일부 업데이트는 서비스가 다시 작동하기 전에 구성 변경이 필요할 수 있습니다.
종속성을 업데이트하면 다음 상황에서 재귀 문제가 발생할 수 있습니다.
yum은 특정 라이브러리에 대한 업데이트를 권장합니다.
라이브러리는 Apache Server 2.4 만 지원하지만 서버 2.3이 있습니다.
당사의 상거래 사이트는 특정 버전의 PHP에 의존합니다.
라이브러리 용으로 설치된 새 버전의 Apache를 사용하려면 PHP를 업그레이드해야합니다.
우리의 프로덕션 웹 응용 프로그램은 아직 최신 PHP 버전으로 테스트되지 않았습니다.
Yum은 설정하지 않는 한 예고없이 Apache와 PHP를 자동으로 업그레이드 할 수 있습니다.
5 가지 시나리오가 모두 실행되면 아침에 큰 골칫거리에서 사용자 데이터가 노출 될 수있는 보안 손상에 이르기까지 모든 것이 발생할 수 있습니다. 앞서 언급 한 예가 일종의 완벽한 폭풍이지만 우리는 그러한 시나리오가 실행되는 것을 결코 원하지 않습니다.
업데이트 재부팅 및 재구성으로 인한 가동 중지 시간으로 인해 서비스를 복원하는 데 필요한 시간으로 인한 잠재적 수익 손실 시나리오에 액세스하는 것은 관리자에게 달려 있습니다. 예를 들어 수백만 명의 고객이있는 하루에 수백만 달러의 전자 상거래 사이트에서 이러한 관행은 충분히 보수적이지 않을 수 있습니다.
이제 시스템 업데이트를 자동으로 설치 하도록 yum-cron 을 구성 해 보겠습니다 .
[root@centos rdc]# vim /etc/yum/yum-cron.conf
# Whether updates should be applied when they are available. Note
# that download_updates must also be yes for the update to be applied.
apply_updates = yes
apply_updates = no 를 apply_updates = yes 로 변경하고 싶습니다 . 이제 yum-cron 의 업데이트 간격을 구성 해 보겠습니다 .
다시 말하지만, 자동 업데이트를 사용하고 필요에 따라 업데이트를 설치할지 여부는 양날의 검이 될 수 있으며 각 고유 한 상황에 대해 관리자가 고려해야합니다.
Bash Shell 소개
GNU Linux의 풍미와 마찬가지로 셸은 다양한 종류가 있으며 호환성이 다양합니다. CentOS의 기본 셸은 Bash 또는 Bourne Again Shell로 알려져 있습니다. Bash 셸은 Stephen Bourne이 개발 한 Bourne Shell의 현대적인 수정 버전입니다. Bash는 Ken Thompson과 Dennis Ritchie가 Bell Labs에서 개발 한 Unix 운영 체제의 원래 Thompson Shell을 직접 대체했습니다 (Stephen Bourne도 Bell Labs에 고용 됨).
누구나 좋아하는 껍질이 있고 각각의 장점과 어려움이 있습니다. 그러나 대부분의 경우 Bash는 모든 Linux 배포판에서 기본 셸이 될 것이며 가장 일반적으로 사용 가능합니다. 경험이 있으면 누구나 자신에게 가장 적합한 껍데기를 탐색하고 사용하고 싶어 할 것입니다. 그러나 동시에 모든 사람이 Bash 셸을 마스터하고 싶을 것입니다.
기타 Linux 셸에는 Tcsh, Csh, Ksh, Zsh 및 Fish가 포함됩니다.
전문가 수준에서 Linux 쉘을 사용하는 기술을 개발하는 것은 CentOS 관리자에게 매우 중요합니다. 앞서 언급했듯이 Windows와 달리 Linux의 핵심은 명령 줄 운영 체제입니다. 쉘은 관리자 (또는 사용자)가 운영 체제에 명령을 내릴 수 있도록하는 단순한 사용자 인터페이스입니다. Linux 시스템 관리자가 항공 조종사라면 셸을 사용하는 것은 비행기를 자동 조종 장치에서 내리고보다 기동성있는 비행을 위해 수동 제어 장치를 잡는 것과 비슷할 것입니다.
Bash와 같은 Linux 쉘은 Computer Science 용어로 Command Line Interpreter. Microsoft Windows에는 DOS (원래 DOS 운영 체제와 혼동하지 말 것) 및 PowerShell이라는 두 개의 명령 줄 인터프리터도 있습니다.
Bash와 같은 대부분의 최신 쉘은 constructs더 복잡한 쉘 스크립트 가 일반적인 작업과 복잡한 작업을 모두 자동화 할 수 있습니다.
구성은 다음을 포함합니다-
- 스크립트 흐름 제어 (ifthen 및 else)
- 논리적 비교 연산 (보다 큼,보다 작음, 같음)
- Loops
- Variables
- 작동을 정의하는 매개 변수 (명령이있는 스위치와 유사)
쉘 스크립트와 스크립팅 언어 사용
종종 작업 수행을 생각할 때 관리자는 스스로에게 묻습니다. 쉘 스크립트 나 Perl, Ruby 또는 Python과 같은 스크립팅 언어를 사용해야합니까?
여기에는 정해진 규칙이 없습니다. 쉘과 스크립팅 언어 사이에는 일반적인 차이점 만 있습니다.
껍질
Shell은 sed , grep , tee , cat 및 기타 모든 명령 줄 기반 유틸리티와 같은 Linux 명령을 Linux 운영 체제에서 사용할 수 있도록합니다. 실제로 거의 모든 명령 줄 Linux 유틸리티를 셸에서 스크립팅 할 수 있습니다.
셸을 사용하는 좋은 예는 DNS 확인을 위해 호스트 목록을 확인하는 빠른 스크립트입니다.
DNS 이름을 확인하는 간단한 Bash 스크립트-
#!/bin/bash
for name in $(cat $1); do host $name.$2 | grep "has address"
done
exit
DNS 확인을 테스트하는 작은 단어 목록-
dns
www
test
dev
mail
rdp
remote
google.com 도메인에 대한 출력 −
[rdc@centos ~]$ ./dns-check.sh dns-names.txt google.com
-doing dns
dns.google.com has address 172.217.6.46
-doing www
www.google.com has address 172.217.6.36
-doing test
-doing dev
-doing mail
googlemail.l.google.com has address 172.217.6.37
-doing rdp
-doing remote
[rdc@centos ~]$
쉘에서 간단한 Linux 명령을 활용하여 단어 목록에서 DNS 이름을 감사하는 간단한 5 줄 스크립트를 만들 수있었습니다. 멋지게 구현 된 DNS 라이브러리를 사용하더라도 Perl, Python 또는 Ruby에서 상당한 시간이 걸렸을 것입니다.
스크립팅 언어
스크립팅 언어는 쉘 외부에서 더 많은 제어를 제공합니다. 위의 Bash 스크립트는 Linux 호스트 명령 주위에 래퍼를 사용했습니다 . 더 많은 작업을 수행 하고 쉘 외부에서 상호 작용할 수 있도록 호스트 와 같은 자체 애플리케이션을 만들고 싶다면 어떨까요? 스크립팅 언어를 사용하는 곳입니다.
또한 고도로 유지되는 스크립팅 언어를 사용하면 대부분의 경우 다른 시스템에서 작업이 작동 할 것임을 알고 있습니다. 예를 들어 Python 3.5는 동일한 라이브러리가 설치된 Python 3.5를 실행하는 다른 시스템에서 작동합니다. Linux와 HP-UX 모두에서 BASH 스크립트를 실행하려면 그렇지 않습니다.
때때로 스크립팅 언어와 강력한 쉘 사이의 경계가 모호해질 수 있습니다. Python, Perl 또는 Ruby를 사용하여 CentOS Linux 관리 작업을 자동화 할 수 있습니다. 그렇게하는 것은 정말 흔한 일입니다. 또한 부유 한 쉘 스크립트 개발자는 Bash에서 간단하지만 기능적인 웹 서버 데몬을 만들었습니다.
스크립팅 언어 및 쉘에서 작업 자동화 경험이있는 CentOS 관리자는 문제를 해결해야 할 때 어디서부터 시작할지 신속하게 결정할 수 있습니다. 쉘 스크립트로 프로젝트를 시작하는 것은 매우 일반적입니다. 그런 다음 프로젝트가 더 복잡 해짐에 따라 스크립팅 (또는 컴파일 된) 언어로 진행합니다.
또한 프로젝트의 다른 부분에 스크립팅 언어와 셸 스크립트를 모두 사용하는 것이 좋습니다. 예를 들어 웹 사이트를 스크래핑하는 Perl 스크립트가 있습니다. 그런 다음 쉘 스크립트를 사용하여 sed , awk 및 egrep 로 구문 분석하고 형식을 지정하십시오 . 마지막으로 웹 GUI를 사용하여 형식화 된 데이터를 MySQL 데이터베이스에 삽입하기 위해 PHP 스크립트를 사용합니다.
셸에 대한 몇 가지 이론을 가지고 CentOS의 Bash 셸에서 작업을 자동화하기위한 기본 구성 요소부터 시작하겠습니다.
입력 출력 및 리디렉션
다른 명령으로 stdout 처리-
[rdc@centos ~]$ cat ~/output.txt | wc -l
6039
[rdc@centos ~]$
위에서 우리는 cat'sstoud 를 파이프 문자로 처리 하기 위해 wc 로 전달 했습니다 . 그런 다음 wc 는 cat 의 출력을 처리하여 output.txt의 행 수를 터미널에 인쇄합니다. 파이프 문자는 다음 명령에 의해 처리 될 한 명령의 출력을 전달하는 "파이프" 라고 생각하십시오 .
다음은 명령 리디렉션을 처리 할 때 기억해야 할 주요 개념입니다.
번호 | 파일 설명자 | 캐릭터 |
---|---|---|
0 | 표준 입력 | < |
1 | 표준 출력 | > |
2 | 표준 에러 | |
stdout 추가 | >> | |
리디렉션 할당 | & | |
stdout을 stdin으로 파이프 | | |
리디렉션이나 리디렉션 할당에 대해 많이 언급하지 않고 1 장에서이를 소개했습니다. Linux에서 터미널을 열면 쉘이 다음에 대한 기본 대상으로 표시됩니다.
- 표준 입력 <0
- 표준 출력> 1
- 표준 오류 2
이것이 어떻게 작동하는지 봅시다-
[rdc@centos ~]$ lsof -ap $BASHPID -d 0,1,2 COMMAND PID USER **FD** TYPE DEVICE SIZE/OFF NODE NAME bash 13684 rdc **0u** CHR 136,0 0t0 3 /dev/pts/0 bash 13684 rdc **1u** CHR 136,0 0t0 3 /dev/pts/0 bash 13684 rdc **2u** CHR 136,0 0t0 3 /dev/pts/0 [rdc@centos ~]$
/ dev / pts / 0 은 의사 터미널입니다. CentOS Linux는 이것을보고 우리의 개방형 터미널 애플리케이션을 직렬 인터페이스를 통해 연결된 키보드와 디스플레이가있는 실제 터미널처럼 생각합니다. 그러나 하이퍼 바이저가 하드웨어를 운영 체제로 추상화하는 것처럼 / dev / pts 는 터미널을 애플리케이션으로 추상화합니다.
위의 lsof 명령에서 다음을 볼 수 있습니다.FD세 파일 설명자가 모두 가상 터미널 (0,1,2)로 설정되어있는 열입니다. 이제 명령을 보내고 명령 출력 및 명령과 관련된 오류를 볼 수 있습니다.
다음은 STDIN 및 STDOUT의 예입니다.
STDOUT
[root@centosLocal centos]# echo "I am coming from Standard output or STDOUT." >
output.txt && cat output.txt
I am coming from Standard output or STDOUT.
[root@centosLocal centos]#
stdout 과 stderr 를 별도의 파일 로 보낼 수도 있습니다.
bash-3.2# find / -name passwd 1> good.txt 2> err.txt
bash-3.2# cat good.txt
/etc/pam.d/passwd
/etc/passwd
bash-3.2# cat err.txt
find: /dev/fd/3: Not a directory
find: /dev/fd/4: Not a directory
bash-3.2#
전체 파일 시스템을 검색 할 때 두 가지 오류가 발생했습니다. 각각은 나중에 열람 할 수 있도록 별도의 파일로 전송되었으며 반환 된 결과는 별도의 텍스트 파일에 저장되었습니다.
stderr 를 텍스트 파일 로 보내는 것은 응용 프로그램 컴파일과 같이 터미널에 많은 데이터를 출력하는 작업을 수행 할 때 유용 할 수 있습니다. 이렇게하면 터미널 스크롤 백 기록에서 손실 될 수있는 오류를 열람 할 수 있습니다.
STDOUT을 텍스트 파일로 전달할 때 한 가지 참고 사항은 >> 과 >. 이중 ">>"는 파일에 추가되고 단수 형식은 파일을 방해하고 새 내용을 작성합니다 (따라서 이전 데이터가 모두 손실 됨).
STDIN
[root@centosLocal centos]# cat < stdin.txt
Hello,
I am being read form Standard input, STDIN.
[root@centosLocal centos]#
위의 명령에서 텍스트 파일 stdin.txt 는 내용을 STDOUT에 에코 하는 cat 명령 으로 리디렉션되었습니다 .
파이프 문자 "|"
파이프 문자는 첫 번째 명령의 출력을 가져 와서 다음 명령의 입력으로 전달하여 보조 명령이 출력에 대한 작업을 수행 할 수 있도록합니다.
이제 cat의 stdout을 다른 명령으로 "파이프"해 보겠습니다.
[root@centosLocal centos]# cat output.txt | wc -l
2
[root@centosLocal centos]#
위의 wc 는 파이프에서 전달 된 cat의 출력을 계산합니다 . 여과로부터의 출력시 파이프 명령 특히 유용 그렙 또는 egrep을이 -
[root@centosLocal centos]# egrep "^[0-9]{4}$" /usr/dicts/nums | wc -l
9000
[root@centosLocal centos]#
위의 명령에서 우리 는 egrep 필터를 통해 전달 된 65535의 모든 숫자를 포함하는 텍스트 파일에서 모든 4 자리 숫자를 wc 로 전달했습니다 .
&를 사용하여 출력 리디렉션
출력은 &캐릭터. 출력을 STDOUT과 STDERR 모두 동일한 파일로 지정하려면 다음과 같이 수행 할 수 있습니다.
[root@centosLocal centos]# find / -name passwd > out.txt 2>&1
[root@centosLocal centos]# cat out.txt
find: /dev/fd/3: Not a directory
find: /dev/fd/4: Not a directory
/etc/passwd
[root@centosLocal centos]#
다음을 사용하여 리디렉션 &문자는 다음과 같이 작동합니다. 먼저 출력이 out.txt 로 리디렉션됩니다 . 둘째, STDERR 또는 파일 설명자 2가 STDOUT과 동일한 위치 (이 경우 out.txt )에 다시 할당됩니다 .
리디렉션은 매우 유용하며 대용량 텍스트 파일을 조작하고, 소스 코드를 컴파일하고, 셸 스크립트에서 출력을 리디렉션하고, 복잡한 Linux 명령을 실행할 때 발생하는 문제를 해결하는 데 유용합니다.
강력하지만 새로운 CentOS 관리자에게는 리디렉션이 복잡해질 수 있습니다. Linux 포럼 (예 : Stack Overflow Linux)에 대한 연습, 연구 및 비정기적인 질문은 고급 솔루션을 해결하는 데 도움이됩니다.
배쉬 쉘 구성
이제 우리는 Bash 쉘 이 어떻게 작동 하는지에 대한 좋은 아이디어를 얻었 으므로 스크립트를 작성하는 데 일반적으로 사용되는 몇 가지 기본 구조를 배우겠습니다. 이 섹션에서 우리는 탐구 할 것입니다-
- Variables
- Loops
- Conditionals
- 루프 제어
- 파일 읽기 및 쓰기
- 기본 수학 연산
BASH 문제 해결 힌트
BASH는 전용 스크립팅 언어에 비해 약간 까다로울 수 있습니다. BASH 스크립트에서 가장 큰 중단은 쉘로 전달되는 스크립트 작업을 잘못 이스케이프하거나 이스케이프하지 않는 것입니다. 스크립트를 몇 번 살펴 봤는데 예상대로 작동하지 않는다면 걱정하지 마십시오. 이것은 BASH를 사용하여 매일 복잡한 스크립트를 만드는 사람들에게도 일반적입니다.
Google을 빠르게 검색하거나 Linux 전문가 포럼에 가입하여 질문을하면 빠른 해결로 이어질 것입니다. 누군가가 정확한 문제를 발견하고 이미 해결되었을 가능성이 매우 높습니다.
BASH 스크립팅은 관리 작업 자동화에서 유용한 도구 만들기에 이르기까지 모든 것을위한 강력한 스크립트를 빠르게 만드는 훌륭한 방법입니다. 전문가 수준의 BASH 스크립트 개발자가 되려면 시간과 연습이 필요합니다. 따라서 가능하면 BASH 스크립트를 사용하십시오. CentOS 관리 도구 상자에 포함 할 수있는 훌륭한 도구입니다.
CentOS의 패키지 관리는 터미널과 그래픽 사용자 인터페이스의 두 가지 방법으로 수행 할 수 있습니다.
대부분의 경우 CentOS 관리자 시간의 대부분은 터미널을 사용합니다. CentOS 용 패키지 업데이트 및 설치도 다르지 않습니다. 이를 염두에두고 먼저 터미널에서 패키지 관리를 살펴본 다음 CentOS에서 제공하는 그래픽 패키지 관리 도구를 사용해 보겠습니다.
YUM 패키지 관리자
YUM 은 CentOS에서 패키지 관리를 위해 제공되는 도구입니다. 우리는 이전 장에서이 주제를 간략하게 다루었습니다. 이 장에서는 깨끗한 CentOS 설치에서 작업합니다. 먼저 설치를 완전히 업데이트 한 다음 응용 프로그램을 설치합니다.
YUM 은 Linux에서 소프트웨어 설치 및 관리를 먼 길로 가져 왔습니다. YUM 은 오래된 패키지와 함께 오래된 종속성을 "자동으로"확인합니다. 이것은 소스 코드에서 모든 애플리케이션을 컴파일하던 예전과 비교하여 CentOS 관리자의 부담을 덜어주었습니다.
yum 확인 업데이트
후보를 업데이트 할 수있는 패키지를 확인합니다. 이 튜토리얼에서는 패키지를 업그레이드하기 전에 DevOps에서 테스트해야하는 프로덕션 애플리케이션이없는 인터넷에 직면 할 프로덕션 시스템이라고 가정합니다. 이제 업데이트 된 후보를 시스템에 설치하겠습니다.
[root@localhost rdc]# yum check-update
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirror.scalabledns.com
* extras: mirror.scalabledns.com
* updates: mirror.clarkson.edu
NetworkManager.x86_64 1:1.4.0-19.el7_3 updates
NetworkManager-adsl.x86_64 1:1.4.0-19.el7_3 updates
NetworkManager-glib.x86_64 1:1.4.0-19.el7_3 updates
NetworkManager-libnm.x86_64 1:1.4.0-19.el7_3 updates
NetworkManager-team.x86_64 1:1.4.0-19.el7_3 updates
NetworkManager-tui.x86_64 1:1.4.0-19.el7_3 updates
NetworkManager-wifi.x86_64 1:1.4.0-19.el7_3 updates
audit.x86_64 2.6.5-3.el7_3.1 updates
vim-common.x86_64 2:7.4.160-1.el7_3.1 updates
vim-enhanced.x86_64 2:7.4.160-1.el7_3.1 updates
vim-filesystem.x86_64 2:7.4.160-1.el7_3.1 updates
vim-minimal.x86_64 2:7.4.160-1.el7_3.1 updates
wpa_supplicant.x86_64 1:2.0-21.el7_3 updates
xfsprogs.x86_64 4.5.0-9.el7_3 updates
[root@localhost rdc]#
yum 업데이트
그러면 CentOS 설치를 최신 상태로 만드는 모든 업데이트 된 후보가 설치됩니다. 새로 설치하면 설치 및 인터넷 연결 속도에 따라 약간의 시간이 걸릴 수 있습니다.
[root@localhost rdc]# yum update
vim-minimal x86_64 2:7.4.160-1.el7_3.1 updates 436 k
wpa_supplicant x86_64 1:2.0-21.el7_3 updates 788 k
xfsprogs x86_64 4.5.0-9.el7_3 updates 895 k
Transaction Summary
======================================================================================
Install 2 Packages
Upgrade 156 Packages
Total download size: 371 M
Is this ok [y/d/N]:
YUM을 통해 소프트웨어 설치
CentOS 시스템을 업데이트하는 것 외에도 YUM 패키지 관리자는 소프트웨어 설치를위한 도구입니다. 네트워크 모니터링 도구, 비디오 플레이어에서 텍스트 편집기에 이르기까지 모든 것이 YUM 을 사용하여 중앙 저장소에서 설치할 수 있습니다 .
일부 소프트웨어 유틸리티를 설치하기 전에 몇 가지 YUM 명령을 살펴 보겠습니다 . 일상 업무의 경우 CentOS 관리자의 YUM 사용량의 90 %가 약 7 개의 명령과 함께 사용됩니다. 우리는 일상적인 사용을 위해 능숙한 수준에서 YUM을 운영하는 것에 익숙해지기를 바라면서 각각을 다룰 것입니다. 그러나 대부분의 Linux 유틸리티와 마찬가지로 YUM은 항상 man 페이지를 통해 탐색 할 수있는 풍부한 고급 기능을 제공합니다. man yum 사용 은 항상 Linux 유틸리티로 익숙하지 않은 작업을 수행하는 첫 번째 단계입니다.
가장 일반적인 YUM 명령
다음은 일반적으로 사용되는 YUM 명령입니다.
명령 | 동작 |
---|---|
설치된 목록 | YUM을 통해 설치된 패키지 나열 |
모두 나열 | 현재 사용 가능한 모든 패키지를 나열합니다. |
그룹 목록 | 그룹화 된 패키지 나열 |
정보 | 패키지에 대한 자세한 정보를 제공합니다. |
검색 | 패키지 설명 및 이름 검색 |
설치 | 패키지 설치 |
localinstall | 로컬 rpm 패키지를 설치합니다. |
없애다 | 패키지 제거 및 설치 |
모두 청소 | / var / cache / yum을 정리하여 디스크 공간을 확보합니다. |
남자 얌 | 모든 Linux 명령과 마찬가지로 도움말 파일 |
YUM으로 소프트웨어 설치
이제 텍스트 기반 웹 브라우저를 설치합니다. Lynx. 설치하기 전에 먼저 Lynx 웹 브라우저가 포함 된 패키지 이름을 가져와야합니다. 기본 CentOS 저장소가 Lynx 웹 브라우저 용 패키지를 제공하는지 100 % 확신하지 못하므로 검색하여 살펴 보겠습니다.
[root@localhost rdc]# yum search web browser
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirror.scalabledns.com
* extras: mirror.scalabledns.com
* updates: mirror.clarkson.edu
=================================================================
N/S matched: web, browser
==================================================================
icedtea-web.x86_64 : Additional Java components for OpenJDK - Java browser
plug-in and Web Start implementation
elinks.x86_64 : A text-mode Web browser
firefox.i686 : Mozilla Firefox Web browser
firefox.x86_64 : Mozilla Firefox Web browser
lynx.x86_64 : A text-based Web browser
Full name and summary matches only, use "search all" for everything.
[root@localhost rdc]#
CentOS는 저장소에서 Lynx 웹 브라우저를 제공합니다. 패키지에 대한 추가 정보를 살펴 보겠습니다.
[root@localhost rdc]# lynx.x86_64
bash: lynx.x86_64: command not found...
[root@localhost rdc]# yum info lynx.x86_64
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirror.scalabledns.com
* extras: mirror.scalabledns.com
* updates: mirror.clarkson.edu
Available Packages
Name : lynx
Arch : x86_64
Version : 2.8.8
Release : 0.3.dev15.el7
Size : 1.4 M
Repo : base/7/x86_64
Summary : A text-based Web browser
URL : http://lynx.isc.org/
License : GPLv2
Description : Lynx is a text-based Web browser. Lynx does not display any images,
: but it does support frames, tables, and most other HTML tags. One
: advantage Lynx has over graphical browsers is speed; Lynx starts and
: exits quickly and swiftly displays web pages.
[root@localhost rdc]#
좋은! 버전 2.8이 충분히 최신 버전이므로 Lynx를 설치하겠습니다.
[root@localhost rdc]# yum install lynx
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirror.scalabledns.com
* extras: mirror.scalabledns.com
* updates: mirror.clarkson.edu
Resolving Dependencies
--> Running transaction check
---> Package lynx.x86_64 0:2.8.8-0.3.dev15.el7 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
===============================================================================
===============================================================================
Package Arch
Version Repository Size
===============================================================================
===============================================================================
Installing:
lynx x86_64
2.8.80.3.dev15.el7 base 1.4 M
Transaction Summary
===============================================================================
===============================================================================
Install 1 Package
Total download size: 1.4 M
Installed size: 5.4 M
Is this ok [y/d/N]: y
Downloading packages:
No Presto metadata available for base
lynx-2.8.8-0.3.dev15.el7.x86_64.rpm
| 1.4 MB 00:00:10
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : lynx-2.8.8-0.3.dev15.el7.x86_64
1/1
Verifying : lynx-2.8.8-0.3.dev15.el7.x86_64
1/1
Installed:
lynx.x86_64 0:2.8.8-0.3.dev15.el7
Complete!
[root@localhost rdc]#
다음으로 Lynx가 실제로 올바르게 설치되었는지 확인하겠습니다.
[root@localhost rdc]# yum list installed | grep -i lynx
lynx.x86_64 2.8.8-0.3.dev15.el7 @base
[root@localhost rdc]#
큰! Lynx를 사용하여 "좋아요"와 예쁜 그림없이 웹이 어떻게 보이는지 살펴 보겠습니다.
[root@localhost rdc]# lynx www.tutorialpoint.in
이제 웹을 통해 실행되는 원격 공격에 대해 크게 걱정하지 않고 사용할 수있는 프로덕션 서버용 웹 브라우저가 생겼습니다. 이것은 프로덕션 서버에 좋은 것입니다.
거의 완성되었지만 먼저 개발자가 애플리케이션을 테스트 할 수 있도록이 서버를 설정해야합니다. 따라서 작업에 필요한 모든 도구가 있는지 확인합시다. 우리는 모든 것을 개별적으로 설치할 수 있지만 CentOS와 YUM은 이것을 훨씬 더 빠르게 만들었습니다. 개발 그룹 패키지를 설치해 보겠습니다 .
[root@localhost rdc]# yum groups list
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirror.scalabledns.com
* extras: mirror.scalabledns.com
* updates: mirror.clarkson.edu
Available Groups:
Compatibility Libraries
Console Internet Tools
Development Tools
Graphical Administration Tools
Legacy UNIX Compatibility
Scientific Support
Security Tools
Smart Card Support
System Administration Tools
System Management
Done
[root@localhost rdc]#
이것은 CentOS에서 제공하는 작은 패키지 그룹 목록입니다. "개발 그룹"에 포함 된 내용을 살펴 보겠습니다.
[root@localhost rdc]# yum group info "Development Tools"
Loaded plugins: fastestmirror, langpacks
There is no installed groups file.
Maybe run: yum groups mark convert (see man yum)
Loading mirror speeds from cached hostfile
* base: mirror.scalabledns.com
* extras: mirror.scalabledns.com
* updates: mirror.clarkson.edu
Group: Development Tools
Group-Id: development
Description: A basic development environment.
Mandatory Packages:
autoconf
automake
binutils
bison
출력의 첫 화면은 위와 같습니다. 이 전체 목록은 다소 포괄적입니다. 그러나이 그룹은 일반적으로 시간이 지남에 따라 전체를 설치해야합니다. 전체 개발 그룹을 설치하겠습니다.
[root@localhost rdc]# yum groupinstall "Development Tools"
이것은 더 큰 설치가 될 것입니다. 완료되면 서버에 Perl, Python, C 및 C ++ 용 대부분의 개발 라이브러리와 컴파일러가 있습니다.
CentOS의 그래픽 패키지 관리
Gnome Desktop은 다음과 같은 그래픽 패키지 관리 도구를 제공합니다. Software. 사용하기 쉽고 간단합니다. CentOS 용 Gnome 패키지 관리 도구 인 소프트웨어는 응용 프로그램 → 시스템 도구 → 소프트웨어로 이동하여 찾을 수 있습니다.
소프트웨어 패키지 관리 도구는 관리자가 설치할 패키지를 선택할 수있는 그룹으로 나뉩니다. 이 도구는 최종 사용자의 사용 편의성과 단순성에 적합하지만 YUM은 훨씬 더 강력하며 관리자가 더 많이 사용할 것입니다.
다음은 실제로 시스템 관리자 용이 아닌 소프트웨어 패키지 관리 도구의 스크린 샷입니다.
Logical Volume Management (LVM)Linux에서 서로 다른 물리적 하드 디스크의 스토리지 볼륨을 관리하는 데 사용하는 방법입니다. RAID와 혼동하지 마십시오. 그러나 RAID 0 또는 J-Bod와 유사한 개념으로 생각할 수 있습니다. LVM을 사용하면 (예를 들어) 각각 1TB의 물리 디스크 3 개를 보유한 다음 / dev / sdb와 같은 약 3TB의 논리 볼륨을 가질 수 있습니다. 또는 1.5TB의 논리적 볼륨 2 개, 500GB의 5 개 볼륨 또는 임의의 조합. 논리 볼륨의 스냅 샷에 단일 디스크를 사용할 수도 있습니다.
Note− 논리 볼륨을 사용하면 올바르게 구성된 경우 실제로 디스크 I / O가 증가합니다. 이는 별도의 디스크에 데이터를 스트라이핑하는 RAID 0과 유사한 방식으로 작동합니다.
LVM을 사용한 볼륨 관리에 대해 배울 때 LVM의 각 구성 요소가 무엇인지 아는 것이 더 쉽습니다. 각 구성 요소를 확실히 파악하려면 다음 표를 참조하십시오. 필요한 경우 Google을 사용하여 공부하세요. 논리 볼륨의 각 부분을 이해하는 것은이를 관리하는 데 중요합니다.
PV | 물리적 볼륨 | sda |
PP | 물리적 파티션 | sda1, sda2 |
VG | 볼륨 그룹 | 풀링 된 물리적 리소스 |
LV | 논리 볼륨 | 운영 체제에 대한 저장 시설로 간주 |
ㅏ physical volume/ dev / sda, / dev / sdb로 표시됩니다. Linux에서 감지되는 물리적 디스크.
ㅏ physical partitionfdisk와 같은 디스크 유틸리티에 의해 분할 된 디스크의 섹션입니다. 대부분의 일반적인 LVM 설정에서는 물리 분할을 권장하지 않습니다. 예 : 디스크 / dev / sda는 두 개의 물리적 파티션 ( / dev / sda1 및 / dev / sda1) 을 포함하도록 분할됩니다.
각각 1TB의 물리적 디스크 2 개가있는 경우 둘 중 거의 2TB 의 볼륨 그룹 을 만들 수 있습니다 .
볼륨 그룹 에서 총 볼륨 그룹 크기를 초과하지 않는 크기에 관계없이 각각 3 개의 논리 볼륨을 만들 수 있습니다 .
기존 Linux 디스크 관리 도구
CentOS 7의 LVM 관리를위한 최신의 가장 뛰어난 기능을 갖춘 도구에 익숙해지기 전에 먼저 Linux 디스크 관리에 사용 된 기존 도구를 살펴 봐야합니다. 이러한 도구는 편리하며 System Storage Manager와 같은 오늘날의 고급 LVM 도구 인 lsblk, parted 및 mkfs.xfs와 함께 계속 사용할 수 있습니다.
이제 시스템에 다른 디스크 한두 개를 추가했다고 가정하면 Linux에서 감지 한 디스크를 열거해야합니다. 나는 항상 파괴적인 것으로 간주되는 작업을 수행하기 전에 매번 디스크를 열거하는 것이 좋습니다.lsblk디스크 정보를 얻기위한 훌륭한 도구입니다. CentOS가 어떤 디스크를 감지하는지 살펴 보겠습니다.
[root@localhost rdc]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 19G 0 part
├─cl-root 253:0 0 17G 0 lvm /
└─cl-swap 253:1 0 2G 0 lvm [SWAP]
sdb 8:16 0 6G 0 disk
sdc 8:32 0 4G 0 disk
sr0 11:0 1 1024M 0 rom
보시다시피이 시스템에는 sda, sdb 및 sdc의 세 개의 디스크가 있습니다.
Disk sda에는 작동중인 CentOS 설치가 포함되어 있으므로 sda를 사용하고 싶지 않습니다. 이 자습서에서는 sdb 와 sdc 가 모두 시스템에 추가되었습니다. 이 디스크를 CentOS에서 사용할 수 있도록 만들어 보겠습니다.
디스크 레이블 만들기
[root@localhost rdc]# parted /dev/sdb mklabel GPT
Warning: The existing disk label on /dev/sdb will be destroyed and all data on this
disk will be lost. Do you want to continue?
Yes/No? Yes
[root@localhost rdc]#
이제 레이블이 지정된 하나의 디스크가 있습니다. sdc 에서 동일한 방식으로 parted 명령을 실행하기 만하면 됩니다.
디스크에 파티션 만들기
각 디스크에 하나의 파티션 만 생성합니다. 파티션을 생성하려면 parted 명령이 다시 사용됩니다.
[root@localhost rdc]# parted -a opt /dev/sdb mkpart primary ext4 0% 100%
Warning − 0.00B에서 6442MB (섹터 0..12582911)의 파티션을 요청했습니다.
우리가 관리 할 수있는 가장 가까운 위치는 17.4kB에서 1048kB (섹터 34..2047)입니다.
그래도 괜찮습니까?
예 아니오? 아니
[root@localhost rdc]# parted -a opt /dev/sdc mkpart primary ext4 0% 100%
Information − / etc / fstab을 업데이트해야 할 수도 있습니다.
[root@localhost rdc]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1G 0 part / boot
└─sda2 8:2 0 19G 0 part
├─cl-root 253:0 0 17G 0 lvm /
└─cl-swap 253:1 0 2G 0 lvm [SWAP]
sdb 8:16 0 6G 0 disk
└─sdb1 8:17 0 6G 0 part
sdc 8:32 0 4G 0 disk
└─sdc1 8:33 0 4G 0 part
sr0 11:0 1 1024M 0 rom
[root@localhost rdc]#
lsblk 출력에서 볼 수 있듯이 이제 sdb와 sdc에 각각 두 개의 파티션이 있습니다.
파일 시스템 만들기
마지막으로 볼륨을 마운트하고 사용하기 전에 파일 시스템을 추가해야합니다. XFS 파일 시스템을 사용할 것입니다.
root@localhost rdc]# mkfs.xfs -f /dev/sdb1
meta-data = /dev/sdb1 isize = 512 agcount = 4, agsize = 393088 blks
= sectsz = 512 attr = 2, projid32bit = 1
= crc = 1 finobt = 0, sparse = 0
data = bsize = 4096 blocks = 1572352, imaxpct = 25
= sunit = 0 swidth = 0 blks
naming = version 2 bsize = 4096 ascii-ci = 0 ftype = 1
log = internal log bsize = 4096 blocks = 2560, version = 2
= sectsz = 512 sunit = 0 blks, lazy-count = 1
realtime = none extsz = 4096 blocks = 0, rtextents = 0
[root@localhost rdc]# mkfs.xfs -f /dev/sdc1
meta-data = /dev/sdc1 isize = 512 agcount = 4, agsize = 262016 blks
= sectsz = 512 attr = 2, projid32bit = 1
= crc = 1 finobt = 0, sparse = 0
data = bsize = 4096 blocks = 1048064, imaxpct = 25
= sunit = 0 swidth = 0 blks
naming = version 2 bsize = 4096 ascii-ci = 0 ftype = 1
log = internal log bsize = 4096 blocks = 2560, version = 2
= sectsz = 512 sunit = 0 blks, lazy-count = 1
realtime = none extsz = 4096 blocks = 0, rtextents = 0
[root@localhost rdc]#
각각에 사용 가능한 파일 시스템이 있는지 확인하겠습니다.
[root@localhost rdc]# lsblk -o NAME,FSTYPE
NAME FSTYPE
sda
├─sda1 xfs
└─sda2 LVM2_member
├─cl-root xfs
└─cl-swap swap
sdb
└─sdb1 xfs
sdc
└─sdc1 xfs
sr0
[root@localhost rdc]#
각각은 이제 XFS 파일 시스템을 사용하고 있습니다. 마운트하고 마운트를 확인한 다음 각각에 파일을 복사 해 보겠습니다.
[root@localhost rdc]# mount -o defaults /dev/sdb1 /mnt/sdb
[root@localhost rdc]# mount -o defaults /dev/sdc1 /mnt/sdc
[root@localhost ~]# touch /mnt/sdb/myFile /mnt/sdc/myFile
[root@localhost ~]# ls /mnt/sdb /mnt/sdc
/mnt/sdb:
myFile
/mnt/sdc:
myFile
이 시점에서 두 개의 사용 가능한 디스크가 있습니다. 그러나 수동으로 마운트 할 때만 사용할 수 있습니다. 부팅시 각각을 마운트하려면 fstab 파일을 편집해야 합니다. 또한 새 디스크에 액세스해야하는 그룹에 대한 권한을 설정해야합니다.
볼륨 그룹 및 논리 볼륨 생성
CentOS 7에 추가 된 가장 큰 기능 중 하나는 System Storage Manager 또는 ssm 이라는 유틸리티가 포함 된 것입니다 .System Storage Manager Linux에서 LVM 풀 및 스토리지 볼륨 관리 프로세스를 크게 단순화합니다.
CentOS에서 간단한 볼륨 풀과 논리 볼륨을 만드는 과정을 살펴 보겠습니다. 첫 번째 단계는 System Storage Manager를 설치하는 것입니다.
[root@localhost rdc]# yum install system-storage-manager
ssm list 명령을 사용하여 디스크를 살펴 보겠습니다 .
위에서 본 것처럼 총 3 개의 디스크가 시스템에 설치됩니다.
/sdba1 − CentOS 설치 호스팅
/sdb1 − / mnt / sdb에 마운트 됨
/sdc1 − / mnt / sdc에 장착
우리가 원하는 것은 두 개의 디스크 (sdb와 sdc)를 사용하여 볼륨 그룹 을 만드는 것 입니다. 그런 다음 시스템에서 3GB 논리 볼륨을 사용할 수 있도록합니다.
볼륨 그룹을 만들어 보겠습니다.
[root@localhost rdc]# ssm create -p NEW_POOL /dev/sdb1 /dev/sdc1
기본적으로 ssm 은 풀의 전체 10GB를 확장하는 단일 논리 볼륨을 생성합니다. 우리는 이것을 원하지 않으므로 이것을 제거합시다.
[root@localhost rdc]# ssm remove /dev/NEW_POOL/lvol001
Do you really want to remove active logical volume NEW_POOL/lvol001? [y/n]: y
Logical volume "lvol001" successfully removed
[root@localhost rdc]#
마지막으로 3 개의 논리 볼륨을 생성 해 보겠습니다.
[root@localhost rdc]# ssm create -n disk001 --fs xfs -s 3GB -p NEW_POOL
[root@localhost rdc]# ssm create -n disk002 --fs xfs -s 3GB -p NEW_POOL
[root@localhost rdc]# ssm create -n disk003 --fs xfs -s 3GB -p NEW_POOL
이제 새 볼륨을 확인하겠습니다.
이제 두 개의 물리적 디스크 파티션에 걸쳐있는 세 개의 개별 논리적 볼륨이 있습니다.
논리 볼륨은 이제 CentOS Linux에 내장 된 강력한 기능입니다. 우리는 이것들을 관리하는 데 표면을 만졌습니다. 마스터 링 풀 및 논리 볼륨에는 Tutorials Point에서 연습 및 확장 학습이 제공됩니다. 지금까지 CentOS에서 LVM 관리의 기본 사항을 배웠으며 단일 호스트에서 기본 스트라이프 논리 볼륨을 생성하는 기능을 보유하고 있습니다.