Born2BeRoot

joonpark·2021년 6월 29일
0

42seoul

목록 보기
2/3

Debian vs CentOS
https://velog.io/@joonpark/Debian-vs-CentOS

Debian을 선택한 이유는 ubuntu를 사용해 본 경험이 제일 컸다.
같은 Debian 계열이기 때문에 쉽게 적응할 수 있다고 생가했다.
그리고 패키지 관리자를 통해 제공되는 것도 Debian이 CentOS보다 많은 것도 선택에 한 몫 했다.

CenOS는 REHL이라는 OS의 작은 버전이기 때문에 아무해도 업데이트도 느리다.

SELinux vs AppArmor
https://velog.io/@joonpark/SELinux-vs-AppArmor

aptitude vs apt
https://velog.io/@joonpark/aptitude-vs-apt

virtual machine
https://velog.io/@joonpark/Virtual-Machine

hostname

hostname

vi /etc/hostname
vi /etc/hosts
reboot

LVM

Logical Volumn Manager
논리적 공간을 만들게(관리) 해주는 프로그램.

왜 사용하지?
1. 여러개의 디스크 공간을 합쳐서 하나처럼 사용할 수 있다.
2. 사용하기 애매한 공간의 디스크 파티션을 활용할 수 있다.
3. 기존에 사용중인 디스크의 공간을 확장할 수 있다.

기존에 사용중인 logical volume 확장할 수 있는데,
lvextend -L [변경할 크기][lv 이름]

lvextend -L 2.8G /dev/mapper/vg-root

파티션

===== 보너스 ===
var-log는 마운트 안되있어서 마운트를 해줘야 한다.
blkid 명령어로 먼저 위치를 확인하고

mount /dev/mapper/LVMGroup-var--log /var/log

이제 이걸 영구적으로 유지하려면

vi /etc/fstab
/dev/mapper/LVMGroup-var--log /var/log ext4 defaults 0 2
입력 후 저장
끝!!

리눅스 마운트하기

https://devconnected.com/how-to-mount-and-unmount-drives-on-linux/

시스템 설정

GRUB boot loader란?
부트 로더 : 운영체제를 메모리로 로드하는 것.
GRUB 부트 로더 : 리눅스의 부트 로더

기본적인 설정

apt-get update

SSH 설정

SSH란 Secure Shell Protocol, 즉 네트워크 프로토콜 중 하나로 컴퓨터와 컴퓨터가 인터넷과 같은 Public Network를 통해 서로 통신을 할 때 보안적으로 안전하게 통신을 하기 위해 사용하는 프로토콜이다.

apt-get install openssh-server

vi /etc/ssh/sshd_config

Port 4242
PermitRootLogin no
AllowUsers [username] (예: AllowUsers joonpark)

https://phoenixnap.com/kb/how-to-enable-ssh-on-debian

방화벽 설정

방화벽 또는 파이어월(firewall)은 미리 정의된 보안 규칙에 기반한, 들어오고 나가는 네트워크 트래픽을 모니터링하고 제어하는 네트워크 보안 시스템이다.방화벽은 일반적으로 신뢰할 수 있는 내부 네트워크, 신뢰할 수 없는 외부 네트워크(예: 인터넷) 간의 장벽을 구성한다. https://ko.wikipedia.org/wiki/%EB%B0%A9%ED%99%94%EB%B2%BD_(%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%82%B9)

apt-get install ufw
ufw status (방화벽 상태 확인)
ufw enable (방화벽 활성화)
ufw allow 4242/tcp (4242번 포트에 tcp 허용)

사용자 sudo 추가

root 계정에서

apt-get install sudo
/sbin/adduser [username] sudo

이제 username 로그인 후 확인.

https://milq.github.io/enable-sudo-user-account-debian/

사용자 [username42] 그룹에 추가

기존에 생성된 사용자가 있다면,

/sbin/addgroup [username42]
/sbin/adduser [username][username42]

add(user, group) vs (user, group)add

앞에 add가 붙은게 대화형.
뒤에 add 붙은게 비대화형.

adduser: home directory 자동으로 생성.
useradd: home directory 직접 생성 필요.

useradd 예제)

useradd -d /home/[username] -s /bin/bash -m [username]
비밀번호 설정 안 된 상태기 때문에 passwd [username]으로 설정 필요.

비밀번호 만료일 설정

