Linux
Table of contents
utmp wtmp btmp secure lastlog
pam sam srm
useradd 시 -c 설정으로 풀네임 코멘트 추가 - 관리자 변경을 대비 하드링크 심볼릭링크 inode 정리 ufs 파일시스템구조
컨트롤 d 파일끝내기 컨트롤u 명령어 라인 지우기 컨트롤 w 커서 단어 지우기 컨트롤 s 화면출력 중지 컨트롤 q 화면출력 시작
ls -R 하위 디렉터리 확인 -F 파일종류 / 디렉토리 * 실행파일 @ 심볼릭링크 (none)텍스트/ascii -Z selinux 라벨링 -n uid gid 숫자로
cd - 이전위치 cp -i 덮어쓰기 방지 여러개 나열하면 마지막 파일에 복사
mkdir -p 계층 만들기
grep -i 대소문자 무시 -l 매칭패턴 -n 매칭 줄번호 -v 검색패턴 제외 -c 매칭 줄갯수 -w 단어 단위
표현식 ^ 로 시작하는 줄 $ 로 끝나는 줄 . 문자 한개 대치
- 아무것도 없거나 여러문자 [] 대괄호 사이의 한 문자 [^] 패턴 제외문자
egrep [a-z]+tion 소문자+tion으로 끝나느 문자 | or ha(ve|ving) have or having
fgrep 글자 그대로 검색 ''
find 경로 조건 action
find / -name -type 링크, 파일, 디렉토리 -exec -perm -user -size +이상 -이하 n 512바이트블록단위 k M G -atime 접근시간 -mtime 수정시간 하루전 -1
-print 기본값 -ls 자세한 정보 -exec [command] {} ; 검색된 파일에 특정명령 -ok [command] {} ; 대화형 ㄻ
vim -r 복구 view 읽기전용
편집모드 A 커서 위치한 줄의 가장 뒷부분에 위치한후 편집 l 줄 가장 앞에서 편집 O 커서 위에 한줄추가하고 편집 :r filename 커서 위치한 줄 아래에 파일내용 불러오기 w, b 한단어씩 이동 e 현재 단어끝 0 줄 시작 enter 한줄 아래 G 막줄 1G 첫번째줄 :n n번째 줄 nG n번째줄 컨트롤f 화면만큼 다음화면 컨트롤d 화면 반만큼 이동 컨트롤 b 화면만큼 뒤로 컨트롤 u 화면 반만큼 앞으로 컨트롤 l 갱신
R replace C 뒷부분 삭제후 replace s 글자삭제후 입력 x 글자삭제 dw 단어삭제 dd 줄삭제 D 뒷부분 삭제 :n,nd n번째줄부터 n번째줄까지 삭제 cw 커서뒷부분 단어 삭제후 입력 r 글자 replace J 줄땡기기 x p 글자 잘라서 붙여넣기 ~ 대소문자 변경 u undo U 줄전체 undo
/아래로 검색 ? 위로 검색 n 다음 결과 N 이전 결과 :%s/old/new/g 단어 바꾸기
yy 줄복사 p 아랫줄에 붙여넣기 P 윗줄에 붙여넣기 :n,n co n 복사해서 n번째 줄 아래 붙여넣기 :n,n m n 잘라내서 n번째 줄 아래 붙여넣기
:x 저장후 종료 ZZ
:set list 숨김문자 확인 nolist 숨김
v 비주얼모드 범위지정 V 라인지정 쉬프트ㅛㅛ V 블록 지정
:e 파일명 편집모드로 열기 :v 읽기모드로 열기
다중실행후 :n 오른쪽파일 :N 왼쪽파일
:sp 파일명 수평분할 열기 :vs 수직분할 열기 컨트롤w 분할된 창 이동 :tabe 파일명 탭으로 열기 :tabn :tabp 탭 이동 :tabnew 빈탭
umask 확인 umask n 수정 해당쉘 일시수정이며 전역설정은 초기화파일에서 umask -S 심볼릭표현
메타문자
- 이전 ~+ 현재폴더 ~- 이전폴더ㅡ뭉ㄹ *, ? 문자대체 [] 범위
`` = $() 명령어 입력
attend 2> /dev/null 표준에러 버리기 2>&1 표준출력과 같은 곳에 표준에러 보내기
history -r 역순출력 !! !n 배쉬셸 컨트롤r 히스토리검색 컨트롤l 클리어 export HISTTIMEFORMAT="%F %T " 시간출력 영구저장시 bashrc 에 입력후 source
/etc/profile 부팅시 모든 사용자 적용 /etc/bashrc ~/.profile 개별 사용자용, 쉘 변수, 터미널 설정 ~/.kshrc 콘쉘 실행설정 ~/.bashrc, ~/.bash_profile 배쉬쉘 설정
쉘 PATH 쉘이 명령어를 찾을때 참조하는 디렉토리 HOME 로그인시 사용자 디렉토리 PS1 쉘 프롬픝 TERM 터미널이름 SHELL 쉘종류 LOGNAME 사용자계정
특수 아규먼트 $$ 현재 쉘의 PID $? 마지막 명령의 종료상태 $# 아규먼트 총갯수 $- 현재 플래그 $! 마지막 백그라운 명령 프로세스넘버 $* 모든 매개변수 $@ $n 위치 매개변수
str 문자열이 null이 아니면 true -n str 문자열 길이가 0이 아니면 true -z str 문자열 길이가 0이면 true
-le less than or equal to
-d 디렉토리파일 -f 일반파일 -b 블록파일 -c 원시캐릭터파일 -l 심볼릭 링크파일 -r 읽기가능 -w 쓰기가능 -x -s 사이즈 0아니면 -p 파이프파일 -u setuid 설정파일 -g setgid 설정파일 -k 스티키비트 설정파일
논리조건연산 -a and -o or
쉘스크립트 명령어 read 표준입력에서 받아 변수할당 expr 수식결과출력
ps -f 상세 정보 -e 모든 프로세스 정보
부모자식확인 pstree(unix ptree)
pgrep 이름으로 프로세스 검색 -x 정확히 일치 -n 패터포함 가장 최근 생성 pid -U uid -l pid와 이름 -t term 터미널정보
sigup 1 sigint 2 sigkill 9 sigterm 15
jobs bg %n n작업id를 백그라운드동작 fg 컨트롤z 포어그라운드작업을 정지시켜 백그라운드로 보낸다 stop %n 백그라운드작업 중지
tar c 새로운 파일 t 내부 리스트 확인 x 해제 f 아카이브나 테잎장치 지정 v 설명 출력 h 대상이 심볼릭일경우 원본을 아카이브 z 압축 옵션 순서 잘못되면 형성안됨 jar 압축 jvm 필요
압축 compress -v 파일명 zcat, uncompress -c 압축된 파일 내용확인 uncompress zcat 파일명.tar.Z | tar xvf - 아카이브된후 압축된 파일 내용확인
gzip 더 작은 파일 -v gzcat 내용확인 gunzip 압축해제 tar zcvf 아카이브와 압축 한꺼번에 수행 tar zxvf 한번에 압축및 아카이브해제 파일들을 복사, 공유, 추적하려면 하나의 파일로 만드는 게 편함 묶을 시 각 파일에 대한 메타데이터 추가때문에 용량이 커짐 네트워크, 디스크 비용을 줄이기 위해 압축
bzip2 -v bzcat bunzimandf tar jcvf 압축 tar jxvf 압축 아카이브 해제
zip unzip
man 페이지 d 반내림 u 반올림 엔터 한줄내림 k 한줄올림 / 아래찾기 ? 위로찾기 n 다음 찾은거 N 이전 찾은거 esc U 찾은 하이라이트 제거 :nohl 하이라이트 끄기 = /ㅣㅇㄻ나ㅓㅟㅈ다ㅜ리
그룹확인 /etc/group,gshadow 유저확인 /etc/passwd,shadow passwd 영역 계정명:x:uid:gid:계정 코멘트:홈:쉘 shadow 영역 계정명:해쉬종류$salt$해쉬된 비번:마지막 패스워드 변경날짜 1970/1/1부터: 변경후 최소사용기간:최대사용기간:만료전 경고기간:만료후 변경하지 않을때 계정잠김: 만료일:예약필드 0 DES /1 MD5 /2 blowfish /5 sha 256 /6 sha 512
유저추가 설정확인 및 변경 useradd -D = /etc/default/useradd -b 홈 -e 만기일 -f 기간 -g 기본그룹 -s 쉘
useradd 시 옵션 -u uid -U 같은 이름 그룹 -g gid -G 보조그룹 -c 코멘트 -d 홈 -s 쉘 -o uid 중복허용 -p 패스워드 -r 시스템예약 uid인 199~999 사이 계정 -m 홈이 없을경우 생성(/etc/login.defs CREATE_HOME 항목이 yes일 경우 패스) -e shadow expire -f shadow inactive
usermod 옵션 add와 비슷 -a 보조그룹 추가시 -m, -d 홈 변경 -L 잠금 -U 잠금해제
userdel -r 관련파일 전부 삭제 하지 않게되면, 추후 같은 계정명 생성시 홈 등을 쓰게되어 보안위협이 됨
그룹 공통된 목표, 권한
groupadd -g gid -o gid 중복허용 -r 시스템그룹 201~999
groupmod -n 이름 변경 -p 비번변경
스켈레톤, 초기화 파일 /etc/skel 유저 생성시 복사됨
/etc/login.defs 사용자, 그룹생성시 기본 설정파일 메일 패스워드 패스워드 해시 알고리즘 uid 홈 umask gpu스키마 사용자명과 같은 그룹생성 no -> /etc/default/useradd 그룹명으로 생성
su substitute user
- 사용자 홈의 설정파일 전부 불러오기
sudo 조건 2가지 현재 사용자의 비번 - 현재 쉘에 저장되므로 1번만 물음 /etc/sudoers = visudo 등록 -> 최신판에선 wheel 그룹 등록을 권함
-i = su - 실행중 해당사용자(주로 루트)의 환경설정을 모두 끌어와서 실행후 종료
su, sudo 사용시 /var/log/secure 에 기록 시간:시스템명:인증방식:메시지
chage 패스워드 속성변경 -l 속성확인 -d 남은 만료일 수정 0 = 다음 로그인시 바로 -m 변경 최소일자 -M 최대일자 -W 경고일자 -I 만료후 변경추가 기간 -E 만료날짜 특정
Oracle Solaris 11.4.42.111.0 Interactive Text Install USB (x86)
확장권한 일반사용자가 변경할 수 없을때 권한을 부여해주는것 setuid 파일을 실행할때 해당 파일 이용자가 소유자(주로 루트)의 권한을 이용할 수 있게하는것 - 실행중 ps -ef 로 확인해보면 실행아이디가 루트인지 아닌지 알수있음 -빌려온 uid = EUID Effective UID setgid 해당 디렉토리에서 파일을 만들때, 파일을 만든 계정의 그룹이 아닌 ㅌ디렉토리의 그룹을 상속하게 하는것 octal로 설정시 000 setuid,setgid,sticky 를 8진수 변환 chmod 2750 = setgid 4750 = setuid chmod +/-2000 4000 1000
ACL ls -l 시 11번째 문자, 적용될 경우 .이 아니라 +로 표현 getfacl 파일명 으로도 확인가능 setfacl -m d(default)/u/g:유저/그룹명:rwx 파일명 권한설정 안하면 상위폴더 상속 setfacl -x 삭제, -k 기본 삭제 -b 모든 acl 삭제 -R 재귀적용 rwX 적용시 디렉토리에만 x권한, 텍스트에는 미적용 파일 만들때 적용하기 mkdir -m 2770 파일명
ps $$ 터미널 확인
스케쥴링 누가? 개인/관리자 주기 한번 atd/반복 crond 데몬은 제어터미널이 지정되지 않았으므로 실행돼도 화면출력이 안됨 화면출력을 원할경우 리다이렉션으로 tty를 설정해야함
at 22:30/11:00 AM/ Feb 12 2017 15:00 /021217/02-12-07/02.12.17/now + 5min at 엔터 입력 컨트롤 d
atq 로 예약 작업 확인 -[a-z, A-Z]으로 56번째까지 순서지정가능 default a /var/spool/at 에 저장
crond 사용자 크론 /var/spool/cron crontab -e 편집 crontab 파일명 등록 분 시 일 월 요일
- 참
- 범위 . 여러개의 값 / 주기
삭제는 저장폴더에서 사용자이름 폴더 삭제/ crontab -r
anacron 셧다운시에도 확인해서 실행 /etc/anacrontab 정확한 시간대신 주기적 반복실행
시스템 크론 /etc/crontab 템플릿 /etc/cron.d 복사후 이름변경
MBR 섹터 512byte Cylinder Head Sector CHS 물리주소 logical block address LBA 섹터의 논리주소 mbr은 64byte lba 0주소를 파티션 테이블용도로 사용 이를 16byte 씩 4개로 나눠서 사용하기 때문에 primary 파티션이 4개임 파티션 부팅 가능/불가능 첫번째 CHS 주소 파티션 내 파일시스템 마지막 CHS 주소 첫번째 LBA 주소 4byte 파티션 섹터 개수 4byte 마지막 두개 테이블로 파티션 위치 확인 섹터주소를 4byte로 저장하기때문에 최대크기에 제한 최대 43억개 섹터 = 2TB 정도
GUID partition table (Unified) Extensible Firmware Interface 에 포함된 테이블 레이아웃 표준, 따라서 bios 못씀 그러나 부팅목적이 아니라면 os에서 지원하는대로 사용가능 파티션 레이블 128개 테이블당 128 byte 섹터주소 64bit 저장 최대 8zb gpt 중요데이터를 디스크 마지막 부분에 복제
e-ide = ata 핫플러깅 x 장치명 hda b c -> 현재 sd로 통일 serial ata -> mini sata -> PCIe/NVMe scsi -> serial attached scsi sas1 3g/s 2 6g/s 3 12g/s 4 22g/s
cd/dvd 장치면 sr0 1 2
핫플러깅 지원장치는 연결시 장치파일생성, 미지원은 종료후 수동생성 - 장치명은 뜰테니 파일이 생성되지 않으면 유닛파일 복붙 지원장치인데 장치파일이 생성되지 않으면 스캔수행 ls -l /sys/class/scsi_host ls -l /dev/sd* echo '- - -' . /sys/class/scsi_host/host2/scan 명s -l /dev/sd* 스캔 쉘스크립팅 for HOST in ls /sys/class/scsi_host/
do echo '- - -' > /sys/class/scsi_host/$HOST/scan echo "$HOST rescan. " done
fdisk(기본설치)/gdisk/parted(기본설치)/gparted(gui)-epel필요 gpt는 gdisk 권장
fdisk -l 장치명 m 매뉴얼 n p 엔터 엔터 용량설정 w mbr primary 4번째는 나머지 용량 전체를 설정할것 그렇지 않으면 남은 용량 버리게됨
partuuid 최근 생김
partprobe 재부팅하지 않고 커널에서 파티션 인식 -s 정보
parted -s 스크립트 형식으로 파티셔닝 -lml 파싱하기 좋게
파일시스템 디스크기반 minix 소형 저장소 ext unix file system 영향 xfs fat vfat 초기윈도우 파일시스템 iso9660 cdrom udfs universal disk format iso/iec 13346 dvd
분산 nfs smb
pseudo 메모리기반으로 성능을 높이고 커널정보에 접근, 자동생성해제, 임의해제시 문제발생 가능성 swapfs 물리메모리 보조 tmpfs 쓰기 오버헤드 줄이기위해 메모리에 기록, 보관을 보장하지 않음 fdfs file discriptor /dev/fd procfs pid 목록관리 /proc devfs device /dev
ext4 portable operating system interface 지원 주요 정보는 super block에 저장 여러개의 block group super block 백업이 일부 block group에 저장 inode 활용 메타정보와 데이터 분리 구조 1024byte 패딩 super block - inode 개수, 블록 개수, 블록 위치, 크기, 그룹당 블록개수, 마운트 및 기록시간, fsck 후 마운트된 횟수, fsck 실행할 마운트 횟수, 파일시스템 상태, 오류시 동작, 마지막 체크시간 그룹 디스크립터 GDT - 데이터블록 비트맵 위치, inode 비트맵 위치, inode 테이블 위치, 블록그룹의 사용가능한 블록, inode 갯수, 디렉토리 개수, 그룹 상태 flag, 블록 비트맵 첵섬값, inode 비트맵 첵섬값, 그룹디스크립터 첵섬값 데이터 블록/inode 비트맵 - 사용중 블록 체크 inode 테이블 - 파일종류 권한, uid, 파일크기, 접근변경수정삭제 시간, 소유그룹, 하드링크수, 파일이 사용중인 블록갯수, 속성 flag, 실제 데이터블록 주소 데이터 블록
xfs posix 표준 64bit 지원 블록그룹대신 allocation group 사용, 기본 8개 b+ 트리 파일탐색 수퍼블록 - allocation group에 대한 정보, xfs 블록크기, 사용가능한 블록갯수, 각 할당그룹 크기, 그룹 갯수, 섹터크기, inode 크기, 블록당 inode 개수, 파일시스템 이름, 파일시스템 상태 flag, inode 최대 할당비율, 총 inode 갯수, 미할당 inode 갯수, 미할당 블록 갯수, quota 정보 ag free block info - root of freespcae B+tree 관련 ag inode B+tree info - 이상 동문 ag free list - b+tree 확장 예약 inodes - 파일 접근권한, 종류, 링크갯수, uid, gid, 마지막 접근변경수정삭제시간, 파일크기, 파일이 사용한 블록갯수, extents 정보, 상태 flag 데이터 블록
mkfs -t 종류 지정 /usr/sbin/mkfs* parted -s, file -s 로 정보 확인 mkfs.ext4 blkid, lsblk -f 마운트포인트 지정 mount /etc/mtab <- 자동업데이트 -t 파일시스템 종류, 정상적으로 마운트되지 않을때 -o 세부옵션, 생략시 디폴트 rw 읽기쓰기 가능상태, suid setuid 설정가능, dev 블록/캐릭터장치 해석, exec 바이너리 실행가능, auto -a옵션으로 마운트, nouser 일반유저 마운트 금지, async 이전 데이터 확인안하고 버퍼전송 즉시기록되지 않고 손실가능성, ro 읽기전용, atime inode의 접근시간 갱신허용 <> noatime, remount 옵션 수정시, sync 이전 데이터 기록 확인후 이후 데이터기록, 그외 no붙여서 금지가능 lost+found 마운트시 생성, 파일시스템오류 체크할때 발견된 파일 복구위치, 마운트 해제시 사라짐 시스템 종료시 모든 마운트 해제 /etc/fstab 등록후 mount -a 즉시 마운트 mount | grep 'sda2' 가급적 빈 디렉토리를 마운트, 그렇지않으면 디렉토리 아래 파일들이 저장된 상태로 보이지 않게됨
umount uuid, 마운트포인, 장치명 사용가능 -a 사용되지 않은 파일시스템 전부 해제
가상메모리 = 물리 + 스왑(디스크) paging = page in, out 디스크입출력을 많이 하므로 성능 저하 발생 - 디스크입출력이 많으면 스왑을 최소, 적고 실행할 프로세스가 많으면 최대 물리 2배 스왑 = 스왑파티션 + 스왑파일(파일시스템 필요, 별도 파티션 필요없음) swapon -s 정보확인 free fdisk로 파티셔닝후 t 파티션 타입 82 w partprobe mkswap
스왑파일 dd if=/dev/zero of=파일명 bs=512 count 1048576 - 0을 대상파일에 512byte씩 count횟수만큼 복사한다 mkswap
swapon -a /etc/fstab 참조 스왑활성화 -p 활성화 우선순위
swapoff -a 해제후 파티션삭제 혹은 파일삭제
linux lvm 파티션 타입으로 파티셔닝 lvmdiskscan pvcreate, pvremove vgcreate 그룹명, vgremove -s physical extent default 4M 1~256 lvcreate, lvremove -l physical extent 갯수 지정 -L 볼륨 사이즈 -n 이름 생성후 /dev/vg명/lv명
기본적으로 linear logical volume 으로 생성, 물리볼륨에서 순차적으로 할당받기때문에 성능 상승이 어려움 스트라이프 볼륨 physical extent 보다 작은 stripe 단위 4~512k lvcreate -i 스트라이프할 물리볼륨 개수 최소 2개, -I 스트라이프 단위 lvcreate -n stripbe -L 400M -i 3 -I 64K vl명 미러볼륨 -m 미러갯수 원본제외
raid 5,6 lvcreate -i 스트라이프 적용 물리볼륨 갯수 - 1(패리티) -I 스트라이프 단위 --type 5,6
raid10 --type -m -i -I
씬 프로비저닝 물리볼륨 - 볼륨그룹 - 씬 풀 - 논리 볼륨 씬 풀 생성 lvcreate -T -L,I 풀 크기 지정 -n 없음, 경로만 지정 씬 풀에서 논리 볼륨 생성 lvcreate -T -V 용량 설정 -n
pvdisplay -C pvs -c -s -m vgdisplay -C vgs -c -s -v lvdisplay -C lvs -c -m
볼륨그룹 확장 vgextend vgreduce pvmove 볼륨그룹 축소전 다른 물리볼륨으로 데이터 이동
lvextend -I -L -r 논리 볼륨및 파일시스템 확장 xfs_growfs 마운트포인트 resize2fs 논리볼륨패스 lvreduce -r 한번에 xfs는 지원하지 않음 언마운트, fsck 후 resize2fs 패스 사이즈
생성 fdisk - pvcreate - vgcreate - lvcreate - mkfs - mount 확장 lvexten fdisk - pvcreate - vgextend - lvextend 장비 교체 fdisk - pvcreate - vgextend - pvmove -vgreduce - pvremove - fdisk 삭제 umount - lvremove - vgremove - pvremove - fdisk
systemd 런레벨 대신 타겟유닛 service 대신 systemctl pid 1 service, target, automount, mount, device, path, scope, slice, snapshot, socket, swap, timer unit 부팅시 소켓에서 서비스 병렬시작 스냅샷 유닛 find로 찾을 수 없음 service control logic boot script 대신 upstart cgroup 리소스 관리 사용자 커스텀 커맨드 불가능 systemd에 의해 실행된 데몬이 아니면 컨트롤 불가능 프리징을 막기위해 모든 서비스 기본적 5분 타임아웃 D-bus 소켓, 버스, 장치, 경로 기반 활성화 mount point 와 automount point 관리위해 mount unit 및 automount unit 사용, 파일시스템이 마운트 포인트에 마운트되면 마운트 유닛이 생성 ex) dev/sdb1이 /mnt/systemdunit 에 마운트되면 mnt-systemdunit.mount 유닛생성 통합로그관리 systemd-journald journalctl
systemd /etc/systemd/system, 시스템관리자가 수동으로 생성관리하는 유닛들이 저장되는 곳 타겟이름으로 된 디렉토리 존재해 이를 바탕으로 서비스 실행 init 프로세스에서는 /etc/rc런레벨.d 디렉토리에 링크파일이 있어야함 ls -l /etc/systemd/system/multi-user, graphical...target.wants
/run/systemd/system, 시스템 런타임때 임시로 유닛파일 저장, 재부팅시 삭제
/usr/lib/systemd/system 에 저장 특정 유닛이 포함된 패키지 설치시 저장되는 디렉토리 유닛파일 원본 enable 시 /etc/systemd/system 디렉토리에 링크
유닛파일 unit 설명, 문서(링크), 의존성 after - 해당유닛 - before - (wants) <> conflicts
유형 서비스, 소켓
인스톨 서브커맨드 enable disable 관련 = init chkconfig enable 시 인스톨 섹션의 옵션에 따라 링크가 생성되고 부팅시 유닛파일 실행 disable 시 링크삭제 alias wantedby, requiredBy 활성화시 링크생성 위치 also 링크가 같이 생성되거나 삭제되는 유닛
이거 추적은 어떻게 하는건지 사실상은 없고 문서로 확인 / 위에 사실은 어떤 폴더가 있는건지 부팅과정에서 sysroot가 먼저 마운트되고 해당 폴더가 / 로 다시 마운트됨?
서비스유닛 cat /usr/lib/systemd/system/sshd.service .service systemctl 로 서비스 시작시 systemd 가 유닛파일 존재 확인 후 없으면 같은 이름의 init 스크립트 실행 - 모든 init 스크립트 실행가능하지는 않음 type simple - execstart와 시작되는 프로세스, 기본값 forking - execstart에서 fork()로 호출, unix 방식, 추적용이성위해 PIDFile 옵션 권장 oneshot - simple과 비슷, 종료후에도 remainafterexit 옵션으로 활성화유지 가능 dbus - busname 준비되면 시작 notify - 심플과 비슷, 시작되면 systemd에 시그널 전송 execstart 유닛시작시 실행할 명령이나 스크립트 경로, pre, post execstop execreload restart remainafterexit
링크랑 마운트 차이? 마운트는 디스크를 연결하는것, 링크는 마운트된 디스크 내에서 파일의 위치나 이름을 찾아서 연결하는것 장치유닛 systemctl status dev-sdb1.device .device
해당 장치명으로 된 유닛생성 ex) /dev/sdb1 생성시 dev-sdb1.device device 섹션이 따로 존재하지 않고 'systemd가 udev tag가 표시된 모든 장치의 장치유닛 파일을 동적으로 생성?p227 윗줄과 같은 이야기 sys/udev
마운트유닛 systemctl status 마운트포인트/대신-로.mount .mount cat /run/systemd/generator/마운트포인트/대신-.mount
스왑유닛 .swap 스왑영역 관리유닛 ex) /dev/sdb2 스왑온 dev-sdb2.swap 생성 cat /run/systemd/generator/
타겟유닛 .target = init 런레벨 cat /usr/lib/systemd/system/
경로유닛 .path 파일시스템이나 디렉토리 모니터링 같은 이름의 서비스유닛 존재
타이머유닛 - 생성해서 크론탭대신? .timer 주기마다 유닛실행 같은 이름의 서비스유닛 존재
스냅샷유닛 .snapshot systemctl snapshot, isolate, delete
소켓유닛 .socket systemd에 의해 제어되는 ipc 네트워크소켓, 파일시스템 입출력 정보 같은 이름의 서비스유닛 존재
범위유닛 .scope bus interface를 사용하여 계획적 생성 시스템 프로세스 집합 관리 자식 프로세스 생성 안함 systemctl status session-2.scope
슬라이스 유닛 .slice 자원을 계층적 관리 cgroup 트리에 하나의 노드 생성
systemctl systemd 유닛을 관리하는 명령 init on = enable off = disable chkconfig --list = status
list-units 유닛명, 설치유무, 활성화, exited -실행중이나 systemd가 아닌 커널관리 plugged 장치유닛 연결, 대기중 작업, 설명 -t 유닛유형 -a 설치되지 않았거나 비활성화 유닛도 출력 list-units-files 활성화상태 확인 static - 사용자 실행불가, 다른 유닛에 의해 실행 masked - 충돌을 막기위해 마스킹됨
list-sockets -t socket과 결과가 좀 다름
유닛이름에 확장자 없으면 자동으로 .service로 지정 is-active is-enabled
list-dependencies 유닛명 유닛명 지정 안하면 트리구조로 전체 의존성 출력 --reverse
status 서비스명, 유닛파일 unit의 description 옵션값 설치 및 경로, 활성화 실행, 보조상태? unit 의 documentation 옵션값 주 pid cgroup?에 포함된 프로세스 목록 로그 -l 추가시 축약되지 않은 로그 확인가능
start stop enable 원본파일에 대한 링크가 /etc/systemd/system 에 형성 restart reload - 그다지 의미없음? 주 pid 변경안됨 mask /etc/systemd/system에 해당 서비스명의 링크가 생성되지만 /usr/lib/systemd/system 에 있는 원본이 아니라 /dev/null 을 가리킴, 현재 실행중인 서비스에는 영향없음 unmask
cp -a 아카이브, 권한 이양 find {} 묶기 ; 문법 ^ 라인 첫부분 $ 라인 마지막 ^$ 빈라인 . 임의문자 하나
- 임의 문자 전부
파일삭제시 해당파일에는 권한 없어도 디렉토리에 권한 있으면 됨
/etc/sudoers.d/vagrant
crontab 모든 유저사용가능 /etc/crontab root
info..info 인포로그만
/etc/systemd/journal.conf #Storage=persistent 영구저장
버츄얼박스 네트워크 nat - 가상머신에서 인터넷, 다른 가상머신이나 호스트에서 접속못함, ip 자동세팅 호스트전용 - 호스트에서 가상머신으로 접속, 다른 가상머신끼리도 통신, 인터넷 안됨 nat 네트워크 - 가상머신에서 인터넷, 다른 가상머신과 통신, 호스트에서 접속은 제한 브리지 - 호스트가 사용하는 네트워크 정보 공유
저널메시지 - 런타임 데이터 - 저장되지 않는다 - 바이너리방식 기록 - 확인위해선 journalctl 필요
rsyslog - syslog 메시지 - /var/log 에 저장 - 확인은 일반적인 cat tail more
로그저장 주기 logrotate
ifconfig ip route gw주소확인 cat /etc/resolve.conf dns 확인
ls -l /usr/bin/yum,dnf 네트워크 설정 dns 서버 /etc/resolve.conf 나 게이트웨이 주소가 잘못 되었을때 yum이 작동하지 않을 수 있음 저장소 목록에 없을경우 의존성이라도 설치되지 않을수 있음 update 시 커널도 업데이트될 수 있으므로 특정 패키지를 지정해서 하는게 좋음 삭제시 의존패키지가 다른 서비스에 연동되었을수 있으므로 고려 yum deplist /var/yum,dnf/log repo 등록시 gpgkeycheck는 ,gpgkey가 없을경우 0으로 설정, 항목자체가 없을경우 에러 가급적 주소는 baseurl로 시험대비
커맨드창 폰트깨짐
ssh 키파일 위치지정 접속 -i 개인키위치
8.log 이벤트에 대한 기록 init syslog -> 센트6부터 rsyslog systemd-journal 이벤트 - kernel log, syslog, service message l systemd - journald -> /run/log/journal 저널데이터 바이너리 저 l rsyslogd - /etc/rsyslog.conf 설정 /var/log/ messages 인증, 메일, 크론, 부팅, 디버깅 제외 secure mailog cron boot.log
로그파일 크기 백업 분석을 위한 순환 logrotate cron에 의해 하루한번씩 동작, 기록종료일을 파일명에 추가 /etc/logrotate.conf 순환기간 보관기간 - 단위는 순환기간을 따름 새로그 생성 파일명 변경 옵션 압축옵션 추가설정파일 위치 /var/log/폴더명/로그명 { size = 3k 순환조건, 3k면 순환하는 것이 아니라 스케쥴러 확인시 3k이상이면 create 600 root sys 새로그파일 rotate 3 로그파일 갯수 nodateext or dateext } wtmp 로그인아웃 순환 설정 btmp 로그인실패 순환설정 logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf 로그스케쥴러 실행 ls -l /var/log/
/etc/rsyslog.conf 필터 기능및 우선순위 - 로그종류, priority 기능.priority kern 커널 user mail deamon auth syslog - syslogd lpr 라인프린터 news 네트워크 뉴스 uucp cron authpriv 보안및 인가 ftp local0-7 커스텀
0 emerg 시스템 사용 불가 1 alert 즉시조치 필요 2 crit 치명적 3 err 4 warn 5 notice 일반적이지만 중요 6 info 7 debug 아래 레벨로 갈수록 상위레벨은 자동포함 해당 레벨만 보관하고 싶을땐 cron.=err 제외 cron.!err none 아무것도 저장안함
액션 /var/log/secure - 경로에 저장
- /var/log/secure 메모리 버퍼후 디스크자원에 여유가 있을때 한꺼번에 저장 :omusrmsg:* 모든 사용자에게 출력 /dev/consol, /dev/tty* 터미널 출력 @ip 원격출력 discard 폐기 = ~
속성 - hostname, msg, syslogtag
표현 - 산술 및 문자열 연산 스크립트
journalctl-journald 부팅시부터 모든 데이터 수집, 바이너리라 직접 읽을수 없고 journalctl 사용 journalctl 인자, 옵션없으면 부팅시부터 출력 err부터는 빨간색 warn, notice 는 굵은 글씨 -p emerg~dbug 범위지정 emerge..debug -r 거꾸로 -n 개수 기본값 10 콘솔로 전달되지 않은 로그도 모니터링 가능 -f 실시간 --since '2017-08-10 10:10:10', tomorrow yesterday today --until ' ' -o 출력형식 short verbose json json-pretty PID= UID= GID= COMM= SYSTEMUNIT= 중복검색 가능 --list-boots 부팅아이디검색 -b 부팅아이디 = BOOTID=
영구저장 mkdir /var/log/ chown root:systemd-journal chmod g+s systemctl restart systemd-journald 저널데이터 크기가 현재 파일시스템 사이즈의 10% 초과할수 없음 현재 파일시스템의 여유공간 15%이상을 쓸수없음 /etc/systemd/journal.conf
9.부트 프로세스 bios/uefi power on self test mbr파티션 첫번째 섹터 512,byte부트로더 메모리 적재후 시스템 제어권 이양 /boot/grub2/grub.cfg, /etc/default/grub, /etc/grub.d 파일 메모리 적재 부팅가능한 커널 표시 e 키 -> /boot/grub2/grub.cfg 출력 /boot/vmlinuz 메모리 적재 제어권 커널 전달
커널 루트 파일 시스템 /sysroot 에 임시마운트 /boot/initramfs /sysroot에 압축해제, 램 디스크 초기화 시스템 제어권 init 전달
init pid1 할당 /etc/initab 런레벨 설정 /etc/rc.d/rc.sysinit 스왑 혹은 네트워크 설정 초기화 런레벨 실행
systemd 커널 메모리 적재까지 동일 initramfs 압축해재 systemd 실행 메모리 적재 systemd가 default.target 활성화
default.target ls -l /etc/systemd/system/default.target
graphical.target init runlevel5.target /etc/systemd/system/graphical.target.wants 실행 require과 after 옵션에 multi-user.target이 지정돼 있기때문에 먼저 실행필요
multi-user.target init runlevel3.target target.wants 실행 require, after 옵션에 basic.target
basic.target firewalld, microcode, selinux, 커널 메시지 target.wants require, after option sysinit.target
sysinit.target 시스템 마운튼, 스왑, 커널 추가옵션 wants atter option local-fs.target
local-fs.target /etc/fstab 정보로 마운트 after option local-fs-pre.target
종료 poweroff.target / reboot.target systemctl poweroff, reboot 현재 실행중인 서비스만 종료
runlevel 0 poweroff.target 1 rescue복구쉘 2 multiuser 3 multi-user 4 multi-user 5 graphical 6 reboot /usr/lib/systemd/systemd 에 링크파일
타겟유닛을 유저가 사용하려면 쉘이 실행되어야함 그러나 모든 타겟에서 쉘이 실행되지는 않기때문에 실행되지 않는 타겟이 있음
사용가능한 타겟 부팅중문제 rescue.target rescue shell 그러나 활성화되지 않으면 emergency.target emergency shell / read only mount, 네트워크 인터페이스 비활성화, 최소 서비스 -> 수정시 rw 로 재마운트 who -r 현재 런레벨 systemctl get-default systemctl set-default 타겟, 기존 default.target 링크가 삭제되고 해당당 파일로 링크 -> 부팅후 적용 systemctl isolate 타겟, 런타임상에서 전환 emergency, rescue, multi-user, graphical 가능 부트로더 커널선택중 e -> linux 마지막에 systemd.unit=타겟
root 패스워드 복구 램디스크 초기화 단계에서 / 가 /sysroot에 임시 마운트돼있음 read only 커널선택중 e -> linux 마지막에 rd.break 램디스크 초기화 컨트롤x switch root shell mount | grep -w '/sysroot' mount -o remount,rw /sysroot chroot /sysroot sh-4.2 passwd
자동레이블 부여파일 chroot 사용시 루트디렉토리가 변경되며 파일에 있던 레이블정보가 전부 제거 sh-4.2 touch /.autorelabel exit switch root shell exit
/etc/fstab 오류 보통 rescue shell로 진입하지만 때에 따라 emergency 쉘로 실행 uuid명이나 장치명이 잘못되었거나 존재하지 않는 마운트포인트 파일시스템유형 오류 잘못된 마운트옵션
- 패키지 소스파일 추출후 컴파일 -> 패키지 패키지명-버전-리눅스릴리즈버전-cpu아키텍처.확장자 종속성 = 의존성 rpm -q -a 모든 -f 해당 파일이라 디렉토리 포함 -c 설정파일 -d 문서 -i 자세한 정보 -l 파일목록 -s 상태 -R 종속성 패키지
yellowdog updater modified .repo [repo id] name= mirrorlist= baseurl=http://, file:// gpgcheck=1,0 gpgkey=윰 저장소에서 체크시 필요 enabled=사용여부 0,1 yum repolist all yum info provides = rpm -q -f yum search, all yum list all,available,extras d현재 등록된 저장소에서 설치가능한 설정파일이 없는 패키지, installed, obsoletes 폐기목록, recent 최근 추가, update 업데이트가능 출력물에서 @가 붙은것은 repo id이며 현재 시스템에 설치되었다는 표시 yum install /root/centos-release-openstack-mitak-1-5.el7.noarch.rpm yum install http:/ftpdaum.kakako.comsdjfela.el7.rpm 하나의 패키지는 하나의 버전만 설치가능 update, remove yum groups info, install, list, remove,summary 저장소 표시안함 description mandatory packages 패키지목록 optional
/varl/log/yum.log 패키지단위 yum history 명령어단위
11.네트워크 관리 ip addr sh,del 활성화여부 inet ipv4 동적일경우 dynamic inet6 주소설정안되면 링크정보만 출력
ifconfig 활성화여부 inet inet6 수신패킷 송신패킷 설정변경 가능하지만 영구적이지 않음
net-tool ifconfig, netstat, route
라우팅이란 네트워크를 통해 데이터를 전송할때 경로를 선택하는 과정 ip route 기본경로 게이트웨이 개별 라우팅규칙
traceroute root만 가능한 옵션이 있음
tracepath
ping -c icmp 갯수
NetworkManager nmcli, nmtui, nm-connection-editor systemctl status NetworkManager /etc/sysconfig/network-scripts/ifcfg-*
장치유형 en 이더넷, wl wlan, ww wwan 어댑터유형 o onboard, s hot plug slot, p pci, b bcma bus core, ccw ccw bug group lo localhost loopback virbr0 virtual bridge 0번 커널과 kvm 간 통신용도
레거시방식 /etc/default/grub GRUB_CMDLINE_LINUX net.ifnames=0 biosdevname=0 추가 grub2-mkconfig -o /boot/grub2/grub.cfg ? reboot systemctl stop NetworkManager systemctl diable NetworkManager systemctl mask NetworkManger systemctl start network systemctl enable network /etc/sysconfig/network-scripts/ifcfg- NM_CONTROLLED 항목 no
BOOTPROTO none 정적 IPADDR ipv4 NETMASK 서브넷 PREFIX 넷마스크와 중복불가 GATEWAY DNS1
수정후 systemctl restart network
ip addr add 192.234.123.12/24 dev ens33 보조 ip 추가
NetworkManager 레거시에선 인터페이스에 직접 네트워크 설정을 적용했으나 네트워크매니저는 연결이라는 프로필을 만들고 이것을 장치에 연결하는 방식
nmcli con sh 이름, uuid, 통신방식 ifcfg TYPE, 매핑된 인터페이스 ifcfg DEVICE
nmcli con sh ens33 소문자는 수정가능, 대문자는 수정안됨 connection.id, uuid, interface-name, type, autoconnect ipv4.method, dns, addresss,gateway
nmcli con add type ethernet con-name(/etc/sysconfig/network-scripts/ 9버전 /etc/NetworkMnager/system-connection/ 에 파일생성) dynamic ifname ens33 autoconnect yes
nmcli con add type ethernet con-name static ifname ens33 ipv4 183.234.123.23/24 gw4 123.234.23.2
nmcli con del dynamic
nmcli con mod static ipv4.dns 8.8.8.8, ipv4.add, ipv4.gateway, ipv4.method manual/auto nmcli con reload nmcli con up/down static
nmtui install NetworkManager-tui
nm-connection-editor
full qualified domain name 호스트의 ip주소와 이름을 지정하여 매핑시킬때 정규화된 이름 host name+ domain name 호스트명 static /etc/hostname transient 커널이 유지관리하는 동적 호스트, static보다 우선순위 낮음, dhcp, mDNS로 변경될수 잇음 pretty 자유형식의 utf8 호스트명, 길이 문자 제한 거의 없음 특수문자 가능
/etc/sysconfig/network HOSTNAME
hostnamectl set-hostname /etc/hostname --pretty hostnamectl set-hostname "" 삭제
12.openssh BSD 라이센스 모든 데이터 암호화전송 ssh 접속시 yes는 ssh서버의 공개키를 클라이언트에 저장하기 위한 것 ~/.ssh/known_hosts 공개키 저장후 클라이언트는 디피-헬만 알고리즘으로 난수 데이터를 생성해 대칭키 암호화를 위한 secret key 생성. 이것을 공개키로 암호화하여 서버로 전달. 서버는 개인키로 복호화하여 클라이언트의 secret key 확인. 이 secret key로 서로 데이터를 암호화하여 보냄 p363 각 사용자의 공개키가 아니라 secret key 아닌가? 클라이언트와 서버간 ssh 알고리즘을 협상한 후 대칭키를 사용해 암호화 통신 ssh domain name/ip ssh user@domain name/ip ssh -X user@domain name/ip 그래픽 도구사용 firefox google.co.kr & 파이어폭스로 구글접속 ssh user@domain name/ip hostname 명령어
/etc/ssh moduli 디피헬만 알고리즘 파라미터 ssh_config 클라이언트 설정 sshd_config 서버설정 ssh_hostkey 개인키 ssh_hostkey.pub 공개키
sshd_config
주석이면서 기본값
ListenAddress 0.0.0.0 sshd 서비스가 모든 주소에 대해 대기중 Protocol 2 ssh버전 HostKeys for protocol version 2 사용할 암호화 키파일 선택 ServerKeyBits 1024 키 파일 생성시 비트수 SyslogFacility AUTHPRIV 로그파일 생성시 종류지정 /var/log/secure LogLevel INFO LoginGraceTime 2m 로그인실패시 대기시간 PermitRootLogin PasswordAuthentication no 키기반만 가능, 그러나 키인증할때는 yes로 패스워드를 써야함
키기반 인증 ssh-keygen -t 알고리즘 지정 ~/.ssh/id_rsa, id_rsa.pub passphrase ssh-copy-id 미옵션일때 자동으로 .ssh 에서 pub 전송, 파일 자체가 아닌 키값이 전송, 대상 시스템 ~/.ssh/authorized_keys 에 저장 -i 공개키 위치지정
scp /root/fileA user2@server.com:/home/user2 -r 디렉토리 전송
sftp user@server.com pwd put, get ls, mkdir, rmdir, cd,
13.ntp pool.ntp.org 서버목록 utc 협정 세계시, coordinated universal time 서버와의 수신응답시간 오차 dTres계산하여 보정
ntp서버 1-15 stratum 0 primary reference clock, 원자 gps 1 0으로부터 수신 2로 전송 2 일반적인 최상위 ntp서버
레거시 ntp도구 -> chrony
chrony chronyd + chronyc
chronyd 주기적으로 시스템 시간조정 /etc/chrony.conf 동기화서버 iburst 주기 짧게 stratumweight 0 최대 허용할 ntp서버 도달시간 기본값 1(초) 이내 가장 상위서버, 0은 가장 가까운 서버 driftfile 오차저장파일위치 rtcsync 커널시간정보 사용 real time clock 업데이트 makestep 교정 간격 bindcmdaddress chronyd 에 명령을 내릴수 있는 시스템 keyfile 인증에 사용할 파일위치 commandkey /etc/chrony.keys파일에서 인증에 사용할 키번호 generatecommandkey 없을경우 생성 로그설정
chronyc 명령어로 chronyd 제어, 기본적으로 로컬만 받지만 설정에 따라 외부명령도 받음 chronyc tracking 동기화된 서버 127.127.1.1은 안한다는 뜻 stratum 현재 시스템까지의 계층홉수 utc system time 시간오차 interval 동기화 간격
sources M ^ 서버, = peer, # local S * 동기화, + 사용가능, - 가능하지만 제외, ? 불가능, x 시간부정확, ~ 시간변동폭이 큼 Poll 측정간격 Reach 유효한 응답회수 마지막 샘플받은 시간 마지막 측정시 오차범위 -v 상세정보
sourcestats -v 상세정보 NR number of runs 값이 np Number of sample poing보다 현저히 낮을 경우 동기화대상으로 적절치 않음
설정변경 cat /etc/chrony.keys 키확인 chronyc add server ntp.ehw.or.kr authhash SHA1 passwd HEX:dfjkjslkfw add server ntp.eh.or.kr -a 자동수행 영구 변경이 아님 /etc/chrony.conf 에서 직접 추가 ntp 서버 서비스재시작 후 chronyc sources
GUI install system-config-date system-config-date
수동설정 date --utc --set 09:23:00 --set 203-23-23 일월시분년으로 한꺼번에 입력가능 0130230002 timedatectl 기본설치도구 status list-timezones set-timezone America/Whitehorse set-time 12:00:00 set-local-rtc 0 utc, 1 시스템시간대 set-ntp true 서버사용
14.방화벽 외부 네트워크에서 내부에 접근하는 인가되지 않은 패킷을 차단하는 솔루션 리눅스 netfiler에 의해 적용, 패킷을 내부로 전달할지 폐기할지 결정하는 커널 모듈 사용자는 관리도구를 통해 netfilter 제어
iptables 커널 2.4부터 패킷 필터링 도구, 그 이전엔 ipchain 규칙 변경시마다 중지후 재시작필요 -> 네트워크가 수시로 변하는 가상화 환경에는 어려움
filrewalld systemd와 함께 도입, 동적변경 가능 iptables와 함께 사용시 충돌 grep Conflicts /usr/lib/systemd/system/firewalld.service xml 파일형태로 보관 runtime 재시작하면 사라짐 및 permanent 설정 xml로 저장, 적용위해선 reload나 restart 필요
pre-defined zone, default zone 인터페이스가 추가될때 연결돼있는 영역, 규칙 설정시 별도지정없으면 block 변경불가 모든패킷 거부, 아웃바운드 허용 dmz 인바운드 거부, 외부로의 연결, ssh 허용 drop 변경불가 인바운드 폐기, icmp err 폐기, 아웃바운드만 허용 external 인바운드 거부, 아웃바운드 ssh 허용, masquerading 활성화 home 인바운드 거부, dhcpv6-client ipp-client mdns samba-client ssh 허용 internal 인바운드 거부,dhcpv6-client ipp-client mdns samba-client ssh 허용 public default zone, 인터페이스 추가시 규칙추가, 인바운드 거부, ssh dhcpv6-client 허용 trusted 변경불가, 모두 허용 work 인바운드 거부, dhcpv6, ipp, ssh허용
pre-defined service d-bus 메시지 버스 시스템, 응용앱간 대화 인터페이스 제공,
/etc/firewalld/, 실제 적용 설정과 규칙 service 디렉토리에 active zone 파일만 존재 /usr/lib/firewalld 기본 구성및 대비용 파일
처음설정시 /etc/firewalld/service 에 public.xml만 있고 따라서 public만 허용 패킷이 들어오면 출발지 주소를 살펴보고 해당하는 규칙이 설정된 영역을 찾음. 찾지 못하면 유입된 인터페이스 규칙이 존재하는 영역 전달? bash-completion? firewall-config GUI 세부설정이 까다롭고 설정단계가 복잡해짐
firewall-cmd --state --get-zones --get-services --get-active-zones --get-default-zone --list-all --zone=home --set-default-zone=home 영구저장 --add-interface=ens37 --zone=home p415? 인터페이스 영역 변경 --change-interface=ens37 --zone=home --add-source=194.232.2.2/24 --zone=public(없으면 기본값) --permenent --remove-source= --permanent 제거시에도 쓰지않으면 런타임설정만 변경됨 --reload --list-all|grep sources --add-service=http --zone=public 미리 정의된 서비스만 가능 --list-services --zone=home --remove-service= --permananet --add-port=4000/tcp --zone=internal 서비스가 정의돼있지 않은경우 반드시 프로토콜유형 지정, 같은 번호라도 프로토콜이 다르면 다른 규칙으로 인식 --list-ports --remove-ports= --add-protocol=icmp --zone=home /etc/protocols --remove-protocol= --add-forward-port=port=5000:proto=tcp:toport=22:toaddr=192.123.2.2(전달시에만) --remove-forward-port= --runtime-to-permanent
세부규칙 rich rule --add-rich-rule --remove-rich-rule= --list-rich-rule= firewalld.richlanguage(5) 매뉴얼 family=ipv4/ipv6 source address=ip/mask destination addresss=ip/mask service name= port port= protocol=tcp/udp protocol value= forward-port port= protocol=tcp/udp to-port= toaddr=ip log PREFIX=로그의 시작부분 level=PRIORITY limit value=RATE 숫자/DURATION 일시분초 ex) 3/h, syslog기록 audit limit value=RATE/DURATION audit.log accept reject drop 패킷 응답방식 reject는 거부응답있음 firewalld-cmd --zone=work --add-rich-rule='rule family=ipv4 source addresss="192.168.0./24" service name="http" accept' --permenant firewalld-cmd --zone=public --add-rich-rule='rule port port="5000-5100" protocol="tcp" log prefix="DROP" limit value="3/m" drop' 해당영역 포트 패킷은 drop firewalld-cmd --zone=home --add-rich-rule='rule family=ipv4 destination address="192.168.0.100/32" port port="4000" protocol="tcp" accept' 홈 영역을 통해 4000 tcp로 들어온 패킷중 실제목적지가 192.168인 패킷허용 firewalld-cmd --zone=internal --add-rich-rule='rule forward-port port=5000 protocol=tcp to-port=22 to-addr=192.143.22.2' 5000번으로 들어왔을때 22번 전
vol2 p4? teaming = port trunking, link aggregation, channel bonding, ethernet bonding, channel teaming, nic teaming
runner 처리방식 결정, 지정시 json 문법 teamd runner 관리 broadcast, 모든 포트 이용 패킷전송 roundrobin, 포트 인터페이스들이 순차적으로 데이터 전송, 집중완화, 효율적이진 않음 loadbalace 전송 휫수가 아닌 데이터 전송량 기준 분배, 지속모니터링으로 인한 자원소모 , activebackup 장애조치만을 위한 설정, 대기후 장애시 백업 , , lacp link aggregation control protocol 802.1ax 스위치 지원 필요, 물리 인터페이스를 그룹을 묶을때 관계 및 속성 값을 동적인 방식으로 할당해주는 프로토콜, 특정 장비 필요
vs bonding 본딩은 커널레벨 드라이버제어, 티밍은 유저레벨 team netlink API 사용 유연성 및 처리량 향상 해시함수 지정가능 ipv6 모니터링 가능 포트간 우선순위 설정 가능 포트별 링크 모니터링 설정 가능 확장성 향상 오버헤드 낮아짐? 소프트웨어인데?
인터페이스 추가후 nmcli device status install teamd nmcli con add type team(or team-slave) infname team0 co-name cli-team ip4 192.16 gw4 192.168 config '{"runner":{"name":"broadcast"}}'(생략하면 안됨) nmcli con sh nmcli con sh cli-team 팀 인터페이스 생성후 연결되 ㄹ물리인터페이스인 포트 인터페이스 생성? p10 nmcli con add type team-slave con-name cli-port1 ifname 실제 인터페이스 ens37,38 master team0
수정 nmcli con mod cli-team ipv4.addr,gat4eway,dns,method manual
nmcli mod cli-team connection.id new-cli-team team.config '{"runner":{"name":"activebackup"}}' 설정후 팀, 포트 인터페이스 모두 활성화해야함 nmcli con up new-cli-team, cli-port1, cli-port2 포트 비활성화시 팀이 비활성화되는건 아님
nmtui team 방식 선택 slave 설정시 ethernet 선택 edit json 설정 {"runner":{"name": "roundrobin"}} ip주소, manual, 서브넷 마스크 미선택시 기본값 /32, activate a connection
nm-connection-editor
/etc/sysconfig/network-scripts/ 팀 인터페이스 BOOTPROTO dhcp/none TEMA_CONIFG 포트인터페이스 TEMA_MASTER 인터페이스마다 설정파일 각각생성
nmcli con reload
관리 teamdctl team0 state view ports: name: 에 링크 상태 변경 감지 도구 표시 ethtool, arp_ping, nsna_ping runner: 활성화된 포트 -v 추가정보
teamnl team0 ports
ip 명령어도 있음
추가수정 teamdctl team0 port add/remove ens44 teamnl team0 ports
ip link set dev ens44 master team0 ip link set dev ens44 down - busy로 안되면 시도 ip link set dev ens44 master team0 teamnl team0 ports
activebackup 방식 러너에서 활성화포트 변경 teamnl team3 getoption activeport
teamnl team3 setoption activeport 9 ip link set dev ens43 down ip link set dev ens43 up
팀 구성 설정 cat /usr/share/doc/teamd-1.25/ activebackup_ethtool_1.conf { "device": "team0" "runner": {"name": "activebackup"}, "link_watch": {"name":"ethtool"}, "ports": { "eth1": { "prio": -10, "sticky": true }, "eth2":{ "prio": 100 } } }
activebackup_arp_ping_1.conf { "device": "team0", "runner": {"name": "acivebackup"}, "link_watch": { "name": "arp_ping", "interval":100, "missed_max": 30, "source_host": "192.168.23.2", "target_host": "192.23423.." }, "ports": { "eth1":{ "prio": -10, "sticky": true }, "eth2":{ "prio":100 }}}
neighbor solicitation neighbor advertisement 인접 인터페이스 링크계층 주소접근 확인 activebackup_nsna_ping_1.conf { "device": "team0", "runner": {"name":"activebackup"}, "link_watch": { "name": "nsna_ping", "interval": 200, "missed_max": 15, "target_host": fe80::210:18ff:feaa:bbaa" }, "ports": { "eth1" : { "prio": -10, "sticky": true }, "eth2": { "prio": 100 }}}
본딩 투 티밍 마이그레이션 bond2team --master bond0 --rename bon2team vim /tmp/bond2team. /etc/sysconfig/network-scripts 이동 name 바꾸기 systemctl restart NetworkManager nmcli con sh nmcli con up bon2team nmcli con up bon2team-port1,2 teamdctl bon2team state
2.selinux 기본적으로 리눅스는 descretionary access control 특정 소프트웨어 취약점이 존재할때 해당 취약점을 통해 시스템 권한 이 너무 쉽게 탈취된다는 문제 mandatory access control 커널 모듈 사용자, 프로세스, 파일, 포트에 정책을 부여해 접근제어 각 파일 등에 붙이는 보안 레이블을 컨텍스트라고 함 연관된 컨텍스트끼리만 접근가능 boolean 서로 컨텍스트가 없어도 접근할 필요가 있을때 쓰는 스위치 주체 subject 자원에 접근하는 프로세스 또는 사용자 객체 object 파일 또는 포트와 같은 자원 dac 사용자가 임의로 객체에 권한 부여, 임의 접근 제어 모델 객체에 대한 권한만 있다면 접근 가능 구성이 쉬움 mac 주체와 객체 보안레이블과 정책 허용 스위치에 의해 접근제어 먼저 권한 확인후 보안레이블 확인 보안레이블 컨텍스트가 없는경우 정책허용스위치 구성이 어려움 rbac 역할을 사용자에게 부여 ovirt
semanage - policycoreutils-python 패키지 포함 import 로컬 사용자정의 가져오기 export 출력 login 리눅스 사용자와 selinux 사용자 연결 user selinux 사용자의 역할과 레벨 port 포트레이블 interfae 인터페이스 유형정의 module selinux 정책모듈 node 노드유형 fcontext 파일컨텍스트 boolean 스위치 permissive 프로세스 유형 실행모드 dontaudit 모드 활성화
모드 disabled 모듈 메모리에 로드안됨, 권한기준으로 접근제어 enforcing selinux 커널모듈에 메모리에 로드, mac 파일권한과 컨텍스트, 부울 확인 permissive 메모리에 로드 그러나 강제 안함, 정책 위반시 경고
disabled <> enforcing 시에는 반드시 재부팅, 메모리에 커널 모듈이 로드되지 않았기때문
getenforce setenforce enforcing/permissive/1/0 재부팅 이후 유지위해선 /etc/selinux/config 수정 /etc/sysconfig/selinux 는 링크파일 SELINUX SELINUXTYPE targeted 특정 프로세스만 보호, 기본값 공격당할 가능성이 높은 프로세스 접근제어, 대부분은 dac, 가능성이 높은 프로세스는 selinux 자체 도메인 내에서 실행? p64 프로세스가 도메인 외부 파일이나 자원에 접근시 차단 및 기록 /etc/selinux/targeted/active/modules/100,400
minimum 최소 프로세스만 보호 install selinux-policy-minimum /etc/selinux/minimum/active/modules/100 file 'ls /etc/selinx/minimum/active/modules/100' | wc -l
mls 다중단계 보안 multi level securiy top secret, secret, confidential, unclassified 특정계층 레벨은 상위 계층에 접근할때는 읽을 수 없고 쓰기만 가능, 하위계층에는 쓰기는 할수없고 읽기만 가능 install selinux-polkicy-mls
컨텍스트 ps axZ ls -dZ 사용자: 역할: 유형: 레벨 selinux 사용자 rbac 역할 type enforcement 속성 mls, multi category security mcs 레벨
cp 컨텍스트 유형 변경 mv, cp -a 유형 유지
컨텍스트 변경 chcon -t httpd_sys_content_t index.html 인덱스파일에 컨텍스트 유형 부여 restorecon 수동 지정 안됨, 상위 디렉토리 컨테그스트대로 수정 -R,r 하위 디렉토리까지 -F 강제 -v 변경사항 출력 restorecon -v index.html semanage fcontext -l 컨텍스트 상속관계 확인 semanage fcontext -a -t samba_share_t '/conext/smb(/.*)?' 컨텍스트 추가, 부여 restorecon -RFv /context/smb 확정
boolean getsebool -a 모든 부울 상태 semanage bollean -l 상태 및 영구설정
setsebool httpd_can_network_connect_db on -P 영구
semanage boolean -m -0 함께사용 httpd_can_network_connect_db 런타임가 영구설정 함께 변경
port label 서비스에 해당하는 포트 레이블 지정 semanage port -l 확인 semanage port -a 레이블 지정 -m 변경 -d 제거 -t 유형 -p tcp/udp semanage port-a -t http_port_t -p tcp 8900 두개의 포트레이블은 안됨 유형이 다르면 가능
트러블슈팅 서비스가 안될때 permissive 모드로 변환 파일 보안 레이블 확인, 적절한 컨텍스트 유형 포트 레이블 확인 부울 확인 접근 거부기록 확인 avc access vector cache avc denials audit 실행중일때 /var/log/audit/audit.log 에 저장 auditd 중지, rsyslogd /var/log/messages auditd, rsslogd, setroubleshootd 실행 /var/log/audit/audit.log, /var/log/messages audit.log는 grep으로 denied 패턴 검색 messages 는 SELinux is preventing 으로 검색, alert id 확인
- dns /etc/hosts 정방향 조회 name -> ip 역방향 ip -> name 쉽지 않음 대부분의 dns 서버가 name-> ip 방식이기 때문, 특수도메인 in-addr.arpa 부터 계층적으로 ip->name 조회가능 dns 캐시 시스템이 기억하고 있는 name과 ip주소 dns 레코드 수명 ttl iterative query recursive query
dns 레코드 A, AAAA 특정 호스트 주소 ipv4,6 CNAME alias, canonical name MX main exchange NS name server PTR pointer 역방향 조회 SOA start of authority TXT
host -v 상세표시 -t 타입 -a = -t all -v -l
nslookup 대화형/비대화형 server 8.8.8.8 set type=ns naveer.com
dig @주소
dns 서버구성 berkeley internet name domain bind 를 가장 많이 씀 internet systems consortium 에서 관리 yum info bind systemctl status named.service cat /etc/named.conf listen-on ipv4 요청에 응답할 인터페이스 및 포트 listen on v6 allow-query 요청을 허가할 대상 localhost->any systemctl start named.service systemctl enable named.service firewalld-cmd --add-service=dns --permanent firewalld-cmd --reload nslookup
현재 캐싱 수행중, 직접 dns 레코드를 관리하려면 영역을 설정해야함 /var/named cp named.empty /date/new.zone @ 서비스 영역 도메인 origin을 의미 IN internet SOA 도메인권한 master네임서버 dns 서버관리자 메일주소 @대신. serial 도메인 정보 갱신여부 판단 refresh slave가 1차 마스ㅓ 서버의 변경을 확인하는 주기 retry 재시도 주기 expire 만료기간 minimum 레코드 유지기간
역방향조회 host 8.8.8.8 host -v -t NS in-addr.arpa 8.8.8.8 역방향조회시 fqdn은 상위도메인이 가장 마지막, ip는 가장 앞에 있기때문에 위치가 바뀌어야함
/var/named/data/nobreak.com.zone $TTL 3H @ IN SOA ns.nobreak.com root.nobreak.com ( 20170505 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H); minimum @ IN NS ns.nobreak.com IN MX 10(우선순위) mail.nobreak.com IN A 192.168.100.100 ns IN A 192,168,100.10 mail IN A 192.168.100.20 www IN A 192.168.100.100 ftp IN CNAME www
/var/named/data/db.192.168.100 $TTL 3H @ IN SOA ns.nobreak.com root.nobreak.com ( 20170505 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H); minimum @ IN NS ns.nobreak.com 10 IN PTR ns.nobreak.com 20 PTR mail.nobreak.com 100 IN PTR www.nobreak.com 100 IN PTR ftp.nobreak.com
/etc/named named.ca 최상위도메인 zone "nobreak.com." IN { type master; file "data/nobreak.com.zone"; };
zone "100.168.192.in-addr.arpa" IN { type masster; file "data/db.192.168.100"; };
named-checkzone nobreak.com /var/named/data/nobreak.com.zone sed -i '/WRONG/d' /var/named/data/nobreak.com.zone
named-checkconf /etc/named.conf
systemctl restart
dns 서버 이중화 이후 동기화 zone transfer 모든 영역을 전소을 할경우 도메인내의 호스트 정보및 도메인 구조정보 노출가능성, 등록된 서버로만 전송허가
master dns 설정 /etc/named.conf zone "nobreak.com" IN { type master; file "data/nobreak.com.zone"; Allow-transfer { 192.168.100.129;}; };
slave zone "nobreak.com" In { type slave; masters { 192.168.100.130;}; file 'slaves/nobreak.com.slave"; };
systemctl restart named file /var/named/slaves/nobreak.comslave
rndc remote name daemon control rndc-confgen 키 실행시마다 변경 컨트롤할 서버정보 named.conf에 추가해야할 내용 key "rndc-key" { algorithm hmac-md5; secret "ajhdnfnl"; }; controls{ inet 192.168.100.130 port 953 allow { 192.168l.100.129; } keys { "rndc-key"; }; };
firewalld-cmd --add-port=953/tcp --permanent firewall-cmd --reload rndc reload stat 통계파일생성 dumpdb 덤프 생성 flush 캐시삭제 halt 즉시 중지 stop 중지 변경사항 파일저장 종료
캐시전용 dns서버 install unbound /etc/unbound/unbound.conf server: interface: 요청수신 대상 access-control: 192.168.100.0/24 allow,refuse, deny forward-zone 요청전달 name: ".' 대상도메인 forward-addr: 8.8.8.8 systemctl enable unbound start firewall-cmd --add-service=dns --permanent firewall-cmd --reload host unbound.ent 192168.100 129
unbound start stop reload status lookup dump_cache 캐시출력 load_cache 파일에서 읽기 flush flush_zone
- dhcp discovery 브로드캐스트 offer request ip지정 브로드캐스트 acknowledge
연장 request 유니캐스트 ack 임대기간 50%이후 최초수행, 안되면 7/8 시점에 재시도
해제 release
구성 install dhcp nmcli con add con-name "dhcp static' ifname ens33 type ethernet ipv4.addresses 192.168.100.10/24 ipv4.dns 192.168.100.2 ipv4.gateway 192.168.100.2 nmcli con up ip add sh /etc/dhcp/dhcpd.conf host reserved{ hardware ethernet 00:5e:23;234;2;23; FIXED-ADDRESS 191.268.100.20; }
SYSTEMCTL ENABLE DHCPD START FIREWALL-CMD --PEREMANENT ---ADD-SERVICE=dhcp fire4wall dmc reload
임대한 정보 var/lib/dhcp/dhcpd.leases start ends cltt 마지막 요청처리시간 binding state 임대 active, 반납 free, backup = failover next binding state rewind binding state 페일오버 구성시 ip주소 재발행위한 바인딩 상태 hardware ethernet client hostname
djcp 서버를 통해 ip를 임대받은 호스트에 대한 레코드를 영역파일수정없이 자동생성 dns 동적업데이트 /etc/named.conf zone "nobreak.com " IN { type master; file "data/nobreak.com.zon "; allow-update{127.,0.0l.1;}; ]; 모든 호스트로부터 업데이트 정보를 받으면 혼선되므로, dhcp 서버만 동적 업데이트를 수신하도록 설정, 업데이트시 transaction signature tsig 를 이용해 데이터를 보호하고 변조차단
tsig domain name system security extension dnssec dnssec-keygen -a HMAC-MD5 -b 128 -n host nobreak.com cat Knobreaok.com .key caqt kbreea.private /etc/named.conf dns 서버수정 zone "nobreak.com." IN { type master; file "data/nobreak.com.zone"; allow-update{key DDNS_KEY;}; ]; 동적업데이트가 수행되면 기존 영역파일위치에 .jnl 이 생성 host,dig,nslookup으로 조회가능 dhcp 서버 수정 /etc/dhcp/dhcpd.conf key DDNS_KEY{ algorithm hmac secret jaskdfl; } option domain-name "nobreak.com"; ddns-updates on; ddns-update-style interim; zone nobreak.com { primary 192.168.100.10; key DDNS_KEY; } 업데이트 메시지 확인 /var/log/messages
- ldap ldap 디렉토리 서비스 디렉토리에 네트워크를 통해 공유하고자 하는 사용자, 시스템, 네트워크, 서비스및 앱 정보 저장 ldap 프로토콜로 접근 kerberos 네트워크 환경 통합인증 sso +dns, 암호화 인증서 관리 =freeipa 389 directory server mit kerberos kdc dogtag 인증서 관리 bind apache, python
디렉토리 서비스 파일시스템 디렉토리가 아니라, 주소록이나 전화번호부 즉 db ldap v3 tcp/ip 기반 클라이언트가 네트워크를 통해 디렉토리서비스를 제공하는 디렉토리서버에 접근할때 사용하는 프로토콜, 이전버전 x.500 o rdap 각 개체 = entry 속성 attribute 개체는 목록 데이터는 속성 dc domain component ou organization unit cn common name 이름 sn sirname 성 mail
dn distinguished anme 개체로 이루어진 고유이름 uid=user1, ou=edu, dc=nobreak,dc=co,dc=kr 개체 역순표기
kerberos mit에서 진행된 보안프로젝트 아테나에서 시작 Aunthentication, authorization, accounting 추적 감사 대칭키
클라이언트, 서버, key distribution center로 구성
authentication server 작격 증명서가 없는 사용자 요청에 응답, 티켓을 얻기 위한 버서tgs에 접근하기 위한 티켓 tgt 발행서버, kdc와 같은 호스트에서 동작 tgs ticket granting server 원하슨 서비스에 대한 티켓발급,권한 부여 kdc와 같은 호스트 service 네트워크상 특정 서비스, tgs 티켓을 인증하려면 서비스가 kerberos 서버에 기등록돼있어야함. 보통 ssh,http,nfs 등 네트워크를 이용한 서비스 tgt ticket granting tecket credentials 신원확인 임시 전자 증명서 집합. 티켓이라고도 함 자격증명서 캐시 도는 티켓파일 key를 담은 파일, 캐시로 사용할수 있지만 파일을 더 선호함 key 대칭키, 세션키와 비밀키 사용 key distribution center 티켓 발행서비스, 일반적으로 tgs와 같은 호스트 pricipal 주체, 서비스일때는 서비스명/호스트명@렐름, 사용자일땐 사용자명@렐름 키탭 keytab -key table 주체와 주체의 키목록을 암호화하지 않고저장한 파일 knit서버를 사용해도 되지만 이쪽이 더 쉽게 검샋사용 /etc/krb5.keytab kinit 주체에 대한 tgt 획득 혹은 캐시저장명령 렐름 커버로스 네트워크
통합인증 메일, 뉴스 등 각 서버마다 인증하려면 번거롭기대문에 인증서버를 따로 두고 한번에 인증하는것
freeipa 가상머신기준 install ipa-server ipa-server-dns bind bind-dyndb-ldap ipv4.dns 를 비워놓고 --setup-dns 혹은 ipv4.dns 자체운영 서버 hostnamectl set-hostname ipa.nobreak.com 커버로스 인증시 호스트명에 영향 localhost or localhost6 안됨, fqdn 형식 ipa.nobreak.com, 해석가능한 호스트명, 주소 역방향 해석시 호스트명과 일치 nmcli con mod ens33 ipv4 address 172.16.12.200/24 gateway 183.1324.2.2 method manual 정적ip구성 up /etc/hosts에 등록한 ip 입력 ipa-server-install --setup-dns(dns 서버 구성 안했을경우) ipa 서버 접근시 사용하는 이름 ipa 서버명 커버로스 렐름명 디렉토리 관리 비번 ipa 서버관리자계정 dns 전달자 no 역방향 검색 no /root/cacert.p12 복제본보관 메시지 방화벽 열기 freeipa-ldap tcp 80 88 389 443 464 udp 88 464 123 freeipa-ldaps tcp 80 88 443 464 636 udp 88 464 123 dns tcp 53 udp 53 ntp udp 123 firewall-cmd --permanent --add-service=freeipa,s,dns,ntp reload cp /root/cacert.p12 /root/cacert/p12.bak
관리 ipa서버에서 커버로스 티켓을 획득해야 ipa 사용자생성가능 kinit admin klist
ipa 사용자 기본쉘은 본쉘 ipa config-show ipa config-mod --defaultshell=/bin/bash ipa user-add iser01 --password ' 클라이언트 연결 authconfig 수동 install ipa-client 자동 연결전 클라이언트 dns 주소가 ipa로 지정돼있ㅇ야함 ipa-client-install --mkhomedir
사용자확인 getent passwd user01 /etc/passwd 파일의 사용자정보도 가져올수 있음 ssh user01@localhost
커버로스 키 테이블 kdc에서 생성/커버로스 전용 명령어 생성도 가능 키탭 주체 지정 주체는 서비스 이름과 각 클라이언트의 fqdn fqdn 사용시 ipa 서버에 해당 클라이언트가 호스트로 기등록되어있어야함 클라이언트에서 ipaㄹ 연결하면 자동추가 ipa-client-install --mkd\hoimedir ipa service-add nfs/clinet.nobreak.com@nobreak.com ipa service-show nfs/client.nobreak.com mkdir -p /root/keytabsipa-getkeytab -p nfs/clinet.nobreak.com@nobreak.com -k /root/keytabs/client.keytab ipa-getkeytab -p host/client.nobreak.com@nobreak.com -k /root/keytabs/client.keytab -s kdc 지정 -k 키탭 위치지정 -e 암호화방식 -p 주체이름 서비스명/클라이언트fqdn@렐름 file /root/keytabs/client.keytab 속성 data가 아닐경우 재생성 klist /rootkeytabs/client.keytab 조회 -e 키탭 등록시 암호화 방식 scp /root/keytabs/client.keytab root@client.nobreak.com:/etc/krb5.keytab 클라이언트에 전송
6.ftp tcp/ip 기반 rfc959 20 data port active mode / passive mode 1024이상에서 임의포트, 사용하지 않을때 폐쇄, ascii, ebcdic, binary, 바이트 레코드 페이지단위 전송 full duplex 21 control port half duplex 한번에 한쪽방향통신만 가능
active 클라이언트에서 서버:21로 요청, well known 포트가 아닌 1024 이상의 포트로 제어및 데이터전송 서버:20 에서 클라이언트에게 전달받은포트로 연결시도 서버측에서의 접근이 방화벽때문에 막히는 경우가 많음
passive 클라이언트에서 서버21로 연결요청 서버가 사용할 데이터 포트정보를 클라이언트에 전달 ftps ssl sftp ssh
very secure ftp 최소권한실행, 권한상승은 libcap 라이브러리, 대부분의 프로세스는 chroot jail 즉 /인것처럼 위장제공 install vsftp /etc/vsftpd start enable
systemctl start vsftpd@설정파일.service 설정파일 별도 생성시
systemctl enable vsftpd.target 패키지에 존재하는 모든 설정파일 한번헤 활성화, 각 설정에 대해 독립 데몬 start firewall-cmd --add-service=ftp --permanent reload
/etc/vsftpd/vsftpd.conf 최초접속시 배너문구 connect_from_port_20 or ftp_data_port 추가 listen yes 스탠드얼론/ no xinetd max-client 스탠드얼론일때 기본값 200, 0 무제한 max_per_ip 한 ip에서 최대 동접횟수 기본값 50, 0무제한 local_max_rate bps단위 0 무제한 idle_setsion_timeout pasv_enable 액티브모드시 no pasv_min_port, max_port 샘플파일에 존재하지 않음 0은 지정하지 않음
ftp 192.13.13.41
스탠드얼론 데몬에 메모리 지속상주 즉시응답 xinetd 비사용시 데몬은 비활성화 inetd가 포트만 감시
일반사용자 설정 local_enable 로컬사용자 yes 모든 사용자 write_enable 업로드허용 local_umask 로컬사용자 umask 기본값 077 userlist-enable 특정사용자 접근제어기능 userlist_deny yes 유저리스트파일 에 있는 사용자 접근거부, no 유저리스트만 가능 userlit_file 위치 tcp_wrappers libwrap 라이브러리 사용 접근제어 /etc/host.allow /etc/host.deny 참조 allow 우선순위
익명사용자 anonymous_enable 익명 다운로드 anon_upload_enable anon_mkdir_write-enable 권한부여 anon_other_write_enable 익명사용자가 소유자 별도 지정 chown_uploads 업로드파일의 소유자 chown_username anon_umask 077 anon_max_rate 속도제한 익명으로 로그인시 /var/ftp로 접근하고 / 인것처럼 제공
디렉토리 이동제한 chroot_local_user /etc/passwd 등록 모든 사용자가 현재 디렉토리를 벗어날수 없음 기본값 no chroot_list-enable 위가 no일경우 사용자 등록 chroot_list_file 예외사용자 목록파일
보안설정 가장 안전한 ssl_tlsv1_2 만 yes로 권장 인증서 없을때 서비스 활성화하면 동작안함 인증서 생성후 서비스 재시작 make /etc/vsftpd/vsftpd.pem echo "rsa_cert_file=/etc/vsftpd/vsftpd.pem" >> /etc/vsfptd/vsftpd.conf systemctl restart vsftpd
로그설정 xferlog_enable 로그기록 no xferlog yes vsftpd_log_file xferlog_file xferlog_std_format 포맷지정 로그인, 디렉토리 생성등만 기록, no vsftpd 로그기록 자세하게 vsftpd_log_file dual_log_enable 첫번째가 yes일때 yes면 두개 로그 모두 사용 기본값 no log_ftp_protocol 모든 명령및 응답내역 기록 첫번째 yes 3번째0 no syslog_enable 4번째 저장 로그가 rsyslogd 로 전송 기본값 no
selinuxsemanage fcontext -a -t public_content_t '/ftp/vsftp(/.*)' ftp 파일서버에 대한 컨텍스트 설정 restorecon -RF /ftp 업로드까지 허용 public_content_rw_t setsebool -P allow_ftpd_anon_write=1 익명 아닌가?
7.nfs v3 비동기식 쓰기, 64bit 2gb이상 파일, remote procedure call rpcbind 필요, 공유 디렉토리에 대한 잠금및 마운팅 지원을 위해 별도 서비스, 서비스가 많아 방화벽 설정 복잡 최신리눅스는 v4이기 때문에 설정파일 변경필요 /etc/sysconfig/nfs RPCNFSDARGS="-N 4" systemctl restart rpc-statd nfs-server
nfs nfslock rpcbind 로컬 rpc 서비스로부터 포트예약 v4에선 쓰이지않음 rpc.mountd 마운트요청처리 고유 디렉토리가 현재 nfs 서버에서 export파일에 등록됐는지 rpc.nfsd 버전과 프로토콜 정의, 사용자 레벨 제공, 커널모듈 lockd 서버및 클라이언트에서 실행되는 커널 스레드 network lock manger 프로토콜 제공, nfs가 실행되거나 공유 디렉토리가 마운트될때 자동시작 rpc.statd network status monitor rpc 프로토콜 제공, nfslock에 의해 자동시작, 사용자구성 필요없음 v4에서 미사용 rpc.rquotad 자동시작 사용자구성 필요없음
v4 rpcbind 대신 서버가 2049/tcp 대기, 마운팅과 잠김 프로토콜은 nfsv4 프토로콜로 통일해 방화벽 구성 쉬움, parallel nfs 사용가능, 하위호환 rpc.mountd export 설정위해 필요 nfs-server rpc.nfsd 와 exportfs 가 실행 rpc.idmapd id와 이름 연결
구성 install nfs-utils /etc/exports or /etc/exports.d/ 에 등록 필요 mkdir -p /exports/nobreak mkdir -p /exports/krb5 chmod 775 /exports/* chown user1:nfsgroup /exports/*
/etc/exports 공유 디렉토리 경로, 호스트 접근제어 리스트 fqdn이나 cidr 표기법, 공유옵션 ro rw no_root_squash 클라이언트 root 사용자에게 root 권한부여 sync/async 저장되기 전에 응답안함 sec 보안방법 none nfsnobody uid gid 적용, sys 접근사용자 uid gid 기준, krb5 사용자uid gid 대신 커버로스, krb5i 데이터조작 방지 체크섬으로 무결성 검증, krb5p krb5i+암호화 성능저하 가능성 커버로스 인증사용시 커버로스 혹은 freeipa에 연결 후 nfs-secure-server 실행 install ipa-client ipa-client-install --mkhomedir
exportfs nfs서버의 export 테이블 관리명령 /var/lib/nfs/etab -r 테이블을 다시 불러오는 옵션
systemctl start nfs-server enable 커버로스인증 file /etc/krb5.keytab kdc 생성파일 주체중 nfs 추가 klist -k -e /etc/krb5.keytab systemctl start nfs-secure-server enable firewall-cmd --permanent --add-service=nfs firewall-cmd reload 클라이언트에서 공유 디렉토리 접근 목록 확인하게 설정 firewall--cmd --per -addservie rpc-bind, mountd reload
클라이언트연결 커버로스 사용시 install ipa-client ipa-client-install --mkhomedir
수동마운트 클라이언트에서 공유 디렉토리에 지속연결 showmount -e server.nobreak.com 공유디렉토리 정보확인 mountd와 rpc-bind가 서버 방화벽규칙에 추가돼있어야함 -e 서버에서 export 파일에 등록된 디렉토리 확인가능 mount -o rw,sync,sec=sys server.nobreakl.com:/exports/nobreak /mnt/nobreak/ 서버주소는 ip혹은 fqdn mount | grep '/mnt/nobreak/' 커버로스인증요구 공유 디렉토리 마운트, 키탭파일과 nfs-secure 실행 그렇지 않으면 mount.nfs: an incorrect mount option was specified file /etc/krb5.keytab klist -k -e /etc/krb5.keytab systemctl start nfs-secure enable mount -o rw,sync,sec=krb5 server.nobreak.com:/exports/krb5 /mnt/krb5 mount | grep '/mnt/krb5' 키탭도 있고 nfs secure도 사용중인데 permission오류가 나면 인증시간 정보로 인해 실패 - ntp 서버연결 /etc/fstab 등록 mount -a
자동마운트 자동마운트후 일정시간후 해제, 맵 파일 필요 1 마스터맵 - 마운트포인트와 맵 파일 경로지정 /etc/auto.master /misc 이동식 장치에 대한 자동마운트 설정 /net nfs 서버 fqdn 지정시 지정 호스트 접근
- 마스터맵으로 동작가능한 파일, 일반적으로 /etc/auto.master.d 디렉토리에 .autofs 를 지정해 마스터맵 생성 mount-point /- 직접 맵 ?p220 map-file-path 경로 2 직접맵 마운트포인트 절대경로 /path mount-options server-address:path 3 간접맵 path mount-options server-address:path 4간접 와일드카드 맵 nfs 서버에서 동일경로 아래 존재하는 다수의 공유 디렉토리에 대해 자동 마운트를 설정할때
mount-options server-address:path/& 구성 직접맵 install autofs vi /etc/auto.master.d/nobreak.autofs /- /etc/auto.direct vi /etc/auto.direct /mnt/direct -rw,sunc,sec=krb5 server.nobreak.com:/autofs/direct mkdir /mnt/direct systemctl start autofs enable cd /mnt/direct mount 간접맵 vi /etc/auto.master.d/exports.autofs /nobreak /etc/auto.indirect 자동생성 간접맵경로 vi /etc/auto.indirect autofs01 -rw,sync,sec=krb5 server.nobreak.com:/exports/autofs01 마스터맵과 연결해 마운트포인트지정, start autofs enable cd autofs01 자동생성 mount 와일드카드 vi /etc/auto.indirect
- -rw,sync,sec=krb5 server.nobreak.com:/exports/& restart autofs
8.smb tcp/ip 로컬네트워크 아니면 접속안됨 + cifs다른네트워크 가능 samba smbd 윈도우 클라이언트에 파일과 프린트 서비스, smb 프로토콜로 사용자 인증, 리소스잠금, 자료 공유 tcp 139, 445 대기, smb 서비스 mnbd smb/cifs에 의해 생성된 netbios 서비스 요청에 대해 응답, 윈도환경 검색 프로토콜 udp 137, mnb 서비스 winbind 리/유닉스가 윈도우 서버의 사용자와 그룹정보를 이해할수 있게함, rpc호출, pluggable authentication module, name service switch 사용 ad 사용자가 로컬 사용자처럼 동작하도록 함, smb 서비스와 별도제어
스토리지 구성 install samba-common /etc/samba/smb.conf [global] 서버인증방식과 사용자 저장방법 workgroup 윈도계열 도메인 혹은 작업그룹 security 보안모드 사용자 레벨, 클라이언트에서 smb 사용자 이름/패스워드를 알고있어야함 passdb backend 사용자 정보 저장 tdbsam ldapsam 사용 사용자 정의 섹션 comment path 실제 연결되는 디렉토리 경로 writable 기본적으로 no write list 지정되면 해당사용자만 쓰기가능 그룹지정시는 @ valid user 지정되면 해당사용자만 접근가능 host allows 호스트목록 ip/fqdn browseable yes 클라이언트에서 smbclient 명령으로 탐색가능 [home] 홈 디렉토리 공유 ?p237 [printer]
서버설정 install samba samba-client mkdir -p /share/samba chown smbuser:smbgroup /share/samba semanage fcontext -a -t samba_share_t '/share/samba(/.*)?' restorecon -RFv /share/samba/ /etc/samba/smb.conf [share] comment = path = /share/samba writable = yes write list = smbuser, @smbgroup valid users = smbuser, @smbgroup, @wheel hosts allow = 192.168.1.1/24 briwseabke = no
testparm systemctl start smb nmb enable firewall-cmd --0per --add-=samba reload
사용자등록 useradd -s /sbin/nologin smbuser smb공유에서만 쓸경우 보안을 고려해 쉘 지정 sbvpasswd -a smbuser -x 등록해제 /var/lib/samba/private./passdb.tdb 저장 pdbedit --list
수동마운트 install cifs-utils samba-client smbclient -L server.nobreak.com -U smbuser 마운트포인트 생성 및 마운트 mount -o credentials=/root/smb-auth //server.nobreak.com/share /mnt/share /etc/fstab //server.nobreak.com/share /mnt/share cifs credentials=/root/smb-auth 0 0 -o credential 파일은 root 400 추천 username=smbuser password= domain=SAMBA -o auto-information username=smbuser, password= smb 공유 마운트시 첫번째 인자는 univeersal naming convention 표기법 \호스트명\공유명\공유디렉토리, 리눅스 //
다중 사용자 마운트 ntlm 인증 클라이언트가 ㄹ인증정보를 소유하고 있다는 것을 서버에 전달하여 인증 /etc/samba/smb.conf [share] valid user = smbread 추가 mount -o credentials=/root/smbread, multiuser, sec=ntlmssp //server.nobreak.com/share /mnt/share/
쓰기권한 없을때 재인증 cifscreds add -u smbuser server.nobreak.com update, clear, clearall 시스템 재부팅 필요
자동마운트 install autofs 마스터맵 직접맵 사용시 /etc/auto.master.d/samba.share /- /etc/auto.share 간접맵 사용시 /etc/auto.master.d/samba.share /samba /etc/auto.share /samba가 사전생성되어있으면 제대로 동작안할수 있음
직접맵 /etc/auto.share /mnt/share -fstype=cifs,credentials=/root/smb-auth ://servber.nobrea.com/share 직접 마운트 포인트 만들어주기
간접맵 share -fstype=cifs,credentials=/root/smb-auth ://sesrver.nobreak.com/share
start autofs enable
- iscsi 블록 스토리지 das 시스템에 직접 연결하기 때문에 연결이 복잡해지고 공간이 필요하다 nas 파일단위 공유 san 스토리지 전용 네트워크 블록기반 fc fcp ip ata over Ethernet fiber channel over ethernet, internet small computer system interface
파일기반 블록기반 블록 디바이스로 제공 일반적이 ㄴ디스크장치로 인식 사용
iscsi 타겟 스토리지 장치 제공 시스템 = 서버 초기자 initiator 블록 스토리지를 제공받는 클라이언트 iqn iscsi qualified name 타켓과 초기자의 이름
타겟 target portal group 설정집 access control list 스토리지에 연결 가능한 초기자 지정 logical unit number 스토리지 장치에 부여된 논리 장치번호 portal 초기자가 타겟에 연결할때 사용하는 ip주소와 포트
초기자 discovery login
iqn iqn:취득날짜:도메인 역형식: sotrage 호스트명
타겟설정 install targetcli start target enable targetcli ls backstores 지원객체 block fileio 현재 시스템에서 사용중인 파일시스템의 일부공간 제공 pass through scsi devices 모든 유형의 로컬 scsi 고급scsi 명령은 지원되지 않기 때문에 확실한 사양이 파악되지 않는경우 추천안함 ramdisk 메모리에 램디스크 장치를 저장, 멀티 세션 제공, 저장안됨
block생성 /backstores/block create name=test_block dev=/dev/sdb
fileio 생성 create name-test-file file_or-dev=/root/fileA size=100M write_back=false 캐시비활성화 활성화하면 성능향상대신 데이터손실가능성
pscsi create name= dev
ramdisk create anme= size=100M 새로 생성되는 파일은 없음
iscsi 연결 iqn 설정 /iscsi create wwn=iqn.2017-05.com.nobreak.server tpg 자동 생성 portals 항목에 :3260 이 기본설정 acl 설정 /iscsi/iqn.2017-05.com.nobreak:server/tpg1/acls create wwn=iqnㅡ:client 초기자 iqn 지정 lun 설정 create storage_object=/backstores/block/test_block lun=lun0 backstore에서 생성한 저장객체에 매핑 add_mapped_luns=falses 생략하면 true 쓰기권한 원하지 않으면 false aclss 추가 설정 필요 mapped_lun=1 tpg_lun_or-backstore=/backsotres/fileio/test_file write_protect=1 포탈설정 create 192.168.32.2 포트 생략가능 자동 3260, 설정시 0.0.0.0:3260 이 존재한다면 지우고 나서 설정가능 삭제 delete ip_addresss=192.134193 ip_port=3260 exit firewall-cmd --add-port=3260/tcp --permanent reload
초기자 install iscsi-initiator-utils 타켓 acls 에서 지정한 iqn과 같은이름으로 iqn 설정필요 /etc/iscsi/initiatorname.iscsi start iscsi enable isciadm -m discovery -t st(send target) -p 192.1681.23. isciadm -m node(연결시도) -T IQN.ㅡ:server -l(로그인) iscsiadm -m session(정보확인) -P 3(등급 0,1,2,3) 해제 iscsiadm -m node -T iqnㅡ -u iscsiadm -m session -P 3 iscsiadm -m node -T iqnㅡ -l 완전 연결해제 iscsiadm -m node -T iqnㅡ -u iscsiadm -m node -T iqn -o delete 재연결시 검색부터 필요
연결완료 후 일반적인 로컬장치처럼 사용가능 fidsk partprobe mkfs etc./fstab 등록시 _netdev mount -a
- apache 유닉스 기반 ncsa httpd 를 리눅스에서 동작