W03 리눅스 어드민
3주차에 진행된 Linux Admin 과정의 종합 정리.
Admin과정이 뭔가했는데 서버 운영 관련 주요 시스템 설정을 관리하는 법을 의미하는 듯 하다.
주요 키워드
- 사용자 및 그룹 관리, 권한 관리(ACL),
 - 작업예약(at/crond)
 - 디스크 마운트 및 RAID
 - systemd와 daemon,
 - RPM 및 YUM 패키지 관리
 - Network Manager 및 nmcli,
 
사용자 및 그룹 관리
| 생성 | 변경 | 삭제 | |
|---|---|---|---|
| useradd\groupadd | usermod\groupmod | userdel | groupdel | 
유저 비밀번호를 설정할때, -p 옵션 대신 passwd 명령어로 설정   
그냥-p로 할시 암호화가 되어있지않아 로그인 불가
> /etc/passwd 유저 정보가 저장됨.  
유저명:암호:UID:GID:Comment:홈디렉토리:사용SHELL   
user1:x:1000:1000:usercommenttest:/home/user1:/bin/bash
> /etc/group 그룹 정보가 저장됨. 
그룹명:암호:GID     
user1:x:1000
> /etc/shadow 유저 비밀번호 정보가 저장됨. 
> /etc/gshadow 그룹 비밀번호 정보가 저장됨.
권한설정
리눅스 파일, 디렉토리 권한 확인
ls - l
파일종류,권한,링크수,사용자,그룹,파일크기.수정시간,파일이름     
-rwxr-xr-x. 1 encore encore 5720 Feb 21 14:32 testdir
- - 파일(-),디렉토리(d)
 - rwx 사용자 권한
 - r-x 그룹 권한
 - r-x 기타(other)권한
 - . ACL 설정여부 . ACL 설정없음 / + ACL 설정있음
 
권한 변경
chmod 권한명 경로/파일명
- 
    
기호로 변경하는법
chmod 카테고리,연산자기호,권한문자 대상 파일구분 문자 의미 카테고리 u/g/o/a 사용자/그룹/기타/전체 연산자기호 +/-/= 권한부여/권한제거/권한설정 권한문자 r/w/x 읽기권한/쓰기권한/실행권한  - 
    
숫자로 변경하는법 rwx로 표시되는 권한은 2진수 3자리로 간주하여 8진수 숫자로 권한을 부여할 수 있다
chmod 숫자 대상파일접근권한 숫자표시 rwxrwxrwx 777 rwxr-xr-x 755 rw-r–r– 644  
특수권한
- setuid,setgid,sticky bit
 - 권한 문자앞에 부여하여 특수한 권한을 부여할 수 있음
    
- setuid: 실행시에만 소유자 권한으로 실행; 권한을 빌려옴
 - setgid: 실행시에만 그룹 권한으로 실행; 권한을 빌려옴
 - sticky bit: 생성은 자유롭지만 변경 및 삭제 불가; 공유모드
 
구분 문자 의미 uid 4000\u+s 실행권한이 있으면 소문자s, 없으면 대문자S gid 2000\g+s 실행권한이 있으면 소문자s, 없으면 대문자S sticky bit 1000\u+t 실행권한이 있으면 소문자t, 없으면 대문자T  - ACL
 - Access Control List, 파일이나 디렉토리에 특정 사용자 또는 그룹의 권한 부여
    
- getfacl 파일명또는디렉토리명 > ACL 설정 조회
 - setfacl -m u:유저명:권한 g:그룹명:권한 o::권한 파일명또는디렉토리명
 - -m > mask. 최소한의 권한, 특정사용자나 그룹에게 권한을 부여해도 effective 가 mask에 맞춰 줄어듬
 - setfacl -b 옵션으로 제거가능
 
 
작업 예약
- 
    
단발성 작업 예약
- at 명령어
 - 작업 저장 경로: /var/spool/at/
 
at [option] "시간" "시간" > 시간이나 yy-mm-dd -t 시간형식 > 자세한 입력방법은 man at 참고 -f 파일명 > 파일 실행 -l > 예약 작업 리스트 확인 -c 작업번호 > 예약 작업 상세보기 -d 작업번호 > 예약 작업 삭제 - 
    