chage 명령어 사용
비밀번호 수정은 변경 후 2일 후부터 가능하며, 30일 후에 만료되고 만료 7일전에 경고를 받아야 한다.

chage -M 30 [username]
chage -m 2 [username]
chage -W 30 [username]

vi /etc/login.defs
PASS_MAX_DAYS 30
PASS_MIN_DAYS 2
PASS_WAR_AGE 7
PASS_MIN_LEN 10

비밀번호 복잡도 설정

libpam-cracklb를 사용해 설정한다.

sudo apt-get install libpam-cracklib
vi /etc/pam.d/common-password


이 라인 뒤에 이제 필요한 정책을 추가해준다.
minlen: 비밀번호 최소 길이
maxrepeat: 같은 문자가 연속해서 올 수 있는 최대 수
lcredit : 소문자 최대 갯수
ucredit : 대문자 최대 갯수
dcredit : 수 최대 갯수
ocreidt : 그 외 문자 갯수(특수문자 등)
difok : 이전 비밀번호와 달라야 하는 최소 문자 수
reject_username : 사용자 이름 사용 불가
enforce_for_root : root 에게도 같은 정책 적용

lcredit, ucredit, dcredit, ocredit 에 -1 을 줄 경우 최대 갯수가 아니라 반드시 포함되야 하는 것으로 변경됨.

이제 변경사항을 적용시키기 위해

passwd -e [username]

sudoers file?

sudoers는 /etc/sudoers에 위치한 파일이며 sudo 명령어의 작동을 정한다.

sudo visudo

Defaults passwd_tries=[N]
Defaults badpass_message="message"
Defaults authfail_message="Incorrect password attempts :)"
Defaults secure_path="custom path"
Defaults requiretty
Defaults log_input
Defaults log_output
Defaults iolog_dir="/var/log/sudo/" (log_input, log_output 이 활성되야지 사용 가능)

https://linux.die.net/man/5/sudoers
https://www.sudo.ws/man/1.8.27/sudoers.man.html
https://www.applegazette.com/mac/pro-terminal-commands-how-and-why-to-edit-sudoers-on-macos/
https://unix.stackexchange.com/questions/269036/how-to-protect-secure-the-sudo-log-input-log-output-logs

wall 명령어

write to all
컴퓨터 파일, 표준 입력을 로그인 된 모든 사용자에게 보여준다.

MAC에서 테스트 하는 방법

터미널을 두 개 열고
echo "hi" | wall
또는
wall [filename]

이런식으로 사용할 수 있다.

cron

정기적으로 작업을 처리하도록 소프트웨어를 실행시키도록 시간 기반 잡 스케줄러 성격의 데몬 프로세스다.

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=on21life&logNo=221457537507

데몬이란?

멀티태스킹 운영 체제에서 데몬은 사용자가 직접적으로 제어하지 않고, 백그라운드에서 돌면서 여러 작업을 하는 프로그램을 말한다. 시스템 로그를 남기는 syslogd처럼 보통 데몬을 뜻하는 ‘d’를 이름 끝에 달고 있으며, 일반적으로 프로세스로 실행된다.

데몬은 대개 부모 프로세스를 갖지 않으며, 즉 PPID가 1이며, 따라서 프로세스 트리에서 init 바로 아래에 위치한다. 데몬이 되는 방법은 일반적으로 자식 프로세스를 포크(fork)하여 생성하고 자식을 분기한 자신을 죽이면서 init이 고아가 된 자식 프로세스를 자기 밑으로 데려가도록 하는 방식이다. 이러한 방법을 ‘fork off and die’라 부르기도 한다.

시스템은 시동할 때 데몬을 시작하는 경우가 많으며, 이런 데몬들은 네트워크 요청, 하드웨어 동작, 여타 프로그램에 반응하는 기능을 담당하게 된다. 그 밖에도 몇몇 리눅스에 있는 devfsd처럼 하드웨어 설정이나, cron처럼 주기적인 작업을 실행하는 등 기타 다양한 목적으로 사용된다.

데몬 프로세스와 백그라운드 프로세스의 차이는 유저와의 상호작용이다. 데몬 프로세스는 유저와 상호작용하지 않고 독자적인 프로세스다. 그래서 부모 프로세스를 갖지 않는다.
반면 백그라운드 프로세스는 유저와 상호작용하며 부모 프로세스를 갖는다.

