$ head n 2 /etc/os-release
$ cat /etc/os-release
uthfail_message="메세지" : 권한 획득 실패시 띄울 커스텀 메세지
badpass_message="메세지" : 암호 실패시 띄울 메세지
log_input : sudo를 통해 입력된 input은 로그에 기록된다
log_output : sudo를 통해 입력된 output은 로그에 기록된다.
requiretty : tty에 연결되지 않은 채로 sudo를 실행하는 것을 금지?
https://m.blog.naver.com/snazzy79/70148845500
https://bloodguy.tistory.com/entry/Linux-ssh%EB%82%98-%EB%8B%A4%EB%A5%B8-%EB%8D%B0%EB%AA%AC%EC%97%90%EC%84%9C-sudo-u-%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%B4-%EB%8B%A4%EB%A5%B8-%EC%9C%A0%EC%A0%80%EA%B6%8C%ED%95%9C%EC%9C%BC%EB%A1%9C-%EC%8B%A4%ED%96%89%EC%8B%9C-sudo-sorry-you-must-have-a-tty-to-run-sudo-%EC%98%A4%EB%A5%98-%ED%95%B4%EA%B2%B0
ex. 쉘 스크립트 상에서 sudo 커맨드 수행 금지.
iolog_dir="경로" : 로그를 저장할 경로.
SSH 4242 port only. root 로 사용해서 연결하는 것은 금지
UFW 방화벽 사용하여 OS 구성.4242 포트만 열어놓기.
방화벽이 활성화되어야함.
보안상 필요로 인한 설정으로 tty가 있는 사용자만 sudo를 사용할 수 있음.
맥에서
ipconfig getifaddr en0
ssh USERNAME@"HOSTIP" -p 4242
sudo apt install ufw
sudo ufw status verbose
ufw 상태 확인 (디폴트는 inactive)
sudo ufw enable
부팅 시 ufw 활성화되게 설정
sudo ufw default deny
기본 incoming deny로 설정
dhcp 끄고 4242 포트만 열어놓기.
sudo ufw allow 4242
ssh연결 허용
https://webdir.tistory.com/206
apt search openssh-server
openssh가 깔려있는지 확인.
apt install open ssh-server
systemctl status ssh
명령어를 통해 openssh 실행여부와 사용 포트 확인
sudo vim /etc/ssh/sshd_config
명령어를 통해 ssh설정을 변경
Port 22
라 되어있는 줄에서 22 ⇒ 4242
로 변경, 주석처리되어있다면 #을 삭제
한다.
💡 /etc/ssh에는 ssh_config
와 sshd_config
가 있다. 전자는 client
측일 때 설정, 후자는 server
측일 때 설정이다.
아래 PermitRootLogin
부분을 no
로 바꾼다.
해당 옵션을 통해 외부에서 root로 로그인하는 것을 막을 수 있다.
sudo systemctl restart ssh
로 재시작하여 설정 적용
ipconfig getifaddr en0
: 현재 로컬의 IP 주소
UFW 서비스 실행 되는가?
sudo ufw status
SSH 서비스 실행 되는가?
systemctl status ssh
SSH 4242 포트에서만 사용되는지 확인
ss -tnulp
새로 만든 사용자로 ssh 접속 시도. key, password 사용
root 로 접속 안되는거 확인
ssh root&"hostIP" -p 4242
UFW 활성화 된 리스트 보여주기. 4242 있는지 존재 여부
sudo ufw status verbose
8080 포트 추가하고 리스트 확인
sudo ufw allow 8080
새로 추가 된거 지우기
sudo ufw delete 8080
호스트네임
hostnamectl
명령어를 통해 hostname을 확인할 수 있다.sudo hostnamectl set-hostname <변경할 hostname>
명령어를 통해 호스트명을 변경할 수 있다.
$ nano /etc/hostname # 두 파일에서의 hostname이 일치해야 충돌이 없다.
나의 계정의 비밀번호, 및 만료일 변경 : chage
Last password change
(-d) : 마지막 패스워드 변경일Password expires
: 암호 만료일Password inactive
(-I (대문자i)) : 비활성화 유예기간Account expires
(-E) : 계정 만료일Minimum number ....
(-m) : 패스워드 변경 후 최소 사용 기간, 즉 최소 의무 사용일Maximum number ....
(-M) : 패스워드 변경 후 변경 없이 사용가능한 최대 일 수Number of days of warning ...
(-W) : 패스워드 만료 전 경고메세지를 보낼 일 수-M 옵션과 -m옵션, -W옵션을 통해 서브젝트에서 요구하는 패스워드 만료 관련 정책들을 변경한다.
sudo chage -M 30 -m 2 -W 7 "user"
sudo apt install libpam-cracklib
pamcracklib.so
가 추가된 것을 볼 수 있다.- `libpam-cracklib` 모듈을 통해 사용자가 입력한 암호를 시스템의 사전과 여러 규칙들로 패스워드 강도를 검사한다.
- `retry=N` : 암호입력을 N회로 설정
- `minlen=N` : 암호의 최소 길이는 N
- `difok=N` : 기존 패스워드와 달라야하는 문자 수 N
- `ucredit=-N` : 대문자 N개 이상 (N이 양수/음수인지 따라 뜻이 다름, 서브젝트 기준에 맞추어 음수로)
- `lcredit=-N` : 소문자 N개 이상 (위와 동일)
- `decredit=-N` : 숫자 N개 이상 (위와 동일)
- `reject_username` : 사용자의 이름이 그대로 혹은 뒤집혀 패스워드에 있는지 검사
- `enforce_for_root` : root사용자가 패스워드를 바꾸려 할 때에도 위 조건 적용
- `maxrepeat=N` : 같은 문자가 N번 이상 연속해서 나오는지 검사
nano /etc/hosts
su -
명령어를 통해 root 계정으로 이동.dpkg -l sudo
apt install sudo
visudo
secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
Defaults authfail_message="원하는 에러메세지" #권한 획득 실패 시 출력 (sudo 인증 실패 시)
Defaults badpass_message="원하는 에러메세지" #sudo인증에서 비밀번호 틀리면 출력
Defaults log_input #sudo명령어 실행 시 입력된 명령어 log로 저장
Defaults log_output #sudo명령어 실행 시 출력 결과를 log로 저장
Defaults requiretty #sudo명령어 실행 시 tty강제
Defaults iolog_dir="/var/log/sudo/" #sudo log 저장 디렉토리 설정
Defaults passwd_tries=3 #sudo실행 횟수를 지정. default가 3
groupadd user42
usermod -aG sudo,user42 <사용자이름>
usermod -g user42 <사용자이름>
명령어를 통해 user42 그룹이 primary group이 되도록 한다.sudo deluser 사용자명 그룹명
을 통해 그룹에서 사용자를 제거할 수 있다.sudo userdel -r 사용자명
통해 사용자 제거 가능./etc/login.defs
/etc/pam.d/common-password
libpam-cracklib
hostname 변경 후 머신 restart -> hostname 원래로 변경
hostnamectl
sudo hostnamectl set-hostname "new"
lsblk
sudo 설치 되어 있는지
dkpg -l sudo
새 유저 'sudo' 그룹에 할당
usermod -aG sudo "new-User"
히스토리 확인 ('/var/log/sudo' 에 파일 생성?)
sudo 실행 후 히스토리 갱신 확인
sudo crontab -e
ps -ef | grep cron
: 명령어를 통해 설치 여부 확인
cron
: 유닉스 계열 컴퓨터 운영 체제의 시간 기반 잡 스케줄러
ps -ef | grep cron
: 크론탭 설치여부 확인(피드백이 있다면 설치되어있는거임.)
service cron start
: 크론탭 시작
service cron stop
: 크론탭 중지
service cron restart
: 크론탭 재시작
sudo crontab -e
: edit
chmod +x monitoring.sh
실행 권한부여.
- command
애스터마스크가 5개 있는데, 가장 왼쪽부터 분, 시간, 날짜(1~31), 월(1~12), 요일(0~6)이다. 필요한 항목에 -(그 사이의 모든 값) ,(지정 값) / (특정 주기로 나누기 등의 문자를 사용하여 주기를 정할 수 있다.
*/10 * * * * bash Mypath/monitoring.sh | wall
또, 30초 단위로도 설정해야하는데 sleep을 사용하면 된다.
*/1 * * * * bash Mypath/monitoring.sh | wall
이 명령이 매 1분마다 실행되니까
*/1 * * * * sleep 30; bash Mypath/monitoring.sh | wall
systemctl status cron.service
status check
/etc/init.d/cron start
멈추기
sudo systemctl disable cron
재부팅 후에 멈추기
uname -a
물리적 프로세서의 수
nproc --all // 물리적으로 설치된 프로세스 갯수
: 리눅스에서 사용가능한 프로세스의 수 출력
print the number of installed processors on your system i.e core count:
가상 프로세서 개수
물리적 프로세서는 코어 수, 가상 프로세서는 쓰레드 수를 의미하는듯, 우리 맥은 6코어 6쓰레드 (exact number of virtual cpu (vCPU))
cat /proc/cpuinfo | grep processor | wc -l
서버에서 현재 사용 가능한 RAM 및 사용률(백분율)
free -m
free
명령어는 리눅스 시스템에서 메모리의 전체적인 현황을 살펴볼 수 있는 명령어임
-m
옵션을 통해 MB로 단위 변경
https://stackoverflow.com/questions/10585978/how-to-get-the-percentage-of-memory-free-with-a-linux-command
free -m | grep Mem | awk '{printf"%d/%dMB (%.2f%%)\n", $3, $2, $3/$2 * 100}'
서버에서 현재 사용 가능한 메모리 및 사용률(백분율)
df -BM -a | grep /dev/mapper/ | awk '{sum+=$3}END{print sum}' | tr -d '\n' df 사용가능한 디스크용량확인 / -BM(MB로 변경) / -a (용량이 0인것도 보기) {sum+=$3}END{print sum} 세번째 필드의 합계산 tr -d '\n' 개행삭제 printf "/" df -BM -a | grep /dev/mapper/ | awk '{sum+=$4}END{print sum}' | tr -d '\n' printf "MB (" df -BM -a | grep /dev/mapper/ | awk '{sum1+=$3 ; sum2+=$4 }END{printf "%d", sum1 / sum2 * 100}' | tr -d '\n' printf "%%)\n"
df -m
df
명령어를 통해 리눅스 내 디스크메모리 전체 현황 확인 가능
-m
옵션을 통해 MB로 단위 변경
top
명령어나 cat /proc/stat
등을 통해 CPU 사용량을 알 수 있음. 그러나 파싱하기 힘들고 특히 후자의 경우 부팅 후 모든 코어의 전체 CPU 사용량임.sysstat
를 다운받아 mpstat 명령어
를 사용하면 쉽게 현재 CPU의 사용량을 알 수 있음.sudo apt-get install sysstat
mpstat
명령어에서 마지막 컬럼을 활용하여 결과를 도출mpstat | grep all | awk '{printf "%.2f%%\n", 100-$13}'
마지막 부팅날짜 및 시간
last reboot
명령어를 사용하면 마지막으로 재기동한 시간이 언제인지 desc 정렬하여 출력한다.
who
명령어는 현재 내가 어떤 사용자로 접속을 했는지 확인하기 위해 사용할 수 있다.
-b
옵션을 사용하면 마지막 시스템 부팅 시간을 출력한다는 뜻.
예시와 가장 비슷한 who명령어를 사용하였음.
who -b | sed 's/^ *system boot //g'
who 호스트에 로그인한 사용자 정보 / -b 부팅정보 / 시간을 제외하고 삭제
LVM이 활성 상태인지 여부
lsblk
명령어를 사용하면 현재 장착된 디스크의 주요 사양을 확인할 수 있다.
if [ "$(lsblk | grep lvm | wc -l)" -gt 0 ] ; then printf "yes\n" ; else printf "no\n" ; fi
활성 연결 수
ss
명령어를 사용하면 네트워크 상태를 확인할 수 있다.
ss | grep -i tcp | wc -l | tr -d '\n'
서버를 사용하는 사용자 수
who // 서버를 사용하는 유저들을 출력한다
IP주소 확인
hostname -I | tr -d '\n'
mac주소 확인
ip link show
명령어를 입력하면 mac주소를 얻을 수 있다.
ip link show | awk '$1 == "link/ether" {print $2}' | tr -d '\n'
sudo 프로그램 실행된 명령 수
usermod -aG systemd-journal <사용자이름>
명령어를 통해 journalctl
명령어를 사용할 준비
journalctl을 사용하면 systemd-journald
데몬이 수집한 모든 로그 정보를 볼 수 있다.
journalctl을 사용하여 특정 로그를 보고싶다면 _COMM=<특정>
옵션을 추가하면 된다.
journalctl _COMM=sudo | grep COMMAND | wc -l | tr -d '\n'
컴퓨팅 환경을 소프트웨어로 구현한 것. 가상화 기술로 작동.하나의 물리 서버에서 여러개의 운영체제를 구동할 수 있도록하는 기술.
virtual machine은 Hypervisor 위에서 작동한다.
하이퍼바이저 : VM을 생성, 실행, 관리하는 프로세스(소프트웨어), 메모리, 스토릿 등의 리소스 관리
종류: MS Hyper-V, VirtualBox, VMware, Parallels Desktop
Hypervisor
는 하드웨어에서 리소스를 사용하여 VM
을 생성하고 구동하는 소프트웨어이다.
Hypervisor
에는 아래 사진과 같이 2가지 유형
이 있다.
Type 1(Bare-metal Hypervisor)
하드웨어 위에 바로 Hypervisor
가 설치되는 형태이다
Type 2(Hosted Hypervisor)
호스트 운영 체제 위에 Hypervisor
가 설치되는 형태이고, 해당 프로젝트에서 사용하는 virtualbox
역시 Type 2
에 속한다.
💡 Host와 Guest
Hypervisor
가 설치되는 물리 하드웨어를 Host
, Hypervisor
에서 리소스를 사용하는 여러 VM
을 Guest
라고 한다.
우리가 클러스터의 macOS
에서 다른 OS
인 Debian
을 구동시킬 수 있는 이유도 Hypervisior
덕분이라고 생각하면 된다.
VM
은 호스트가 예기치 않게 중단될 경우 다른 물리적 서버의 Hypervisor
로 이전할 수 있다. 이는 유용한 백업 대책에 마련되있다는 의미이다.CentOS
와 Debian
의 차이점리눅스 커널 + 자유소프트웨어
로 구성된 리눅스 배포판
이다. 따라서 두 OS차이는 자유소프트웨어
(패키지 포맷, 패키지 관리 툴 등)이다.💡 리눅스 커널
은 리눅스 배포판의 핵심 구성 요소이고 메모리에 상주하면서 하드웨어의 모든 주요한 기능을 제어한다.
CentOS
RHEL
에서 사후 기술지원과 상표권을 배제하고 제작한 오픈소스이다..rpm
확장자를 사용하고, yum
을 패키지 관리 툴로 사용한다.RHEL
은 RedHat
에서 개발한 유료 기업용 서버 OS이다.Debian
.deb
확장자를 사용하고, dpkg
와 APT
를 패키지 관리 툴로 사용한다.Ubuntu
는 Debian
기반 OS이다.APT
는 처음에는 Debian
계열을 위해 고안되었으나 현재 .rpm
패키지와도 호환되도록 업데이트되어 CentOS에서도 사용 가능하다.
profile
파일을 통해 아래와 같은 권한을 통제함으로써 개별 프로그램을 보호한다.LVM은 물리적인 디스크를 논리적인 디스크로 할당하여 유연하게 관리할 수 있게 해준다. 즉, 여러개의 하드 디스크 공간을 합쳐서 하나의 디스크처럼 사용할 수 있고 기존에 사용중인 디스크의 공간을 자유롭게 확장할 수 있다. 또한 partitions의 애매한 공간을 활용 할 수 있다.
aptitude
와 apt
모두 APT
(Advanced Packaging Tool)이다.aptitude
GUI
와 CLI
모두 제공한다.apt-get
의 command-line argument를 제공하기 때문에 apt-get
을 완전히 대체할 수 있다.apt-get
보다 더 많은 기능을 가지고 있다.apt
CLI
만 제공한다APT
(cache, mark, get)에서 자주 사용하는 옵션만 추출하여 사용자들이 보기 편하고 사용하기 쉽게 만든 것이다.SSH는 원격으로 호스트(Shell)에 접속하기 위해 사용되는 보안 프로토콜이다. 즉, 모든 데이터는 암호화가 보장된다.
SSH는 한 쌍의 key(public key/private key)를 이용하여 데이터를 암호화/복호화하는데 private key는 클라이언트, public key는 호스트가 가지고 있어야한다.
SSH
를 사용하는 이유는 역시 보안이 된다는 장점 덕분이다.
yum
) 성능 개선, 메모리 개선, 의존성 문제 처리visudo를 통해 sudo권한을 편집할 수 있다. 만약 visudo를 쓰지 않고 직접 /etc/sudoers를 편집할 경우, 편집하다가 실수하면 sudo를 쓰지 못하게 되므로 문법체크를 해주는 visudo를 쓰는 게 좋다.visudo 명령어를 통해서 /etc/sudoers 파일을 오픈하게 되면 Temp 파일로 생기고 해당 파일 수정 완료시 특별히 문제 없이 저장된다.
sudo에서 제공하는 또 다른 보안 기능 중 하나가 바로 Secure Path입니다. 이는 sudo 명령을 실행할 때 사용하는 가상 쉘의 PATH 정보를 설정합니다. 다시 말하면, sudo 명령을 실행할 때 현재 계정의 쉘이 아닌 새로운 쉘을 생성하고 그 안에서 명령을 실행하는데, 이 때 명령을 찾을 경로를 나열한 환경변수인 PATH값이 바로 이 secure_path가 됩니다.
우분투의 기본적인 방화벽은 UFW입니다. 이는 iptables를 좀 더 쉽게 설정할 수 있도록 한 것인데 간단한 방화벽 구성에는 문제가 없지만 수준 높은 방화벽 구성에는 iptables 룰을 직접 사용해야 합니다.
UFW 기본 룰
UFW에 설정되어 있는 기본 룰은 아래와 같다.
systemctl
서비스 시작, 중지, 상태확인 재시작 관련한 명령어.
sudo systemctl restart ssh
명령어를 통해 재시작하여 설정 적용
ss -tunlp
리눅스 명령어 (ifconfig, dclient, route , shutdown)
lsof
특정 포트에서 실행중인 pid 알아내기
$ lsof -i tcp:8080 # 8080 포트를 사용하고 있는 프로세스 검색
ifconfig
ifconfig 명령어는 명령줄 인수가 없을 경우 서버의 IP 주소 정보를 제공하며,
명령줄 인수가 있을 경우에는 네트워크 정보를 수정하는 기능을 제공.
윈도우의 ipconfig 명령어와 비슷한 역할을 담당.
/etc/ssh/sshd_config
/etc/ssh 에는 ssh_config (client 측) 와 sshd_config (server 측) 가 있다.
Port 42 : ssh 사용할 기본 포트를 지정한다.
PermitRootLogin no : 보안상 no 로 해준다. root 로그인 허용 여부를 결정하는 것. yes, no, without-password 가능. 현재 no 로 되어 있기 때문에, 직접 root로 접속이 불가능하다. yes 로 하는 것 보다는, 일반 계정으로 들어간뒤 su 명령어를 통해, Root 로 전환하는 것이 보안상 안전하다.
chage
사용자의 패스워드 만기 정보를 변경 및 설정하는 명령어이다(쉽게 말해 사용자 패스워드 정보 관리). 시스템에게 로그인한 사용자가 패스워드를 변경해야 하는지를 알려준다. 시스템 관리 명령어이다 보니, root 권한을 가진 사용자만 사용 가능하다.
/etc/login.defs
사용자 설정과 관련된 기본값을 저장.
PASS_MAX_DAYS 30 # 패스워드 최대 사용 기간
PASS_MIN_DAYS 2 # 패스워드 최소 사용 기간
PASS_WARN_AGE 7 # 만료 알림 날짜
PASS_MIN_LEN 10 # 패스워드 최소 글자수
sudo apt-get install vim
sudo dpkg -l apparmor
sudo apt install apparmor
sudo apt install apparmor-utils
aa-enabled
명령어를 통해 활성화 여부 확인 가능주의 사항
- vdi 파일 해쉬값 계속 바뀌기 때문에 제출하기 전 snapshot 찍고 제출하기!
- 평가 때의 변경 사항이 snapshot에 저장되기 때문에 평가 할 때마다 snapshot restore하기!
- signature.txt 파일은 repository의 root에 있는가?
- .vdi 파일의 signature과 제출한 signature가 동일한가?
(리눅스에서는 sha1sum , 맥(유닉스)에서는 shasum이다.)
소프트웨어 패키지 혹은 CD / DVD 파일을 공유할때, shasum 파일을 함께 배포되는 경우가 많다. shasum 파일은 원본 파일과 정확히 동일한 파일인지 확인할때 체크되는 파일이다. 체크섬(checksum)정보가 포함되어있다. (160bit)
출처: https://webdir.tistory.com/206 [WEBDIR:티스토리]
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=minjong_94&logNo=220832182934
https://www.youtube.com/watch?v=XT_jt0CmBbU
https://it-serial.tistory.com/entry/Linux-systemctl-%EB%AA%85%EB%A0%B9%EC%96%B4-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-%EC%83%81%ED%83%9C-%ED%99%95%EC%9D%B8
https://www.tuwlab.com/ece/24044
출처: https://info-lab.tistory.com/163 [:: IT School :::티스토리]
https://info-lab.tistory.com/163
출처: https://lee-automation-lab.tistory.com/entry/Linux-visudo로-sudo권한-설정하기etcsudoers [이코딩의 자동화 연구소:티스토리]
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=jsky10503&logNo=220749042597
출처: https://storycompiler.tistory.com/44 [아프니까 개발자다:티스토리]
https://nostressdev.tistory.com/3
https://nostressdev.tistory.com/5
https://srngch.github.io/born2beroot/
https://velog.io/@tmdgks2222/42seoul-born2beroot-Linux-install
https://www.notion.so/born2beroot-2ce1177e08904c329fb437c7fdcd7113
https://infinitt.tistory.com/390
--
1. 그래픽 install 깔고 없다는 거 보여 드리
2. 버츄어 머신 설명
센트오에스
데비안 골랐으면 appt apt 차이
apparmor
apparmor에 대한 설명
application마다 보안값 설정 경로에 접근하는 프로필 설정
ssh , ufw,먼지
포트포워딩
visudo 설명
vi var/log
모니터링 스크립트 설명
crontab 설정하는 방법
10-30
lvm. 어떤 거고 이런거 쓰면 머가 좋고