반복적 작업 예약
- crontab 명령어
 - 작업 저장 경로: /var/spool/cron
 - 실행 로그 확인: cat /var/log/cron
 
vi /etc/crontab 파일 편집으로 작성 > * * * * * 유저명 커맨드 또는 crontab 옵션 -e > 작성 및 편집 -l > 예약 작업 확인 -r > 예약 작업 전체 삭제.—————- minute (0 - 59)
| .————- hour (0 - 23)
| | .———- day of month (1 - 31)
| | | .——- month (1 - 12) OR jan,feb,mar,apr …
| | | | .—- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
| | | | | * * * * * user-name command to be executed
분 시 일 월 요일 사용자계정 명령어
3 9 3 * * nasir17 ps -aux > ~/pslis_”$(date ‘+%y%m’)”.txt
*/5 15 * * 2 유저명 할일
0 8,19 1-7 * 3 유저명 할일메타 문자 사용 가능
* 전체, - 범위지정, / 조건에 대한 주기 
소유권 변경
chown 소유자:소유그룹 파일명또는디렉토리명
디스크 장치 추가하기
- 장치인식 > 파티셔닝 > 파일시스템 생성 > 마운트
 
파티셔닝
- 
    
Partitioning, 추가된 장치의 용량을 사용할 만큼 나눔
 - 
    
파티셔팅 툴 : fdisk, gdisk, parted (parted gui)
- fdisk, gdisk 대화형으로 가능, 명령어가 한 문자 (MBR , 요즘은 gpt)
 - parted : 대화형 / 쉘 둘다 가능. (MBR, GPT)
 
ls -l /dev/sd* 장치인식 확인 blkid : 장치의 UUID 확인 lsblk : 장치 목록 ( 마운트 포인트 등) 
파일시스템 생성
```
mkfs -t xfs -d name=/dev/sdc1
mkfs.xfs /dev/sdc1
-f 옵션으로 강제 생성 가능
```
마운트
- 
    
수동 마운트
mount 장치경로 마운트포인트 mount /dev/sdc1 /mounttest 마운트해제는 unmount 장치경로 또는 마운트포인트 - 
    
자동 마운트
blkid 명령어로 장치의 UUID 확인 vi /etc/fstab 에서 필요한 정보를 기입하여 자동마운트 입력 
fdisk 파티셔닝
```
fdisk 옵션 디렉토리경로
fdisk -l 현재 파티셔닝 상황 조회
```
- fdisk /dev/sdc > fdisk 파티셔닝 시작
 - m 또는 help > 도움말 조회
 - o > MBR로 설정 / g > GPT로 설정 (파티션 테이블 라벨 생성)
 - p > 파티션 테이블 라벨 조회
 - n > 신규 파티션 설정
 - t > 파티션 타입 변경
 - d > 파티션 삭제
 - w > 파티션 설정 정보 저장
 - q > fdisk 종료
 
parted 파티셔닝
```
parted 옵션 디렉토리경로
parted -l 현재 파티셔닝 상황 조회
```
- parted /dev/sdc > parted 파티셔닝 시작
 - help > 도움말 보기
 - mklabel 라벨명 > 라벨 생성
 - mkpart > 파티션 생성
 - print > 작업완료 후 결과 확인
 - quit > parted 종료
 
Swap
Logical Volume
- Logical Volume : 유연한 스토리지 관리 기능을 제공함.
 - 장점 :
    
- 파티션의 구조와 상관없이 원하는 크기의 논리볼륨을 생성 가능
 - 논리볼륨이 부족시, 볼륨 확장 가능 (데이터 유지한 채로)
 - 데이터를 유지한 상태에서 논리볼륨을 구성하고 있는 디스크 제거 가능
 - RAID 적용한 볼륨 생성 가능
 - 스냅샷 (snapshot) - 특정 시점의 데이터 보존 가능
 
 - 디스크장치 여러개 장착 > 1개 파티셔닝 > Physical volume 생성 > Volume Group 생성 > Logical Volume 생성
 
시스템을 끄고, disk 장착 > 부팅 > fdisk로 파티셔닝 (type : linux lvm) > pv 생성 > vg 생성 > lv 생성 > 파일 시스템 생성 > 마운트
RAID
- 씬 프로비저닝
 
