born2beroot

gfs0101·2022년 10월 6일
0

Born2beroot

This document is a System Administration related exercise

개요

born2beroot는 가상머신에 대한 내용을 학습하는 과제이다

가상머신이란 물리적인 컴퓨터가 소프트웨어적으로 컴퓨터 환경을 만드는것을 말한다 쉽게말하면 컴퓨터 안의 컴퓨터라고 생각하면 편하다
예를들면 맥에서 윈도우 환경을 쓰기위해 혹은 윈도우에서 다른 os를 쓰기 위해 가상머신을 만들기도 한다

가상머신을 이용하기위해
VirtualBox를 이용하여 debian을 설치하였다

  • 가상화
    하드웨어 지원을 받음 하드웨어 종속성 때문에 범용성이 떨어짐

  • 에뮬레이션
    모든 부품을 구현함 속도가 떨어지나 범용성이 높음

  • 반가상화
    기반이 되는 하드웨어, 소프트웨어와 동일하지는 않지만 비슷한 가상머신에 UI를 제공

가상머신의 장점

  • 하나의 컴퓨터로 두개의 운영체제를 운용할수 있다
  • 하나의 컴퓨터의 자원을 여러명에게 나눠줄 수 있다
  • 독립된 환경을 만들 수 있다(악성코드 실험, 액티브 엑스 등등 본컴퓨터에 영향이 없다)

Devian vs CentOS

DevianCentOS
데비안(devian)은 커뮤니티에서 다수의 사람이 참여하여 개발되는 자유 컴퓨터 운영체제센트os는 레드햇에서 rhel 소스를 바탕으로 개발하여 배포한것
안정성과 보안을 중시 업데이트 주기가 늦음RHEL과 완벽하게 호환되나 안정성이 좋지 않음

hostnamectl
운영체제 확인

apt / aptitude

패키지 관리 프로그램

  • apt
    apt는 그래픽 인터페이스 없이 명령어로 실행된다

  • aptitude
    사용자 인터페이스가 있어서 대화형식으로 패키지를 검색후 실행, 제거가 가능하다

apt같은경우 설치중 오류가생기면 종료가 되는데 aptitude는 해결방안을 제시해준다
aptitude가 기능이 더많고 방대함

Apparmor

어플리케이션의 실행 권한을 주는것
aa-status로 확인가능
enforce 허가되지 않은 파일에 접근 거부
complain 기록만함

LVM

Logical Volume Manager
lvm은 리눅스의 저장공간을 효율적이고 유연하게 관리하기 위한 커널의 한 부분이다
lvm은 물리적으로 나누어져 있는 볼륨들을 다시 하나로 합쳐서 사용자가 원하는 크기만큼 나눠서 사용할 수 있게 한다

파티션과 다른점은
파티션은 한번 설치를 하면 합치거나 나누는게 불가능하지만 lvm은 유동적으로 바꿀수가 있다

ssh

secure shell
원격으로 호스트 컴퓨터에 접속하기 위해 사용되는 프로토콜 암호화가 되어있어서 해킹방지가 뛰어나다

apt install openssh-server #ssh 설치
systemctl status ssh #ssh 상태
sudo vim /etc/ssh/sshd_config
Port 4242 #4242 포트 사용 
sudo systemctl restart ssh #ssh 재시작

https://wlsvud84.tistory.com/12

포트를 연걸로 연결가능

ssh <username>@127.0.0.1 -p 7777
#7777포트로 연결한다

UFW

Uncomplicated Firewall
리눅스 시스템에서 작동하는 방화벽 프로그램

apt install ufw #ufw 설치
sudo ufw enable #ufw 켜기
sudo ufw status verbose #ufw 상태
sudo ufw allow .... # 포트열기
sudo ufw delete allow .... # 포트닫기

hostname

호스트 이름은 네트워크상의 장치에 할당 된 레이블 (이름)이며 특정 네트워크 또는 인터넷을 통해 하나의 장치를 다른 장치와 구별하는 데 사용됩니다.

hostname #호스트네임 확인
vim /etc/hostname #호스트네임 변경

group

어떤 파일이나 폴더를 특정 권한이 있는 사용자들끼리 공유하기 위해 주로 사용한다 그룹은 기본적으로 사용자를 생성할 때 함께 생성된다

id user #user가 속한 그룹들을 볼 수 있다
groupadd aaa #aaa라는 그룹을 만든다 gid번호는 가장 높은거에서 1더해진 수로 할당이 된다
groupadd -g 1010 aaa #aaa라는 그룹을 gid 1010에 할당한다
usermod -G user hunpark #hunpark을 user라는 그룹에 추가시킨
usermod -g user hunpark #user를 기본그룹으로 둔다
groupdel user #user그룹을 삭제한다 user그룹이 기본그룹이면 삭제가 되지 않는다

