앱아머는 정책파일을 통해 어떤 어플리케이션이 어떤 파일/경로에 접근 가능한지 허용해준다. enforce모드와 complain모드 두가지가 존재함.
Apparmor 확인
$sudo aa-status
AppArmor (Mandatory Access Control Framework)
When enabled, AppArmor confines programs according to a set of rules that specify what files a given program can access. This proactive approach helps protect the system against both known and unknown vulnerabilities.
crontab -e : script확인 및 수정가능
혹, crontab 수정 불가할시, monitoring.sh의 권한을 실행 및 작성 가능하도록 바꾼다.
$sudo chmod 755 monitoring.sh
주어진 주제에서는 10분마다 script가 display되도록 요구했다.
*/10 * * * */home/ytak/monitoring.sh | wall
(defense중) 하기와 같이 5분마다 script가 display되도록 수정하면 된다.
*/5 * * * */home/ytak/monitoring.sh | wall
Wall command in Linux
Wall command in Linux system is used to write a message to all users. This command displays a message, or the contents of a file, or otherwise its standard input, on the terminals of all currently logged in users.
1. Ensure that the machine does not have a graphical environment at launch. A password will be requested before attempting to connect to this machine. Connect with a user which is not a root.
2. Pay attention to the password chosen, it must follow the rules imposed in the subject :
Password policy
$ sudo vi /etc/login.defs : 비밀번호 정책 설정 및 확인 가능.
PASS_MAX_DAYS 30 : 비밀번호 최대 사용기간. 최대 30일동안 유효.
PASS_MIN_DAYS 2 : 비밀번호 최소 사용기간. 최소 2일동안 사용. 2일 이후에 비밀번호 변경 가능
PASS_WARN_AGE 7 : 경고 메세지 기간 설정. 비밀번호 만료 7일전부터 경고 메세지 출력
PASS_MIN_LEN 10 : 비밀번호 최소 길이는 10자.
$ sudo vi /etc/shadow : root 와 ytak에서 비밀번호가 변경 된 것 확인 가능 (2 : 30: 7 로 확인 가능). shadow 파일에서는 비밀번호 관련 설정들이 저장됨.
하기 커맨드를 통해 비밀번호 정책 설정 가능.
$ sudo vi /etc/pam.d/common-password
password requisite pam_pwquality.so retry=3 minlen=10 difok=7 ucredit=-1 lcredit=-1 dcredit=-1 reject_username enforce_for_root maxrepeat=3
retry=3
minlen=10
difok=7
ucredit=-1
lcredit=-1
dcredit=-1
reject_username
enforce_for_root
maxrepeat=3
그렇기 때문에 기존 유저와 root에 대해
3. Check that the UFW service is started
$ sudo ufw status verbose
: check rules in details
$sudo ufw status numbered
: verify the numbered ufw rules
$sudo ufw delete <rules to be deleted>
: to delete ufw rules
4. Check that the SSH service is started
$sudo systemctl status ssh
: openssh 실행 여부와 사용 포트를 확인 할 수 있음.
$ ssh-keygen
: ssh key 확인가능
5. Check that chosen Operating System (Debian or Centos)
$ cat /etc/os-release
: verify the chosen OS
1. User with the login of the evalutated student is present on the virtual machine
내 id 확인가능
$ whoami
2. Check that it (login of evlauated student) has been added and it belongs to the "sudo" and "user42" groups.
user id 및 속해있는 group 확인 가능
$ id <user id>
UID and GID in Linux
Unix-like Operating Systems identify a user by a value called a user identifier(UID) AND Identify group by a group identifer (GID), are used to determine which system resources a user or group can access.
(유닉스 OS 시스템에서는 user를 UID 또는 GID로 나누어 구분하여, 접근 권한을 결정한다.)
UID (User Identifier)
UID is a number assigned by Linux to each user on the system. This number is used to identify the user to the system and to determine which system resources the user can access.
- UID 0 (zero) is reserved for the root.
- UIDs 1–99 are reserved for other predefined accounts.
- UID 100–999 are reserved by system for administrative and system accounts/groups.
- UID 1000–10000 are occupied by applications account.
- UID 10000+ are used for user accounts
GID (Group Identifier): Groups in Linux are defined by GIDs(group IDs).
- GID 0 (zero) is reserved for the root group.
- GID 1–99 are reserved for the system and application use.
- GID 100+ allocated for the user’s group.
3. Create a new user and assign it a password of your choice, respecting the subject rules. You must now explain to you how he was able to set up the rules requested in the subejct on their virtual machine. Normally there should be one or two modified files.
$sudo -v
: to check your sudo rights, if no error messages appear, you're good to go.
$sudo adduser <username>
: Assign a newuser.
c $sudo groupadd <groupname>
: Add a group
$sudo usermod -aG <groupname> <username>
: Assign a user to the group
$sudo id <username>
: Check the new username hasbeen assigned to new groupname correctly.
$sudo vi /etc/shadow
: 새로 추가된 user의 비밀번호 설정을 확인 할 수 있다. $sudo vi /etc/passwd
: 새로 추가된 user의 주소 확인 가능 $sudo deluser <username>
: Delete the user$sudo groupdel <groupname>
: Delete the group$getent group | grep <groupname to be found>
: 그룹 현황 확인 가능 5. Advantages and disadvantages of password policy.
$ hostnamectl
$ sudo hostnamectl set-hostname <new hostname>
: 호스트이름 변경
$ sudo reboot
: 시스템 재부팅
$ sudo hostnamectl set-hostname <original hostname>
: 기존 호스트이름으로 변경.
$ sudo reboot
: 시스템 재부팅
$ lsblk
Swap : When the system runs out of RAM, the operating system moves inactive pages from RAM into this partition. To store idle processes when the physical RAM is low (실제 물리적인 램이 부족할때 대신 사용됨).
home : Holds user and configuration files separate from the operating system files. A (사용자계정 파티션)
var : Standard subdirectroy of the root directroy that containes files to which the system writes data during the course of its operation (로그파일 파티션, 시스템 log파일이 저장됨).
srv : Contains site-specific data which is served by this system. The /srv/ directory contains site-specific data served by your system running Red Hat Enterprise Linux. This directory gives users the location of data files for a particular service, such as FTP, WWW, or CVS. Data that only pertains to a specific user should go in the /home/ directory (프로토콜 -http/https 이용하여 외부사용자의 공유를 위해 사용됨).
tmp : Global temporary directories. Web browsers periodically write data to the tmp directory during page views and downloads (임시파일들을 저장하거나 시스템에서 임시로 작업을 진행할때 사용하는 파티션).
var/log : 프로그램 로그파일들이 따로 저장되는 디렉토리
- Allows for very flexible disk space management
- It provides features like ability to add disk space to a logical volume and its filesystem whie that filesystem is mounted and active and it allows for the collection of multiple physical hard drives and paritioning into a single volume group which can be divided into logical volumes.
- Also, allows reducing the amount of disk space allocated to a logical volume.
Physical Volume(PV) : 리눅스 시스템에 존재하는 물리 파티션 공간임. LVM의 PV로 귀속되면 해당 공간에 여유 공간이 충분해도 물리적으로 파티셔닝 할 수 없음.
Volume Group (VG) : PV로 등록된 파티션을 다시 하나의 그룹으로 묶을 수 있음. 이 그룹이 바로 VG임. VG로 묶인 PV파티션은 동일 VG 내에서 모든 용량이 통합됨. 또 다시 논리 파티션으로 나눌때에는 VG에서 전체 가용 공간을 판단하여 할당하게 됨.
Logical Volume (LV) : VG는 다시 자신이 관리중인 PV에서 논리적으로 공간을 분할 할 수 있음. 이렇게 분할된 파티션을 LV라고 함.
이렇게 LV로 나뉜 파티션은 최종적으로 파일 시스템을 할당받고 특정 디렉토리에 마운트 될 수 있음.
파티션은 물리 공간에서 나뉜 각각의 저장공간인 반면, 볼륨의 경우 파티션을 포함한 물리 저장 공간까지 모두 아우르는 개념.
파티셔닝 :
하나의 물리 저장 장치를 시스템 내부에서 여러 디스크 공간으로 나누는 작업을 일컬음.
물리적으로 나뉜 공간을 primary, 논리적으로 나뉜 공간을 Extended 라고 부름.
파티션 :
하드디스크 용량을 사용자가 필요에 따라 논리적으로 나눈 구역. 하나의 디스크는 여러개의 파티션을 나눌 수 있음. LVM이라고 부르는 파일 시스템을 통해 하나의 물리 공간을 논리적으로 쪼개어 사용함. 이렇게 나뉜 각각의 저장 공간을 파티션이라고 부름.
파티션은 고정적이고 물리적인 개념이 강하며, 한 번 크기를 설정하면 변경하거나 추가하기 힘들고 OS는 각 파티션을 별도의 디스크 처럼 인식한다.
Primary 파티션 (주 파티션)
1) 파티션 정보를 포함하는 파티션 테이블에는 파티션 정보를 4개 밖에 저장 할수 밖에 없는 제한이 있으며, 이 4개의 파티션을 Primary 파티션 (주 파티션)이라고 부른다.
2) 4개 이상의 파티션을 사용해야 할 때는 하나의 확장 파티션을 설정하며 확장 파티션 안에 여러개의 논리 파티션을 분할하여 데이터 저장.
Extended 파티션 (확장 파티션)
1) 하나의 물리적 디스크에 1개만 생성 가능, 주 파티션내에 생성. 파티션 번호는 1~4번이 할당.
2) 데이터 저장 영역을 위한것이 아니라 논리 파티션을 생성
3) Extended 파티션은 Primary 파티션 가운데 한개만 쓸 수 있음.
4) Extended 파티션에는 사용자가 원하는 만큼의 Logical 파티션을 만들 수 있음.
Logical 파티션 (논리 파티션)
1) 확장 파티션 내에 생성
2) 12개 이상 생성하지 않는것을 권고하며 5번 이후의 파티션 번호가 붙여짐.
마운트 (mount)
파티셔닝 된 물리 혹은 논리 공간은 특정 디렉토리에 연결되어 보이는데, 이것을 흔히 마운트 되었다고 표현한다. 즉, 특정 파일 시스템으로 마운트 된 파티션이 특정 디렉토리에 마운트 됨으로써, 사용자는 그 디렉토리를 통해 디스크의 파티션과 상호작용 할 수 있게 됨.
하드디스크, 플로피 디스크와 같은 저장 장치를 사용할 수 있도록 설정하는 작업.
리눅스에서 디스크를 사용하는 가장 기본적인 방법은 디스크를 파티션으로 나누어 각각의 디렉터리에 파일 시스템으로 마운트 한 뒤 지정된 위치에 데이터를 저장해서 사용하는 것이다.
(디스크 → 파티션 → 볼륨그룹 → 논리그룹 → 파일시스템(/home))
root권한을 최소화 시키는것이 보안의 첫걸음이며, sudo사용은 보안의 기본이라 할 수 있다.
root password를 효율적으로 관리 할 수 있다. 한명이 아닌 여러명의 관리자에 의해 시스템이 운영될 경우에 여러사람이 root패스워드를 공유하면 root 패스워드 정기적인 변경이 어려워짐은 물론, root 패스워드가 외부로 노출될 확률이 높아진다. sudo를 써서 root권한을 사용하는 시간을 최소화하는것은 위협요소로부터 안전한 작업 또는 운영을 하는데 있어서 매우 큰 장점이다.
log 추적이 쉬워진다. su root할 경우가 많아지게 되면, su root가 되어 무슨 작업을 했는지 일일히 확인하는것이 불가능 하다. 심지어 시스템의 일부가 손상되어도 그 사실을 눈치채지 못할 수 있다. sudo를 쓰게 되면 command단위의 loggin이 가능하므로 정확한 기록을 확인할 수 있게 된다.
관리의 권한과 책임이 명확해진다. root 권한을 여러 사람이 공유할때, 어떤 작업이 누구에 의해 행해졌는지는 매우 불분명하다. sudo를 써서 작업한다면 누가 어떤 작업을 했는지가 명확하다.
$dpkg -l sudo
sudo 설치 여부 확인
2. The evaluated student should now show assigning your new user to the "sudo" group.
sudo adduser <new username>
new user 생성
sudo usermod -aG sudo <new username>
sudo그룹에 new user 할당
getent group
커맨드로 그룹 현황 확인 해 볼것
deluser <user> <group>
to remove user from a group=> show how sudo works
su -
root계정으로 로그인cd /var/log/sudo/00/00
으로 접근ls
로 들어있는 log 파일들을 확인 sudo ls
등 sudo와 관련된 아무 커맨드나 확인하고, 새로운 log 파일이 생겼는지 확인한다.
UFW is a program for managing a netfilter firewall designed to be easy to use.
sudo ufw status verbose
: ufw 상태 상세 확인
UFW이란, 데비안 계열 빛 다양한 리눅스 환경에서 작동되는 사용하기 쉬운 방화벽 관리 프로그램이다. UFW는 사용하기 쉽게 설계된 넷필터 (리눅스 커널 내부의 네트워크 관련 프레임 워크) 방화벽을 관리하는 프로그램이다. 간단한 명령 및 명령수가 적은 명령줄 인터페이스를 사용하는것이 특징이며, 프로그램 구성에는 iptables을 사용한다. ufw는 기본적으로 8.04 LTS 이후의 모든 데비안 및 우분투에서 사용할 수 있다.
방화벽 또는 Firewall은 네트워크를 통해 들어오는 트래픽(패킷)을 모니터링하고 제어하는 보안 시스템이다. 학교에서 사용하는 내부 네트워크 보안 규칙 설정 뿐만아니라. 외부 접속을 통한 데이터의 안전상태를 검열 혹은 수정하는 장치이다.
sudo ufw status numbered
: verify the rule numbered
sudo ufw allow 8080
: add 8080 port
sudo ufw delete <Number of the rules to be deleted>
: delete the rule
Check that the SSH service is properly installed on the virtual machine and check that is working properly.
systemctl status ssh
: check the status of ssh
You must be able to explain basically what SSH (Secure Shell) is and the value of using it.
SSH란 Secure Shell의 줄임말로, 두 컴퓨터 간 통신을 보안적으로 안전하게 할 수 있게 해주는 하나의 protocol이다.
인터넷 연결만 되어있어도 내 컴퓨터의 terminal을 통해 다른 지역에 있는 컴퓨터 혹은 서버를 관리할 수 있게 해주고, 파일도 공유 할 수 있다.
대표적인 사용의 예)
- protocol이란, 서로 다른 통신 장비 간 주고 받는 데이터의 양식과 규칙이다.
예시) HTTP, HTTPS, FTP
SSH란 Secure Shell Protocol, 즉 네트워크 프로토콜 중 하나로 컴퓨터와 컴퓨터가 같은 public network를 통해 서로 통신을 할때 보안적으로 안전하게 통신을 하기 위해 사용하는 프로토콜이다.
대표적인 사용의 예는 하기와 같다.
- SSH (Secure Shell) is a network protocol that gives users, particularly system administrators, a secure way to access a computer over an unsercured network. In addition to providing secure network services, SSH refers to the suite of utilities that implement the SSH protocol. Secure Shell provides strong password authentication and public key authentication, as well as encrypted data communications between two computers connecting over an open network, such as the internet.
=> 보너스를 했기 때문에, port4242 와 port80 (wordpress 연결)이 떠야함.
#!/bin/bash
printf "#Architecture: "
uname -a
printf "#CPU physical : "
nproc --all
printf "#vCPU : "
cat /proc/cpuinfo | grep processor | wc -l
printf "#Memory Usage: "
free -m | grep Mem |awk '{printf"%d/%dMB (%.2f%%)\n", $3, $2, $3/$2 * 100}'
printf "#Disk Usage: "
df -BM -a | grep /dev/mapper/ | awk '{sum+=$3}END{print sum}' | tr -d '\n'
printf "/"
df -H -a | grep /dev/mapper/LVMGroup-root | awk '{sum+=$2}END{printf sum}' | tr -d '\n'
printf "Gb ("
df -BM -a | grep /dev/mapper/ | awk '{sum1+=$3 ; sum2+=$4} END {printf "%d", sum1 / sum2 * 100}' | tr -d '\n'
printf "%%)\n"
printf "#CPU load: "
mpstat | grep all | awk '{printf "%.2f%%\n", 100-$13}'
printf "#Last boot: "
who -b | sed 's/^ *system boot //g'
printf "#LVM use: "
if [ "$(lsblk | grep lvm | wc -l)" -gt 0 ] ; then printf "yes\n" ; else printf "no\n" ; fi
printf "#Connexions TCP : "
ss | grep -i tcp | wc -l | tr -d '\n'
printf " ESTABLISHED\n"
printf "#User log: "
who | wc -l
printf "#Network: IP "
/sbin/ifconfig | grep broadcast | sed 's/inet//g' | sed 's/netmask.*//g' | sed 's/ //g' | tr -d '\n'
printf " ("
/sbin/ifconfig | grep ether | sed 's/.*ether //g' | sed 's/ .*//g' | tr -d '\n'
printf ")\n"
printf "#Sudo : "
cat /var/log/auth.log | grep -a sudo | grep -a 'COMMAND=' | wc -l | tr -d '\n'
printf " cmd\n"
exit 0
A time-based job scheduler in Unix-like computer operating systes.
The cron daemon is a long-running process that executes commands at specific dates and times (to run schedule tasks).Cron wakes up every minutes and checks schedule tasks in cron table.
crontab : crontab is a table where we can schedule such kind of repeated tasks.
crontab -e
*/10 * * * */home/ytak/monitoring.sh | wall
=> set up the script at every 10 min
crontab -e
*/1 * * * */home/ytak/monitoring.sh | wall
*/1 * * * * sleep 30; /home/ytak/monitoring.sh | wall
=> Using sleep30s, the monitoring.sh should run every 30 seconds.
http://127.0.0.1:9000/
: php 연결 확인
http://127.0.0.1:9000/h2s
: 연결된 wp 사이트 확인. Lighttpd를 설치할때 syntax를 h2s로 설정함.
(Host Port:9000 , Guest port :80)
< 웹 서버의 사용 >
출처 :
0) 가상머신이란
https://joyfuls.tistory.com/48
1) 리눅스 종류
https://coding-factory.tistory.com/318
2) Apparmor 정의
https://wiki.debian.org/AppArmor
3) 전반적인 info
https://tbonelee.tistory.com/m/16
4) Wall linux command
https://www.geeksforgeeks.org/wall-command-in-linux-with-examples/
5) UID and GID in Linux
https://medium.com/@gggauravgandhi/uid-user-identifier-and-gid-group-identifier-in-linux121ea68bf510#:~:text=Identifier%20in%20Linux-,Gaurav%20Gandhi,user%20or%20group%20can%20access
6) How to add and delete users on Debian 10
https://devconnected.com/how-to-add-and-delete-users-on-debian-10-buster/
7) How to delete Group in Linux
https://linuxize.com/post/how-to-delete-group-in-linux/
8) 파티션 정보
https://www.lifewire.com/do-you-need-home-partition-2202048
https://web.mit.edu/rhel-doc/4/RH-DOCS/rhel-rg-en-4/s1-filesystem-fhs.html
https://letitkang.tistory.com/88
https://new-ngmon.tistory.com/23
9) LVM 정보
https://mamu2830.blogspot.com/2019/12/lvmpv-vg-lv-pe-lvm.html
https://velog.io/@welloff_jj/Born2beRoot-%EB%AD%90%EA%B0%80-%EB%AD%94%EC%A7%80-%EB%AA%A8%EB%A5%B4%EA%B2%A0%EC%A7%80%EB%A7%8C-%EC%95%84%EB%AC%B4%ED%8A%BC-%EC%A0%95%EB%A6%AC%ED%95%98%EB%8A%94-%EA%B8%80
https://itguava.tistory.com/100
https://velog.io/@dogfootbirdfoot/Born2beRoot2
10) 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)#/media/%ED%8C%8C%EC%9D%BC:Firewall.png
11) SSH 정보
https://searchsecurity.techtarget.com/definition/Secure-Shell
12) How to use cron
https://opensource.com/article/17/11/how-use-cron-linux
13) Port forwarding 정보
https://storytown.tistory.com/14#:~:text=21%EB%B2%88%20%ED%8F%AC%ED%8A%B8%EB%A1%9C%20%EC%9A%94%EC%B2%AD,Port%2DForwarding%EC%9D%B4%EB%9D%BC%EA%B3%A0%20%ED%95%A9%EB%8B%88%EB%8B%A4.
14)Install Wordpress on Lighttpd
https://www.how2shout.com/linux/install-wordpress-on-lighttpd-web-server-ubuntu/
15) PHP 정보
https://server-talk.tistory.com/25
https://choseongho93.tistory.com/61
16) 웹서버 정보
https://doorbw.tistory.com/29
https://wiseworld.tistory.com/75