Systemd unit
#systemctl list-units 
journalctl
부팅 프로세스
- 
    
부팅 과정
- 부팅 절차를 왜 알아야하나?
        
- 시스템 부팅중에 문제 발생시 해결하기 위해.
 
 - init 부팅 과정
 - systmed 부팅 과정
 
 - 부팅 절차를 왜 알아야하나?
        
 - target  종류
    
- default.target
        
- 부팅 후 가장 먼저 실행되는 target으로 연결되는 심볼릭 링크 파일
            
#ls -l /etc/systemd/system/default.target
 - 주로 multi-user.target 또는 graphical.target으로 연결됨
 
 - 부팅 후 가장 먼저 실행되는 target으로 연결되는 심볼릭 링크 파일
            
 - graphical.target
        
- 그래픽 환경 GUI의 다중 사용자 모드 , runlevel 5
 - 사용자화 가능
 - 시스템이 부팅될 때 graphical.target 단계에서, /etc/systemd/system/graphical.target.wants 내에 존재하는 unit을 실행함.
 - target 유닛 파일의 Requires/After 옵션에 의해 multi-user.target 지정되어 있음.
            
- multi-user.target을 먼저 활성화 해야함
 
 - multi-user.target 환경과 유사
 - Server with GUI 또는 GNOME Desktop 패키지 설치해야함
 
 - multi-user.target
        
- 커맨드 환경CLI의 다중 사용자 모드 , runlevel 2/3/4
 - 사용자화 가능
 - init 프로세스의 런레벨 3과 맵핑됨.-> runlevel3.target도 가능
 - 시스템이 부팅될 때 multi-user.target 단계에서 /etc/systemd/systemd/multi-user.target.wants 내에 존재하는 unit을 실행함.
 - target 유닛 파일의 Requires/After 옵션에 의해 basic.target이 지정되어 있음 (basic.target이 먼저 실행 필요)
 - /(루트), /etc/fstab 마운트
 - 대부분의 서비스 실행
 - NIC 활성화, 여러 사용자 로그인 가능
 - 그래픽 도구 사용 못함.
 
 - basic.target
        
- firewalld, microcode, SELinux, 커널 메시지와 관련된 서비스를 시작하거나 모듈을 로드(Load) 함
 - 시스템이 부팅될 때 basic.target 단계에서 /etc/systemd/system/basic.target.wants 내에 존재하는 unit을 실행함.
 - target 유닛 파일의 Requires/After 옵션에 의해 sysinit.target이 지정되어 있음 (sysinit.target이 먼저 실행 필요)
 
 - sysinit.target
        
- 사용자 사용 불가
 - 시스템 마운트, 스왑, 커널의 추가 옵션을 실행하는 서비스를 시작.
 - 시스템이 부팅될 때 sysinit.target 단계에서 /etc/systemd/system/sysinit.target.wants 내에 존재하는 unit을 실행함
 - target 유닛 파일의 Requires/After 옵션에 의해 local-fs.target이 지정되어 있음 (local-fs.target 먼저 실행 필요)
 
 - local-fs.target
        
- /etc/fstab에 등록된 마운트 정보로 파일시스템을 마운트 함.
 - target 유닛 파일의 After 옵션에 의해 local-fs-pre.target 지정.
            
- local-fs-pre.target 먼저 활성화 필요
 
 
 - poweroff.target
        
- 시스템 shutdown -> poweroff , runlevel 0
 - 실행 중인 서비스만 종료 (간단/빠르게 종료)  
#systemctl poweroff
#shutdown -h now 
 - reboot.target
        
- 시스템 shutdown -> reboot , runlevel 6  
#systemctl reboot
#shutdown -r now 
 - 시스템 shutdown -> reboot , runlevel 6  
 - emergency.target
        
- 긴급 쉘 emergency shell.
 - 가능한한 최소한의 환경 제공. (root 인증 필수)
 - 부팅 중 오류 발생 시 rescue.target 부팅됨 -> 복구 쉘 -> 트리블슈팅
 - rescue.target 실행전 오류 발생시 emergency.target 지정 -> 복구 쉘 -> 트러블슈팅
 - /(루트) : 읽기 전용ro 마운트 (그외 unmount)
 - 네트워크 비활성화. 최소한의 서비스만 활성화
 - 시스템 파일 수정시 읽기쓰기rw로 리마운트 필요
 
 - rescue.target (복구)
        