passwd

비밀번호 정책을 설정할 수 있다

chage -l #기본적인 암호 정책 확인
chage -M #암호정책 변경
chage -m 2 -M 30 -W 7
passwd -e user #user의 패스워드 정책을 만료시켜서 바꿀수 있음

sudo vim /etc/login.defs
PASS_MAX_DAYS 30 #만료일
PASS_MIN_DAYS 2 #최소 사용일
PASS_WARN_AGE 7 #경고

sudo apt install libpam-pwquality #암호 강도 확인 모듈 설치
sudo vim /etc/pam.d/common-password
retry=3 #암호입력 3회까지
minlen=10 #최소길이 10
maxrepeat=3 #같은문자 3번이상 반복 금지
difok=7 #기존패스워드와 7자 이상 달라야함
ucredit=-1 #대문자 최소 한개이상
lcredit=-1 #소문자 최소 한개이상
dcredit=-1 #숫자 최소 한개이상
reject_username #암호가 계정이름을 포함하는지
enforce_for_root #root계정에도 적용

minlen 크래딧
minlen=12 일 경우, abcdefg01! (10) 가 허용 된다. 왜냐면, 소문자 사용 1크레딧, 숫자 사용 1크래딧, 특수문자 사용 1크레딧을 얻었으므로, 총 문자의 길이는 12-3=9 자 이상이면 가능하다

sudoer

sudo관련 정책을 정할 수 있다

dpkg -l sudo #sudo설치확인
visudo #sudoers 진입

과제에서 요구하는 사항은 아래를 넣는다

Defaults    secure_path"/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin" #
Defaults    passwd_tries=3 #sudo 3번까지
Defaults    badpass_message="fail" #비밀번호가 틀리면 출력할 메시지
Defaults    log_input, log_output #sudo 를 이용한 input output을 기록한다
Defaults    iolog_dir="/var/log/sudo/" #I/O 로그 기록할 공간
Defaults    requiretty #tty상으로 접근하는지 확인

tty는 콘솔의 일종 위에 말은 즉 쉘스크립트 상으로 사용하는건지 확인

monitoring.sh

cron?

고정된 간격을 갖는 지정 날짜 및 시간 마다 주기적으로 정기적인 작업을 처리하기 위해 소프트웨어를 실행토록 환경을 설정하는 시간 기반 잡 스케줄러

스크립트를 작성하여 일정시간마다 출력시킨다

1
uname -a
운영체제 및 해당 커널버전의 아키텍처 출력

2
/proc/cpuinfo
cpu 정보 확인
physical id 물리적 코어 id를 표시함 중복을 제외하고 개수를 새주면 된다
processor 번호를 새면 가상 cpu개수이다

3
printf "#Memory Usage: $(free -m | awk '$1 == "Mem:" {print $3}')/$(free -m | awk '$1 == "Mem:" {print $2}')MB"
printf "($(free | awk '$1 == "Mem:" {printf("%.2f"), $3/$2 * 100}')%%)\n"
메모리 사용률은 free 명령어를 이용하였다
버퍼, 캐시를 빼줄까 하다가 그냥 전체중에 사용한 메모리 비율을 사용하였다

4
printf "#Disk Usage: $(df -Bm | grep "/dev/mapper/" | awk '{sum += $3} END {print sum}')/"
printf "$(df -Bg | grep "/dev/mapper/" | awk '{sum += $2} END {print sum}')Gb"
printf "($(df -Bm | grep "/dev/mapper/" | awk '{sum1 += $2} {sum2 += $3} END {printf("%d"), sum2 / sum1 * 100}')%%)\n"
df 명령어의 -B옵션으로 블록을 기가바이트 or 메가바이트로 바꿔줍니다
그 다음 전체 디스크 크기, 사용중인 디스크 크기, 사용량을 계산해줍니다

5.
printf "#CPU load: $(mpstat | tail -1 | awk '{print 100-$NF}')%%\n"
mpstat을 이용하여 마지막에 있는 유휴한 cpu를 이용해 cpu 사용량을 계산한다

6.
printf "#Last boot: $(who -b | awk '{printf("%s %s\n", $3, $4)}')\n"
 마지막 부팅시간 체크
 who -b 이용

7.
printf "#LVM use: $(if [ $(lvscan | wc -l) -ge 1 ]; then echo yes; else echo no; fi)\n"
lvscan을 이용하여 한개라도 나오면 yes 아니면 no

8. 
printf "#Connections TCP : $(ss -t | grep "ESTAB" | wc -l) ESTABLISHED\n"
ss -t 옵션을 이용하여 tcp에 접속해있는게 있는지 확인

