vagrant init - 초기화(샘플 파일 생성 명령어) → Vagrantfile 생성vagrant up - 파일을 통해 가상머신 생성 및 부팅vagrant halt - 가상머신 종료vagrant destroy - 가상머신 제거vagrant snapshot save - 복구지점 생성vagrant snapshot restroe - 복구지점 불러오기가상환경 세팅할 폴더를 생성 후 해당 위치에서 command 열기
vagrant init
Vagrantfile(config) 열기/편집
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
config.vm.box = "generic/rocky9" # 이미지 9버전
# private_network = HostOnly
config.vm.network "private_network", ip: "192.168.56.100"
config.vm.provider "virtualbox" do |vb|
vb.memory = "2048"
vb.cpus = "1"
end
# config.vm.provision "shell", inline: <<-SHELL
end
vagrant up - Vagrantfile을 참고해 가상머신 생성
vagrant ssh VMNAME - 생성된 가상머신에 접속
커스텀 shell 설정
bash → zsh(powerlevel10k) + 유용한 플러그인
Upgrade your Terminal experience with Zsh, Oh My Zsh, and powerlevel10k!
설정 후 복원지점 생성
vagrant snapshot save <스냅샷 이름> - 현재 지점 스냅샷으로 가상머신 상태 복원 설정vagrant snapshot restore <스냅샷 이름> - 스냅샷 지점으로 복원vagrant snapshot list - 저장된 스냅샷 확인ls -l /home
ls-l/homeman <명령어> - 해당 명령어의 매뉴얼을 보여준다./ 를 입력 후 검색하고 싶은 내용을 넣은 후 검색 할 수 있다.n 을 눌러 다음 검색어로 넘어갈 수 있다.-l : 줄 개수-w : 단어 개수-c : 바이트 개수-m : 문자 개수grep <옵션> <패턴> <파일이름> grep -v -e "^#" -e "^$" <파일명>find <경로> <조건> <동작> find / -name <파일/디렉토리명> - 명칭 검색find / -name <파일/디렉토리명> -type f - 검색 결과 중 타입 지find /root -size 10k - 정확한 파일 크기를 검색find /root -size -1M - 1 MB 이하find /root -size +1M - 1MB 이상find /root -name <파일/디렉토리명> -ls - 검색 결과의 경로 및 자세한 정보 표시find /root -name <파일/디렉토리명> -exec cp {} /home/vagrant \; - 검색 결과 대상에 특정 명령 수행find /root -name <파일/디렉토리명> -ok cp {} /home/vagrant \; - 검색 결과 대상에 특정 명령을 대화형으로 수행^(a) - (a)으로 시작하는 줄(a)$ - (a)으로 끝나는 줄(a).....(b) - a와 b사이 아무 문자 5개로 이루어짐[a-z]* - 소문자로 시작하는 문자 또는 아무것도 없음[aA]bcde - abcde 또는 Abcde[^a-r]bcde - 첫 문자가 a-r 사이를 제외하고 s-z 사이의 문자로 구 [234asdfg] - 대괄호 내 글자 중 하나가 있을 \) 추가touch photo{1,2,3}.jpg, touch movie{1..5}.avi mv /home/vagrant/movie?.avi moviemv *.jpg photorm movie/{movie1.avi, movie2.avi, movie3.avi}파일에 쉽게 접근하기 위해 사용
ls -l 두 번째 필드에서 확인할 수 있다.ln <원본> <링크파일명> 으로 링크 생성ln -s <원본> <링크파일/디렉토리명> 으로 링크 생성ESC)i):)<시작라인>, <끝라인> s/bin/abc/g - 문서 내 bin → abc로 변경-rw-r--r--r - 읽기w - 쓰기x - 실행- - 권한 없음useradd <사용자id> - 아이디 생성passwd <사용자id> - 패스워드 생성groupadd <그룹id>groups <사용자id> - 사용자가 속한 그룹(root) usermod -g <그룹명> <사용자id> - 특정 사용자에게 그룹 추가chgrp <그룹명> exam_num - 그룹 변경chown <사용자id>:<그룹명> <파일명> - 소유자와 그룹 변경chown <사용자id> <파일명> - 소유자 변경 chown <사용자id>. <파일명> - 사용자와 그룹명이 같은 경우 일괄 변경history - 현재까지 입력된 명령어의 기록
!<명령어 번호> 를 입력한다.<명령어> esc + . - 명령어로 입력한 마지막 인자를 불러온다.
Ctrl + u - 현재 줄 모두 지우기
> - 표준 출력(stdout=1)을 별도 파일에 저장(write)
ls noname 2> error.txt 표준 에러(2)를 입력해 표준 에러에 대해 저장.ls noname fileA &> print.txt - 표준 에러(2)와 표준 출력(1)을 함께 저장>> - 출력 값을 별도 파일에 추가(append)
ls -l | tee tee.txt - 커맨드 결과를 출력하고 결과값을 파일로 저장
tar - 용량을 압축하지 않는 방식으로 아카이브 파일을 생성
tar -zcvf <파일이름>.tar.gz <압축 대상> tar -zxvf <추출 대상>tar -Jcvf <파일이름>.tar.gz <압축 대상>/ 을 제거 후 저장하고 추출할 때는 압축 파일이 위치한 경로에 압축을 해제한다. 유저가 파일, 디렉토리를 생성할 때 기본적인 권한을 주기 위해 설정하는 값으로
3~4의 숫자로 구성되며 뒷자리 3개가 u/g/o 의 권한을 가리킨다.
nice -n -15 sleep 1000 & - -15의 우선순위로 sleep을 백그라운드에서 실행/etc/passwd - 사용자 정보가 담긴 파일!!로 지정된 경우 비밀번호 Xroot:x:0:1003:root:/root:/bin/zsh
| 번호 | 필드명 | 의미 |
|---|---|---|
| 1 | USER | 사용자 |
| 2 | x(place holder) | 패스워드 저장 |
| 3 | UID | 유저 ID |
| 4 | GID | 그룹 ID |
| 5 | GECOS | 사용자 주석 |
| 6 | HOME | HOME 디렉토리 경로 |
| 7 | SHELL | 기본 SHELL |
/etc/group - 그룹 정보가 담긴 파일사용자는 최소 하나의 그룹에 속해야한다.(기본 그룹)
기존 유저의 그룹 추가 방법
usermod -g <그룹명> <유저명> - 기본 그룹 변경usermod -G <그룹명> <유저명> - 보조 그룹 지정필드 예시 root:x:0:
| 번호 | 필드 | 의미 |
|---|---|---|
| 1 | GROUP | 그룹 이름 |
| 2 | x | 그룹 패스워드 저장 |
| 3 | GID | GID |
| 4 | MEMBER | 해당 그룹을 보조 그룹으로 사용하는 사용자 이름 |
/etc/shadow필드 예시root:$6$rgIgKwI1aJNMJL9U$mwLgcT5HgxfJ/mYdCUTnEwHcwf5YSJ6I.g0n594YHGgZ7V/ytPWmnxdqKbOH1jf5c.VSsva.NYZXF7iSGSos30:19864:0:99999:7:::
| 번호 | 필드명 | 의미 |
|---|---|---|
| 1 | USER | 사용자 |
| 2 | HASH | 1. $로 구분 시 3개의 구역이 나뉜다. |
useradd [option] <userid>Option
| 옵션 | 설명 |
|---|---|
| -u | UID |
| -U | 사용자와 같은 이름의 그룹 생성 |
| -g | 기본 그룹 지정 |
| -G | 보조 그룹 지정 |
| -d | 홈 디렉토리 지정 |
| -s | 기본 쉘 지정 |
| -o | UID 중복 허용 |
| -p | 패스워드 지정 |
| -r | UID 199 ~ 999인 시스템 계정을 만들 때 사용 |
| -m | 홈 디렉토리가 존재하지 않을 경우 생성 |
| -e | /etc/shadow의 EXPIRE 필드 지정 |
| -f | /etc/shadow의 INACTIVE 필드 지정 |
/etc/default/useradd - useradd 시 기본값을 담은 파일
-p 옵션을 사용해 유저를 생성할 경우 암호화가 되지 않고 /etc/passwd 에 그대로 기록되기 때문에 권장하지 않는다.
/sbin/nologin 을 유저의 shell로 지정할 경우 로그인 할 수 없다.
userdel -r <사용자id>-r 옵션 없이 유저 제거 시 삭제된 유저의 홈 디렉토리가 남는다.usermod <argument> <사용자id> usermod -aG wheel, 2024 user01usermod -L <userid> 사용자 계정 Lock ↔ -Uid <사용자id>groupadd - 추가groupmod - 변경groupdel - 삭제/etc/default/useradd /etc/login.defs su (Switch User)su [option] <userID>su 사용 시 - 를 사용하지 않고 유저가 변경될 경우 환경 변수나 작업 환경이 변경되지 않기 때문에 - 사용을 권장sudo/etc/sudoer 에 사용자가 등록되어 있어야 sudo 를 사용할 수 있다. /etc/sudoers.d/ 에 사용자 id를 파일 이름으로 한 뒤 <userid> ALL=(ALL) NOPASSWD: ALL 를 입력한다.NOPASSWD: ALL 는 해당 유저가 sudo 작업 시 비밀번호 요구 여부에 대한 내용이다.sudo 작업 시 로그인 유저의 패스워드를 사용해 인증한다.sudo 권한을 가지고 있다.chage - 유저 패스워드 만료 정보 조회 및 변경chage -l <userid> : 유저 패스워드 정보mkdir -m 755 /home/lastuser 처럼 디렉토리 생성 시 권한 설정 가능setuid - 소유자 권한 중 x가 s로 되어있는 경우(/usb/bin/passwd)
setgid - 소유 그룹 권한 중 x가 s로 되어있는 경우
sticky bit - 기타 사용자 권한 중 x가 t로 되어 있는 경우
| 파일 | 디렉토리 | |
|---|---|---|
| setuid | 소유자 권한 동작 | X |
| setgid | 소유 그룹 권한 동작 | 파일 생성 시 소유 그룹이 디렉토리의 소유 그룹 상속 |
| sticky bit | X | 본인 소유 파일만 삭제 가능 |
확장 권한 부여 방식
chmod u+s, g+s, o+t <파알 또는 디렉토리> drwxr-sr-x+ 처럼 일반적인 권한 외 세부 권한을 주게되면 권한의 맨 마지막 문자가 . 이 아닌 + 로 되어있다.getfacl <파일/디렉토리명> - ACL의 적용 여부 및 세부 권한 확인setfacl -m u:vagrant:rw- test-acl - vagrant 사용자에게 test-acl의 권한을 사용자 권한인 rw- 부여 setfacl -m m::rwx test-acl - ACL 마스크를 모든 권한 허용으로 변경setfacl -m d:u:vagrant:rwx <디렉토리명> - 기존 ACL 세팅에 d가 추가된 모양at [option] time-specat> 로 프롬프트가 변경되면 작업 또는 스크립트 파일을 입력 후 Ctrl + D를 통해 빠져나올 수 있다.at now +1mincrontab -e → 작업 예약 crontab -l → 작업 리스트*/2 * * * 1-5 ll etc - 월-금 사이 2분 단위 실행/etc/crontab 을 사용해 직접 작업 예약하는 경우 user-name이 요일-명령어 사이에 들어간다.파티션 기능 별 차이
| MBR 파티션 | GPT 파티션 | |
|---|---|---|
| 파티션 수 | 기본 4 ~ 최대 16 | 128 |
| 디스크 크기(최대) | 2 TB | 8 ZB |
| 부팅 지원 | BIOS / UEFI 지원 | UEFI |
(sudo)lsblk - 리눅스 스토리지 디바이스 확인
fdisk /dev/sdbmkfs - make file systemmkfs -t [filesystem-type] partition mkfs -t ext4 /dev/sdb1mkfs.<TAB> - 부여 가능한 파일 시스템 타입 확인blkid - 블록 장치의 파일 시스템 종류와 UUID⁽¹⁾를 출력blkid /dev/sdb1 / 아래 파일시스템이 연결될 수 있는 경로 생성 혹은 지정mount [option] {partition | UUID } mount-point mount /dev/sdb2 /media/ - 마운트mount | grep /dev/sdb2 - 마운트 확인umount /dev/sdb2(또는 마운트 포인트) - 마운트 해제/etc/fstab - file system tablefstab 작성 방법
| 순서 | 의미 | 설명 |
|---|---|---|
| 1 | Device(UUID) | UUID 또는 마운트 포인트 |
| 2 | MountPoint | |
| 3 | FStype | |
| 4 | Option | 주로 default |
| 5 | Dump | 백업 설정(0,1) |
| 6 | FScheck | 파일 시스템 체크(0,1) |
mount -a - fstab 에 있는 모든 정보를 한번에 마운트
fdisk 에서 스왑 설정 시 파티션 타입을 변경해서 명시적으로 알려주는 것이 추후 작업에 도움이 될 수 있음(t 옵션)mkswap /dev/sdc2 - /dev/sdc2 를 swap 파티션 설정swapon /dev/sdc2 - swap 메모리 설정(임시)swapoff /dev/sdc2 - swap 메모리 해제(임시)vi /etc/fstab → /dev/sdc2 swap swap default 0 0 (영구)swapon -a - /etc/fstab 에 있는 모든 swap 반영 free -h - 스왑 메모리 크기 표현(사용 중 크기 포함)swapon - 장치 이름과 스왑 메모리 크기 표현물리 적인 디스크를 논리적 볼륨으로 묶어 사용 가능하게 해주는 기능
fdisk pvcreate <파티션1> <파티션2>..> pvremovevgcreate <VG명> <PV1>..<PV2>... -n - 생략 시 LV명 자동 생성-l - PE(default 4MB) 개수를 지정-L - 원하는 용량을 직접 지정lvcreate -n <LV이름> -L <볼륨 크기> <VG명> mkfs -t xfs /dev/<볼륨그룹>/<논리볼륨>mount /dev/test-vg/test-lv /mnt/lvm/vi /etc/fstab → /dev/test-vg/test-lv /mnt/lvm xfs defaults 0 0 → mount -aumount <디렉토리 경로>vgextend <VG명> <장치명></dev/VG명/LV명> → 장치명lvextend -L <용량> <장치명> -r -r 이미 마운트 된 논리 볼륨의 크기를 resize-r 을 생략할 경우 xfs_growfs <장치명> 을 사용해야 정상적으로 사용가능한 볼륨이 된다. umount <디렉토리> - 마운트 해제lvremove <장치명> - LV 삭제vgremove <vg명> - VG 삭제pvremove <장치명> - PV 삭제vgreduce <VG명> <장치명> fdisk /dev/sdepvcreate /dev/sde1vgextend test-vg /dev/sde1pvmove /dev/sdd10vgreduce test-vg /dev/sdd10pvremove /dev/sdd10fdisk /dev/sddvgs - VG 요약 확인vgsdisplay - VG 상세 확인lvs - LV 요약 확인lvdisplay - LV 상세 확인이벤트에 관한 기록
journalctl - 로그 확인journalctl -n 10 - 현재 시점부터 10줄 출력journalctl --since "2024-05-28 06:00:00 - 지정 시점 이후 로그 출력journalctl --since "2024-05-28 06:00:00" --until "2024-05-28 08:00:00" - since 와 until 사이 기록만 vi /etc/systemd/journald.conf/etc/rsyslog.conf 를 참고해 /var/log 디렉토리에 로그 종류 별로 텍스트 파일 저장/etc/rsyslog.confsystemctl restart rsyslog - 설정 수정 후 재시작tail -f <작업파일> - 실시간 보기cron 작업에 의해 하루 한번 실행
로그 파일의 크기가 너무 크거나 일정 기간이 지나면 기존 로그를 백업 후 새 로그파일로 저장 시작
/etc/logrotate.conf - 전역 설정
/etc/logrotate.conf/파일명 - 개별 설정
# 순환 대상
/var/log/testlog/testlog.log {
size=3k # 3k 이상 시 순환
create 600 root sys # create=생성 600(권한)/소유자/그룹
rotate 3 # 최대 로그 저장 수
nodateext # 날짜 형식 미적용
}
수동 로그 순환
logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf
ls -l /var/log/testlog
logger -p local1.emerg "Logger test"컴퓨터 시스템의 시간을 동기화 할 때 사용하는 프로토콜
server <주소> iburst chronyc sources - 설정한 NTP 서버에서 시간 동기화timedatectl 로 Time zone 확인timedatectl set-timezone Asia/Seoul 로 Timezone 변경 /etc/systemd/system - 수동으로 생성 및 관리 유닛 저장/run/systemd/system - 임시 저장/usr/lib/systemd/system - 유닛 파일의 원본systemctl list-units - 실행 중인 모든 유닛systemctl list-unit-files - 설치된 모든 유닛systemctl status <유닛> s - 모든 유닛 활성화&상태 확인systemctl is-enable <유닛> - 특정 유닛 활성화systemctl is-active <유닛> - 특정 유닛 실행 상태systemctl start <유닛> - 서비스 시작 ↔ stopsystemctl restart <유닛> - 서비스 재시작systemctl enable <유닛> - 부팅 시 자동 시작 ↔ disablesystemctl poweroff - 시스템 종료 →> rebootsystemd get-default - default.target 에 연결된 타겟 유닛systemd isolate <타겟 유닛> - 런타임 상태에서 사용 중인 타켓 유닛 변경F12 눌러 부트 모드 선택창에 진입 이후b를 누른 뒤 방향키로 rescue 모드 고정e 를 눌러 edit 모드 진입rd.break 를 추가 후 Ctrl + X 를 누르면 부팅 과정이 다시 진행mount -o remount,rw /sysroot - 기존 읽기 전용인 /sysroot 디렉토리를 rw로 변경chroot /sysroot - 지정한 디렉토리를 / 로 설정passwd - root 패스워드 복구touch /.autorelabelrd.break 대신 systemd.unit.rescue.target 을 입력해 Ctrl + X 로 이후 작업을 진행한다.fc-cache -f -v - 폰트 반영fc-cache - 시스템 내 폰트를 읽어 반영-f - 강제 재생성-v - 상세 정보 보기fc-list | grep <폰트명> - 반영된 폰트 확인systemctl restart NetworkManager.service - 네트워크 재시작`nmcli connection show eth0nmcli connection add type ethernet ifname eth1 con-name first ipv4.addresses 10.0.2.100/24 ipv4.gateway 10.0.2.1 ipv4.dns 10.0.2.1 ipv4.method manualnmcli con mod CON-NAME ipv4.dns-priority 1 - dns 우선순위 변경(/etc/resolv.conf) nmcli connection up <con-name> - 특정 연결 활성화down 을 입력하지 말고 다른 연결을 up /etc/sysconfig/network-scripts/ifcfg-* /etc/NetworkManager/system-connections # root 계정에 zsh + powerlevel10k 적용
sudo -i
yum install -y zsh git wget
sh -c "$(wget -O- https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
lchsh # /bin/zsh 입력
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k
vi ~/.zshrc # ZSH_THEME="powerlevel10k/powerlevel10k" 변경
source ~/.zshrc
# Plugin setting
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
vi ~/.zshrc # plugins=(git zsh-syntax-highlighting zsh-autosuggestions) 변경
source ~/.zshrc
# 약어 적용
yum install -y neovim bat
vi ~/.zshrc
# alias ll="ls -alF"
# alias vi="nvim"
# alias cat="bat"
# alias cl="clear"
source ~/.zshrc
/etc/yum.repos.d/repolist all - 설정 리포지토리 파일 인식 확인info - 패키지 정보 확인provides - 파일 이름 기준 패키지 추적search - 패키지 검색 용도list - 패키지 리스트 목록 ( @이 붙어 있는 패키지는 이미 설치)history - 설치, 삭제 내역 확인(간략한 표현)history undo - 기존 내역 번호를 기준으로 되돌리기update - 현재 패키지를 삭제 후 새 패키지를 설치 하는 방식SSL 설정 후 아래와 같은 오류가 나는 경우 vi /etc/yum.conf 에 sslverify=false 를 추가한다.
Extra Packages for Enterprise Linux 9 - x86_64 0.0 B/s | 0 B 00:03
Errors during downloading metadata for repository 'epel':
- Curl error (60): SSL peer certificate or SSH remote key was not OK for https://mirrors.fedoraproject.org/metalink?repo=epel-9&arch=x86_64&infra=$infra&content=pub/rocky&protocol=https [SSL certificate problem: unable to get local issuer certificate]
Error: Failed to download metadata for repo 'epel': Cannot prepare internal mirrorlist: Curl error (60): SSL peer certificate or SSH remote key was not OK for https://mirrors.fedoraproject.org/metalink?repo=epel-9&arch=x86_64&infra=$infra&content=pub/rocky&protocol=https [SSL certificate problem: unable to get local issuer certificate]
원격 접속 시 데이터의 평문 전송을 막고 암호화 전송을 위해 SSH를 사용
/etc/ssh/sshd_config - OpenSSH 설정 파일 위치/etc/ssh/sshd_config.d/*.conf - 해당 파일에 설정을 추가할 경우 sshd_config에 include 되어 같이 포함되어 동작ssh-keygen - 대화형 키 생성 도구ssh-copy-id 유저@IP - 내 키를 접속할 호스트에 복사Host [약칭]
HostName [접속 서버 IP]
User [접속 서버 ID]
IdentityFile [키 위치 등록(~/.ssh/id_rsa)]scp [내 서버 경로] [도착지ID]@[도착지IP]:[도착지 서버 경로] - sendscp [도착지ID]@[도착지IP]:[도착지 서버 경로] [내 서버 경로] - receive-r 옵션 추가sftp [도착지ID]@[도착지IP] → 대화형 모드로 이동/usr/lib/fierwalld , /etc/firewalld/usr/lib/firewalld/zones - 영역 별 규칙 설정/usr/lib/firewalld/servies - 서비스 별 규칙 설정firewall-cmd --get-default-zone - 기본 영역 확인firewall-cmd --list-all - 지정 영역 또는 기본 영역 규칙 확인firewall-cmd --change-interface=[인터페이스ID] --zone=internal - 인터페이스(eth0, eth1) zone 변경firewall-cmd --add-source [IP주소+서브넷마스크] - 특정 주소 대역 통과firewall-cmd --list-source - source 리스트 확인firewall-cmd --list-all --permanent - 영구 적용 규칙 조회firewall-cmd --add-service=http - http 서비스 통과firewall-cmd --add-port=1234/tcp - TCP 1234 포트 통과firewall-cmd --add-service=[서비스명] --permanent- 서비스 통과 설정 영구 적용firewall-cmd --reload - 임시 값 모두 삭제 & 영구 설정 즉시 적용firewall-cmd remove-service --permanent - 영구 설정 서비스 삭제firewall-cmd --zone=internal --add-forwad-port=port:5000=proto=tcp:toport=22:toaddr=192.168.0.100기존 리눅스 보다 강화된 보안의 리눅스
/etc/selinux/config)setenforce 0 → Permissivesetenforce 1 → Enforcingps axZls -lZidchcon - 컨텍스트 변경
chcon -t TYPE FILE/DIRECTORY - 컨텍스트 유형 변경chcon -R -t TYPE DIRECTORY - 하위 객체까지 유형 변경restorecon - 파일의 기본 SELinux 컨텍스트 복구
restorecon FILE/DIRECTORY - 객체 컨텍스트 유형 복구restorecon -Rv FILE/DIRECTORY - 하위 객체까지 유형 복구 + 결과 보기semanage
- 패키지 찾기
- yum search PACKAGENAME
- yum provides PACKAGENAME - 추천
- semanage fcontext ARGS
- -l : 컨텍스트 목록
- -a : 새 규칙 추가
- -m : 수정
- -d : 삭제
- -t : 유형
- semanage fcontext -a -t TYPENAME OBJECT
- 파일이나 디렉토리의 컨텍스트 기본값을 변경
- 기존 항목 변경되지 않음
- semanage fcontext -a -t 'tmp_t' '/selinux-test(/.*)?'
- 하위 파일까지 모두 교체
시스템 운영 중 정책의 동작을 변경할 수 있는 스위치
명령어
- semanage boolean -l :
- boolean 이름
- [ON | OFF]
- 기능 설명
- semanage boolean -m --on BOOLEAN-NAME
- 불린 기능을 ON으로 변경
서비스의 기본 사용 포트 외 다른 포트를 사용하려면 포트 레이블 부여 필요
명령어
semanage port -l | grep SERVICEsemanage port -a -t 'TYPE' PORT -p PROTOCOL/etc/ssh/sshd_config 의 포트 옵션을 2222로 수정 후 에러를 확인해보면 2222 포트에 대한 권한이 거절되었다고 한다.도메인 이름 → IP 변환
www.naver.com 이라는 DNS가 있으면 뒤부터 앞으로 계층 별로 검색한다.yum install -y bind
vi /etc/named.conf
# Any 설정
listen-on port 53 { any; };
allow-query { any; }; # query 허용 src
# Zone(=도메인 영역) 추가
zone "sesac.com" IN {
type master;
file "sesac.zone";
};
cp /var/named/named.empty /var/named/sesac.zone
빈 양식 파일을 가져와 편집
$TTL 3H
@ IN SOA ns.sesac.com meteo0718.naver.com. (
20240603 ; serial 1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS ns.sesac.com. # 에러나면 @ 추가해보기
A 192.168.10.2
ns A 192.168.10.10
www A 192.168.10.20
blog A 192.168.10.30
news A 192.168.10.40
chown :named /var/named/sesac.zone
CNAME = 바로가기 와 비슷한 유형
zone 설정 체크
named-checkconf /var/named/sesac.zone named-checkzone sesac.com /var/named/sesac.zone서비스 재시작
systemctl restart named.service systemctl enable --now named.service firewall-cmd --add-service=dns --permanentfirewall-cmd --reloadhost -t A www.sesac.com <내 IP>
정확히 구성했음에도 DNS가 동작하지 않는다면 /etc/resolv.conf 의 네임서버 우선순위를 조절
정방향 조회와 쌍을 이루며 PTR 레코드 설정을 위해 사용
vi /etc/named.conf
# Any 설정
listen-on port 53 { any; };
allow-query { any; }; # query 허용 src
# Zone(=도메인 영역) 추가
zone "10.168.192.in-addr.arpa" IN { # 192.168.10.xxx 대역
type master;
file "192.168.10.zone";
};
cp /var/named/named.empty /var/named/sesac.zone
빈 양식 파일을 가져와 편집
$TTL 3H
@ IN SOA ns.sesac.com meteo0718.naver.com. (
20240603 ; serial 1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
@ NS ns.sesac.com.
10 PTR ns.sesac.com.
20 PTR www.sesac.com.
30 PTR blog.sesac.com.
40 PTR news.sesac.com.
chown :named /var/named/sesac.zone
CNAME = 바로가기 와 비슷한 유형
서비스 재시작 - systemctl restart named.service
설정 체크
named-checkconf /etc/named.confnamed-checkzone sesac.com /var/named/sesac.zone 방화벽 재시작 - firewall-cmd --reload
적용 확인 -host -t PTR www.sesac.com <내 IP>
Master
/etc/named.conf 의 zone 설정에 slave의 IP를 추가한다.zone "sesac.com" IN {
type master;
file "sesac.zone";
allow-transfer {192.168.10.20;};
};
zone "10.168.192.in-addr.arpa" IN {
type master;
file "192.168.10.zone";
allow-transfer {192.168.10.20;};
};
Slave
etc/named.conf 의 zone 설정에 master의 IP를 작성한다.zone "sesac.com" IN {
type slave;
file "sesac.zone";
masters {192.168.10.10;};
};
zone "10.168.192.in-addr.arpa" IN {
type slave;
file "192.168.10.zone";
masters {192.168.10.10;};
};
윈도우 공유 폴더 처럼 파일을 공유하기 위한 분산 파일 시스템 프로토콜
네트워크로 파일 공유
yum install -y nfs-utils
vi /etc/exports
# Directory Target Option
/share 192.168.10.100/32(rw,sync)
# /share *
# /share 192.168.10.0/24
exportfs -r - 편집한 /etc/exports 읽어오기
systemctl enable --now nfs-server.service
firewall-cmd --add-service=nfs --permanent
firewall-cmd --reloadyum install -y nfs-utilsmount -t nfs -o rw,sync DEVICE M/POINT-t - 파일 시스템 유형 선택 -o - 옵션(필수X, 서버 옵션을 추가DEVICE - SERVERIP:PATHM/POINT - 마운트 포인트mount -t nfs -o rw,sync ns.sesac.com:/nfs /mntvi /etc/fstab - NFS 스토리지 영구 추가ns.sesac.com:/nfs /tmp nfs defatuls 0 0/etc/auto.master )vi /etc/exports/autofs/direct 192.168.10.20/24(rw,sync)yum install -y autofs/etc/auto.master.d/ → vi /etc/auto.master.d/direct.autofs예시의 direct.autofs 는 임의의 이름이며 .autofs는 고정?
/- /etc/auto.direct # M/T, CONF
vi /etc/auto.direct/mnt/nfs -rw,sync 192.168.10.20:/autofs/direct # MT/Option/SRCsystemctl enable --now autofs/etc/auto.master.d/ → vi /etc/auto.master.d/indirect.autofs /nfs /etc/auto.indirect # MT/CONFvi /etc/auto.indirectindirect -rw,sync 192.168.10.10:/autofs/direct # CLIENT MT / 옵션 / 서버 SRCsystemctl enable --now autofsvi /etc/auto.master.d/wild.autofs /wild /etc/auto.wild # M/T # Conf위치vi /etc/auto.wild* -rw,sync 192.168.10.20:/autofs/& systemctl enable --now autofstargetcli - 패키지, target - 서비스Target 설정 (=서버)
dnf install -y targetclitargetcli → ls : 타겟 설정 초기화면backstoresiscsi - iqn 생성backstores/block create dev=/dev/sdb1 name=iscsi-block - 새 블록 설정 생성iscsi/ create wwn=iqn.2024-06.com.sesac:target - iqn 생성.가 아닌 :를 사용iscsi/iqn.2024-06.com.sesac:target/tpg1/acls create iqn.2024-06.com.sesac:initiator - 초기자 iqn 허용 iscsi/iqn.2024-06.com.sesac:target/tpg1/luns create /backstores/block/iscsi-block - 논리 장치번호 block 연결exit → /etc/target/saveconfig.json 에 저장systemctl enable --now targetfirewall-cmd --add-service=iscsi-targetInitiator 설정 (=클라이언트)
dnf install -y iscsi-initiator-utilssystemctl start iscsi - 서비스 시작 및 initiatorname.iscsi 폼 생성vi /etc/iscsi/initiatorname.iscsiiscsiadm -m discovery -t st -p 192.168.10.10 iscsiadm -m node -T [IQN] -l - 접속iscsiadm -m node -T iqn.2024-06.com.sesac:target -u - 해제iscsiadm -m node -T iqn.2024-06.com.sesac:target -o delete - 삭제Initiator 설정 시 discovery=O, 연결-X 인 경우
/etc/initiatorname.iscsi 확인 후 재설정systemctl stop iscsisystemctl stop iscsidsystemctl stop iscsid.socketTarget을 통해 연결된 장치 확인
iscsiadm -m session -P3 | tail -n1장치 마운트 진행
lsblk 를 통해 인식이 안되는 경우 partprobe를 통에 수동으로 인식이 가능mkfs -t xfs /dev/sdb1vi /etc/fstabmount -a| 위치 | 설명 |
|---|---|
| /var/www | 웹 페이지 기본 디렉토리 |
| /etc/httpd/conf/httpd.conf | 웹 서버 주 설정 파일 |
| /etc/httpd/conf.d | 웹 서버 추가 설정 파일 |
| /etc/httpd/conf.modules.d | 웹 서버 + @ 모듈 설정 파일 |
| /usr/share.httpd | 테스트, 에러 페이지 등 기본 콘텐츠 |
| /usr/share/doc/httpd | 웹 서버 관련 문서 파일 |
dnf install -y httpdsystemctl enable --now httpd - 서비스 허가 및 실행curl localhost - 웹서비스 접속 확인echo "test page" > /var/www/html/index.html + curl localhost/etc/httpd/conf/httpd.conf - 구성 확인firewall-cmd --add-service=http - 방화벽 설정(런타임)firewall-cmd --add-service=http --permanent (영구)/usr/lib/firewalld/services/http.xml semanage port -l | grep http - http 관련 SELinux 포트레이블 확인semanage port -a -t http_port_t 8888 -p tcp - 기본 포트 외 포트 지정 시 SELinux 포트레이블 허용(80→8888)하나의 웹 서버에서 여러 웹 사이트를 서비스 할 때 사용
/etc/httpd/conf.d 에 파일 생성<VirtualHost *:80>
ServerName www.default-sesac.com
DocumentRoot /var/www/html
</VirtualHost>
<Directory /var/www/html>
AllowOverride none
Require all granted
</Directory>semanage fcontext -a -t httpd_sys_content_t "/web(/.*)" - web 디렉토리 아래 모든 경로에 규칙 추가평문으로 전송되는 HTTP의 보안을 강화하기 위한 방식
dnf install -y httpd - http 패키기 설치/var/www/html - html 파일 추가systectl enable --now httpd - http 서비스 실행firewall-cmd --add-service=http - 방화벽dnf install -y mod_ssl - SSL 패키지 설치/etc/httpd/conf.d → ssl.conf 파일 생성 확인ls -lZ /etc/pki/tls → SELinux 타겟 확인dnf install -y openssl - 개인키 생성 패키지 설치 및 확인openssl genrsa -out private.key 2048/etc/httpd/conf.d/ssl.conf 에 개인키 경로 반영openssl req -new -key /etc/pki/tls/private/private.key -out /etc/pki/tls/certs/cert.csropenssl x509 -req -signkey /etc/pki/tls/private/private.key -in /etc/pki/tls/certs/cert.csr -out /etc/pki/tls/certs/cert.crtsystemctl restart httpdfirewall-cmd --add-service=https/etc/httpd/conf.d/ssl.conf 설정 수정SSLCertificateFile → certs.crt 파일 위치로 변경
SSLCertificateKeyFile → 개인키 파일 위치로 변경
리다이렉트 설정 - HTTP 접속 시 HTTPS로 변경
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
dnf install php -ydnf install php-mysqlnd -y - DB까지 연동 시/var/www/html/index.php dnf install -y mariadb-server - 서버
dnf install -y mariadb - 클라이언트
systemctl enable --now mariadb
firewall-cmd --add-service=mysql
/var/lib/mysql - mysql 관련 파일 디렉토리
mysql_secure_installation - 간단 보안 설정 진입
/etc/my.cnf - 메인 설정 파일/etc/my.cnf.d - 서브 설정 디렉토리/etc/my.cnf.d/mariadb-server.cnf … 등skip-networking = 1bind-address = IP- CREATE USER ‘user1@localhost’;
- CREATE DATABASE ‘test_db’;
- CREATE TABLE table1 (
id int,
username varchar(10) not null,
primary key(num)
);mysql -u root -h localhost -pshow databases;CREATE database db1;CREATE DATABASE database_name DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci USE db1; SHOW tables;CREATE TABLE tb1 (id int AUTO_INCREMENT PRIMAMRY KEY, NAME VARCHAR(10), age int not null, address VARCHAR(30));INSERT INTO db1.tb1(id, name) VALUES (2, "choi");ALTER DATABASE database_name DEFAULT CHARACTER SET utf8mb4;INSERT INTO db1.tb1(name, age, address) VALUES ("Jeong", 33, "서울 마포구");CREATE USER “viewer”@”%”; - @ = 모든 호스트 허용GRANT select ON db1.tb1 TO “viewer”@”%”;CREATE USER “remover”@”localhost” IDENTIFIED BY “1234”;GRANT delete ON db1.tb1 TO ‘remover’@’localhost’;FLUSH PRIVILEGES;SELECT user, host FROM mysql.user;SELECT @@autocommit; - 1 = 활성화, 0 = 비활성화SET autocommit = TRUE; - TRUE / FALSEmysqldump [option] -u user-name -p database-name > file-pathmysql -u root -p db1 < test.dumpdnf install -y mariadb-serversystemctl enable —now mariadbfirewall-cmd —add-service=mysqlmysql_secure_installation - 초기 보안 설정 진입/etc/my.cnf.d/mariadb-server.cnfsystemctl restart mariadbmysql -u root -h localhost -pCREATE USER ‘rep_user’@’%’ IDENTIFIED BY “123”;GRANT replication slave ON *.* TO ‘rep_user’@’%’;SHOW master status;mysqldump —all-datbases -u root -p > rep.dump/etc/my.cnf.d/mariadb-server.cnfsystemctl restart mariadbmysql -u root -h localhost -pCREATE database db1;mysql -u root -p << /tmp/rep.dumpCHANGE MASTER TO master_host='192.168.10.20', master_user='rep_user', master_password='123', master_log_file='mysql-bin.000002', master_log_pos=892;start slave;구성 : 1 - web1 / 2- web2 / 3 - proxy
dnf install -y haproxy/etc/haproxy/haproxy.cfg - 설정 파일systemctl enable —now haproxy.servicefirewall-cmd —add-port=80/tcp