출처: https://ko.wikipedia.org/wiki/%EB%8D%B0%EB%AA%AC_(%EC%BB%B4%ED%93%A8%ED%8C%85)

명령어

uname

운영체제 이름을 출력한다.
-m : machine 하드웨어 이름 출력
-n : nodename 출력. nodename은 네트워크 상에서 통신 시 사용되는 시스템 이름)
-p : machine processor 의 아키텍처 이름 출력 (예: i386)
-r : 운영체제의 release 출력
-s : 운영체제 이름 출력
-v : 운영체제의 버젼 출력

shell script 구현

MY_ARCH=$(uname -snrvm)
MY_CPU=$(cat /proc/cpuinfo | grep "physical id" | wc -l)
MY_VCPU=$(cat /proc/cpuinfo | grep "^processor" | wc -l)
MY_USED=$(free --mega | grep Mem | awk '{print $3}')
MY_TOTAL=$(free --mega | grep Mem | awk '{print $2}')
MY_MEM_PER=$(free --mega | grep Mem | awk '{print $3/$2 * 100.0}' | xargs printf "%.2f")

echo "#Architecture : $MY_ARCH"
echo "#CPU physical : $MY_CPU"
echo "#vCPU : $MY_VCPU"
echo "#Memory Usage : $MY_USED/$MY_TOTAL"MB" ($MY_MEM_PER%)"

printf "#Disk Usage: "
df -BM -a | grep mapper | awk '{sum+=$3}END{print sum}' | tr -d '\n'
printf "/"
df -H -a | grep mapper | awk '{sum+=$4}END{print sum}' | tr -d '\n'
printf "Gb ("
df -BM -a | grep mapper | awk '{sum1+=$3 ; sum2+=$4 }END{printf "%d", sum1 / sum2 * 100}' | tr -d '\n'
printf "%%)\n"

top -bn1 | grep load | awk '{printf "#CPU Load: %.2f\n", $(NF-2)}' 

printf "#Last boot: "
who -b | awk '{printf "%s %s\n", $3, $4}'

MY_LVM_USE=$(cat /etc/fstab | grep mapper | wc -l)
if [ "$MY_LVM_USE" -le "0" ]
then
	printf "#LVM use : no\n"
else
	printf "#LVM use : yes\n"
fi

printf "#Connections TCP : "
cat /proc/net/sockstat | grep -i tcp | awk '{print $3}' | tr -d '\n'
printf " ESTABLISHED\n"

printf "#Network : IP "
/sbin/ifconfig | grep "inet " | grep -v "127.0.0.1" | awk '{print $2}' | tr -d '\n'
printf " ("
/sbin/ifconfig | grep "ether " | awk '{print $2}' | tr -d '\n'
printf ")\n"

printf "#Sudo : "
grep sudo /var/log/auth.log | grep "COMMAND=" | wc -l | tr -d '\n'
echo " cmd"

(free --mega : megabyte 로 메모리 정보 확인.)
man : 현재 로그인 된 사람 보여준다.

lscpu vs /proc/cpuinfo
This is consistent with having a single processor containing a single core which contains two execution threads through hyperthreading. Thus you have two logical processors, but they share most of their resources (instruction decoding, arithmetic, etc.).

https://webhostinggeeks.com/howto/how-to-display-the-number-of-processors-vcpu-on-linux-vps/
https://developpaper.com/how-to-view-the-physical-cpu-logical-cpu-and-cpu-number-of-linux-servers/

MEM https://stackoverflow.com/questions/10585978/how-to-get-the-percentage-of-memory-free-with-a-linux-command

CPU load https://unix.stackexchange.com/questions/119126/command-to-display-memory-usage-disk-usage-and-cpu-load

LVM https://askubuntu.com/questions/202613/how-do-i-check-whether-i-am-using-lvm

sudo log https://unix.stackexchange.com/questions/167935/details-about-sudo-commands-executed-by-all-user

crontab

crontab -e
/10 * * * /root/monitoring.sh | wall

Bonus Part

lighttpd : lighttpd는 적은 자원을 사용하여 높은 성능을 내는 오픈 소스 웹 서버 어플리케이션이다. 아파치보다 적은 메모리를 사용하면서도 일반적으로 아파치보다 속도가 빠르다.

https://www.rosehosting.com/blog/how-to-install-lighttpd-on-debian-9/
https://www.how2shout.com/linux/install-wordpress-on-lighttpd-web-server-ubuntu/

0개의 댓글