9.
printf "#User log: $(users | wc -w)\n"
users 명령어를 이용하여서 접속 유저를 알아보고 카운트

10.
printf "#Network: IP $(hostname -I)($(ifconfig | grep ether | awk '{print $2}'))\n"
hostname -I를 이용하여 ip를 가지고 오고
ifconfig를 이용하여 mac주소를 가지고 왔다

11.
printf "#Sudo : $(cat /var/log/sudo/seq | xargs echo "obase=10; ibase=36;" | bc) cmd\n"
로그가 기록되는 폴더 내의 seq는 36진수라서 10진수로 바꿔주었다

bonus

lighttpd, MariaDB, PHP를 이용하여 블로그를 구축하여라

wordpress : 오픈소스를 기반으로한 설치형 블로그 간단히 말하면 간단하게 웹사이트를 만들 수 있는 플랫폼

lighttpd : 웹 서버 앱

MariaDB : 오픈소스 데이터베이스 관리 프로그램

PHP : 서버사이드 스크립트 언어


CGI : client에서 서버에 요청을 넣으면 Application(ex shell script 등등)을 돌려서 나온 결과를 HTML형식으로 보여주는것
FastCGI는 클라이언트의 요청을 전달할 때마다 새로운 프로세스를 생성하지 않고 이미 생성된 프로세스를 재활용하는 방식을 사용하여 처리가 빠릅니다.

lighttpd

설치
sudo apt install lighttpd

서버 중지, 재시작
sudo systemctl stop lighttpd.service
sudo systemctl start lighttpd.service
sudo systemctl enable lighttpd.service

PHP-fpm

설치
sudo apt-get install php7.4-fpm

/etc/php/7.4/fpm/php.ini 편집


/etc/lighttpd/conf-available/15-fastcgi-php.conf
"bin-path""socket"을 주석 처리하고 "socket" => "/var/run/php/php7.4-fpm.sock 추가합니다

변경사항 적용
lighttpd-enable-mod fastcgi

php와 연동이 잘 되어있는지 확인하기위해
/var/www/html/info.php
여기에
<?php
	phpinfo();
    ?>
이런식으로 작성한다

mariadb

설치
sudo apt-get install mariadb-server mariadb-client

제어
sudo systemctl stop mysql.service
sudo systemctl start mysql.service
sudo systemctl enable mysql.service

보안설정
sudo mysql_secure_installation

재시작
sudo systemctl restart mysql.service

db 생성
sudo mysql -u root -p

sql을 이용하여 db생성에 사용자 추가를 한다

CREATE DATABASE dbname; #db 생성
CREATE USER 'id'@'localhost' IDENTIFIED BY 'pw';
# 계정 생성 및 패스워드 설정
GRANT ALL ON dbname.* TO 'id'@'localhost' IDENTIFIED BY 'pw' WITH GRANT OPTION;
# 계정에 권한부여
FLUSH PRIVILEGES;
EXIT;

wordpress

설치
apt-get install wget
wget -O /tmp/wordpress.tar.gz "http://wordpress.org/latest.tar.gz"
tar -xvzf /tmp/wordpress.tar.gz -C /var/www/html

/var/www/html/wordpress/wp-config-sample.php
이 파일에 아까정한 아이디 패스워드를 넣고
https://api.wordpress.org/secret-key/1.1/salt/
여기있는 코드 복사 후 붙여넣기

phpmyadmin

웹 상에서 관리할 목적으로 PHP로 작성한 오픈 소스 도구이다. 데이터베이스, 테이블, 필드, 열의 작성, 수정, 삭제, 또 SQL 상태 실행, 사용자 및 사용 권한 관리 등의 다양한 작업을 수행할 수 있다.

장점
직관적인 웹 인터페이스
MySQL 데이터베이스 관리
테이블 관리
일반사용자와 특정 권한 이용자 관리
CSV와 SQL로부터 데이터 가져오기
데이터를 다양한 형식으로 내보내기: CSV, SQL, XML, PDF (TCPDF 라이브러리를 통해), ISO/IEC 26300 - 오픈도큐먼트 텍스트 및 스프레드시트, 워드, 엑셀, LaTeX 등
다중 서버 관리
데이터베이스 양식의 PDF 그래픽 작성
쿼리별 조회(QBE)를 이용한 복잡한 쿼리 작성
데이터베이스 및 하부 집합 전역 검색
미리 정의된 함수 집합을 사용하여 저장된 데이터를 원하는 형식으로 변형 (BLOB 데이터를 다운로드 링크나 이미지로 표시 등)
쿼리 모니터 (프로세스)

profile
열심히살자

0개의 댓글