- 복구 쉘 rescue shell , runlevel 1
 - 사용자 가능 (단일 사용자, root 인증 필수)
 - 부팅 시 부팅을 완료할 수 없을 때 사용
 - sysinit.target, rescue.service 활성화되어야 rescue.target활성화됨.
 - /(루트) : 읽기쓰기로 마운트
 - 모든 파일 시스템을 마운트 시도, 중요한 서비스 시작함.
 - NIC 비활성화, 여러 사용자 로그인 안됨.
 
 
 - default.target
        
 - default target 설정 (시스템을 켰을 때, 어떤 타켓으로 부팅을 하겠는지 기본 값)
    
- 런레벨 확인 #who -r
 - default.target 확인 #systemctl get-default
 - default.target 설정
        
#systemctl set-default multi-user.target #systemctl set-default graphical.target #shutdown -r now - 지금 현재 target unit 전환  
#systemtcl isolate multi-user.target 
 - 부팅 과정 중 target unit 지정
    
- boot loader 중단 e(편집) -> linux16 라인 마지막에 systemd.unit=target-unit입력
 - -> ctrl+x (실행) 부팅이어서
 
 
부트 로더 (GRUB)
- root 암호 재설정
    
- 시스템 재부팅
 - 부트 로더 (boot loader) 중 화살표 (카운트 중단) -> 커널이미지 선택 (가장 최신 커널이미지) -> e 커널항목 수정
 - linux16 라인 끝에 -> rd.break -> ctrl+x (램디스크 초기화를 중단)
 - ”/” 읽기전용 마운트라서 읽기쓰기로 remount
        
#mount | grep -w '/sysroot' #mount -o remount,rw /sysroot #chroot /sysroot (루트 디렉토리 변경) - 암호 변경 #passwd
 - label 재지정 (chroot 명령어 입력시 레이블정보가 제거됨)
        
#touch /.autorelabel #exit #reboot (재부팅) 
 
systemd-analyze 명령어 : systemd 분석
패키지 관리
소프트웨어 패키지 : rpm , yum
처음에 프로그램 설치 시 : 아카이브 파일이나 압축파일 다운로드 -> 원본 소스 파일 추출 -> 컴파일 -> 실행파일을 설치 :번거로움
쉽게 설치하기 위해 소프트웨어 패키지 (software package) : 특정 서비스를 운영하기 위해 필요로 하는 프로그램 또는 도구를 쉽게 설치하고 관리 할 수 있도록 하나의 패키지로 묶어서 제공하는 것.
rpm
RPM : redhat package manager 패키지 관리 도구
RPM 패키지 파일 형식 : 
	httpd-2.4.6-40.el7.centos.x86_64.rpm
	httpd - 2.4.6 - 40.el7.centos . x86_64 . rpm
	패키지이름-버전정보-릴리즈정보.아키텍처정보.파일확장자
	openssh-7.4p1-21.el7.x86_64
*종속성(의존성) : 어떤 패키지를 사용하기 위해 특정 패키지나 라이브러리 파일이 필요함 (사진 설치)
패키지 확인
#rpm -q [query-option] [query-argument]
-q with	-a all
		-f 파일이나 디렉토리
		-c 설정파일
		-d 문서파일
		-i  자세한 정보 확인
		-l 파일 목록 확인
		-s  파일 상태 확인
		-R 종속성  패키지 확인
#rpm -qa
#rpm -qf /var/log
#rpm -qc crond
#rpm -qd sshd
#rpm -ql sshd
#rpm -qs crond
#rpm -qi atd
#rpm -qR sshd
yum
- Yellowdog Updater Modified
 - RPM 기반의 패키지의 설치, 제거 그리고 업데이트를 관리하는 도구
 - Repository레포지토리(저장소)에 패키지를 저장하고 관리하기 때문에 업데이트를 쉽게 함
    
- Repository : 패키지들을 저장해놓은 하나의 서버
 - /etc/yum.repos.d/*.repo
        
ex) /etc/yum.repos.d/test.repo [repoID] name= mirrorlist= 또는 baseurl=http:// gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/keyfilename #yum repolist (활성화되어있는 저장소만 확인) #yum repolist all패키지 정보 확인
 
 - #yum info httpd
 - 상세 정보(패키지 이름, 버전, 릴리즈버전, 아키텍처, 파일 크기, 설치 유무)
 - 특정 파일과 관련된 패키지 확인 #yum provides /etc/ssh/sshd_config
 
패키지와 관련된 키워드 검색
- #yum search apache 이름과 summary만 매치하는 패키지를 출력
 - #yum search all apache 이름,summary, description에서 키워드와 매치하는 패키지 검색
 
repository 패키지 목록 확인
- #yum list
    
- subargument : 	all 모든 패키지 목록 확인
        
- available 현 repository에서 설치가능한 패키지 목록
 - extras 설치 가능한 설정 파일이 없는 패키지 확인
 - installed 설치된 패키지
 - obsoletes 설치된 패키지 중 repository에서 폐기된 패키지
 - recent 최근에 repository에 최근 추가된 패키지
 - updates 현 repository에서 업데이트가 가능한 패키지
 
 
 - subargument : 	all 모든 패키지 목록 확인
        
 
패키지 설치
- #yum install -y 패키지명
    
- -y : 설치과정중에 발새하는 대화형 질문에 모두 yes처리
 - -d : 설치하지 않고 다운로드만
 
 - 그외 시스템 내에 다운로드되어있는 rpm 패키지 설치도 가능
 - URL 주소를 통한 yum 설치도 가능
 
패키지 업데이트
- #yum update -y 패키지명
    
- 하나의 소프트웨어 패키지에 대해서 다수의 버전을 설치할 수 없음.
 - 이전버전의 패키는 삭제되고 최신버전의 패키지가 설치됨.
 - update 시 특정 패키지를 지정하지 않으면 설치된 모든 패키지와 yum repository에 저장된 모든 패키지 버전을 비교하여 업데이트 진행함.
 - #yum install httpd
 
 
커널을 업데이트 할 때에는 업데이트 진행 중 오류가 난다면 부팅이 안됨.  
이전 버전의 커널을 삭제하지 않고 그대로 보존함. boot loader에 커널 목록이 추가됨.
패키지 제거
- #yum remove httpd
 
그룹 패키지 #yum groups [sub] [패키지명]
	sub : 	info	패키지 그룹 정보 확인
		install	패키지 그룹 설치
		list	패키지 그룹 목록 확인 (이름만 확인)
		remove	패키지 그룹 제거
 #yum groups info 'Basic Web Server'
패키지 설치 기록(history)
- yum으로 패키지 설치, 업데이트, 제거 등 로그파일에 기록됨.
    
- /var/log/yum.log : 순자적 기록 , 패키지 그룹에 해당하는 모든 패키지 기록 됨.
 - #yum history   : 명령어 단위로 출력됨.
        
#yum history list #yum history list 6 yum 명령어 확인 가능 #yum history info 6 패키지명이나 함께 설치된 패키지도 확인 가능 
 
패키지를 yum으로 패키지를 설치하다가 network 오류등으로 설치 중단이 되었을 때, 기존 설치하던 자료는 삭제를 하고 다시 설치할 때에는   
	# yum clean all  (버퍼에 있는 정보 삭제)
Network Manager
네트워크 정보 확인
ifconfig
ip addr
ping [option] destination
traceroute [option] destination
tracepath [option] destination
route -n 
*인터페이스 이름 : 장치유형  + 어댑터 유형 + 번호
 en(ethernet이더넷), w (wlan무선랜)
 o (on-broad) , s (hot-plug-slot) , p (PCI위치), b(BCMA Bus core) , ccw (CCCW bus group)
$ls /etc/sysconfig/network-scripts/
레거시 legacy 네트워크 구성 (파일 수정)
- 레거시 사용하는 경우, NetworkManager를 중지/비활성화/mask  (stop,disable,mask)
    
- $ systemctl stop NetworkManager
 - $ ls -l /etc/sysconfig/network-scripts/ifcfg-* 파일 수정 > 네트워크 서비스 재시작
 
 
$ sudo vim /etc/sysconfig/network-scripts/ifcfg-enp0s3
 속성	BOOTPROTO : 네트워크 관련 정보를 설정하기 위한 방식 , bootp, dhcp, none
static 구성인 경우 (BOOTPROTO: none) 구성사항
네트워크관리자 NetworkManager
- nmcli : CLI 명령어
 - nmtui : CLI환경에서 GUI처럼 키보드로 선택
 - nm-connection-editor : GUI명령어
 
패키지 설치 :
yum -y install NetworkManagersystemctl status NetworkManger
/etc/sysconfig/network-scripts 디렉토리의 설정파일을 저장함. (ifcfg-인터페이스이름)
$ ls -l /etc/sysconfig/network-scripts/ifcfg-* 
nmcli명령어를 정리할것
연결정보 추가 할 때 명령어 형식
nmcli con add con-name "connection 이름" ifname 물리장치 type ethernet autoconnet yes => dhcp 설정
nmcli con add con-name "connection 이름" ifname 물리 장치 type ethernet autoconnet yes ip4 "xxx.xxx.xxx.xxx/xx" gw4 "xxx.xxx.xxx.xxx" => 고정 아이피 설정
nmcli con reload
nmcli con up "connection 이름" 
hostname
- IP주소를 보다 쉽게 구분하기 위해 시스템 이름 지정 > DNS 서비스
 - FQDN (Full Qualified Domain Name): 정규화된 도메인 이름 (호스트네임+도메인네임)
 
호스트이름 분류
- static : 사용자가 지정한 정적인 호스트이름 , /etc/hostname에 저장
 - transient : 커널이 유지 관리하는 동적 호스트 이름 (static 보다 우선순위가 낮음)
 - pretty : 자유형식의 UTF8로 인코딩된 호스트이름, 길이와 문자 제한이 없으며, 특수문자 표현이 가능함.
 
hostnamectl
hostnamectl set-hostname "encore's linux"
hostnamectl status 
방화벽
방화벽 : 내부를 외부로부터 보호하기위해서 사용
- hardwre/software 가능.
 - 내부가 외부로 가는 트래픽은 기본적으로 허용.
 - 외부가 내부로 들오는 트래픽은 기본적으로 거부.
 - 
    
서버가 서비스를 하기위해서는 반드시 해당 서비스의 포트를 허용해주는 정책이 추가되어야함.
 - 리눅스 방화벽은 커널의 netfilter 모듈에 의해서 패킷이 걸러짐
 - 예전버전에는 iptables로 방화벽 설정
 - centos 7는 systemd의 firewall-cmd (GUI:firewall-config)로 방화벽 설정.
 
firewall-cmd 명령어 정리
firewall-cmd
--state                                   : firewalld 실행 상태 확인
--get-default-zone                        : 현재 기본 영역 표시
--set-default-zone [zone]                 : 기본 영역 설정
--get-zones                               : 사용가능한 모든 영역 나열
--get-services                            : 사용가능한 모든 서비스 나열
--get-active-zones                        : 현재 사용중인 모든 영역과 인터페이스 및 소스정보 나열
--add-source=[ip주소] --zone=[zone]       : 출발지 주소 규칙 추가
=> '--zone' 옵션을 통해 zone 지정해주지 않으면 자동으로 기본영역에 추가
--remove-source=[ip주소]                  : IP 주소를 지정된 영역에서 제거
--add-interface=[ifname] --zone=[zone]    : 특정 영역에 interface 연결 추가
--change-interface=[ifname] --zone=[zone] : 영역에 연결된 interface 변경
--list-all --zone=[zone]                  : 영역에 구성된 모든 인터페이스, 소스, 서비스, 포트 나열
--add-service=[service] --zone=[zone]     : 해당 서비스 트래픽 허용
--add-port=[port|protocol] --zone=[zone]  : 해당 포트나 프로토콜 트래픽 허용
 + --permanent                            : 해당 옵션을 사용하지 않으면 현재 설정이 변경되며 영구설정은 지정이 안됨.
--reload                                  : 런타임 구성 삭제, 영구 구성 적용
--runtime-to-permanent                    : 실행중 설정을 영구 설정으로 변경
      
Leave a comment