Red Hat 계열의 리눅스 배포판(유료서비스로 안정적인 기능과 기술지원)
- Fedora: 최신 기술과 기능을 경험할 수 있고 빠른 업데이트와 실험적인 기능을 제공한다.
- CentOS: Red Hat에 있는 기능을 배포를 위해 제공하는 버전(무료)
Debian 계열
- Debian: 커뮤니티 기반의 리눅스 배포반 안정성과 보안을 중점으로 서버 개발에 많이 사용된다.
- Ubuntu: 서버와 클라우드 환경에서 많이 사용된다.
shell > bash (bash는 shell의 일종이다)
리눅스 명령어
# : 관리자 권한
$ : 일반 사용자 권한
whoami // 현재 디렉토리명
pwd // 현재 디렉토리
ls // 디렉토리 내 파일명
who // 현재 접속하고 있는 사람을 찾을 때
ifconfig // 네트워크 상태 보기 (ifconfig에서 가상머신을 설치하면 ens160이 나옴)
uname -r: 커널 확인하기
vmware에서 1~127번까지는 수동으로 IP를 사용할 수 있고, 128~253번까지는 DHCP 구간이 된다.
sudo -i // 관리자(root) 홈 디렉토리에서 작업을 시작함
sudo -s // 현재 작업하는 디렉토리에서 관리자 권한으로 명령 실행
- Red Hat 계열에서는 root 계정의 비밀번호를 복잡하게 사용하고 활성화하고 있음
- Debian 계열에서는 root 계정이 비활성화 되어 있음 -> sudo만 사용함
shutdown -h now // 정상 종료
shutdown -P +10 // 10분 뒤 종료
reboot // 재부팅
init 6 // 재부팅
init 0 // 시스템 종료
리눅스는 전원을 끄는 경우는 잘 없고 로그아웃을 한다.
history // 사용한 명령어들의 기록
history -d 1 // 명령어 기록 삭제
cd / //가장 상위 디렉토리로 이동함
cd ~ // 홈 디렉토리로 이동
ll / ls -l 의 약자
dr-xr-xr-x. 17 root root 224 May 26 20:12 .
dr-xr-xr-x. 17 root root 224 May 26 20:12 ..
lrwxrwxrwx. 1 root root 7 May 11 2019 bin -> usr/bin
dr-xr-xr-x. 6 root root 4096 May 26 20:25 boot
drwxr-xr-x. 20 root root 3300 May 26 20:24 dev
drwxr-xr-x. 133 root root 8192 May 26 20:24 etc
drwxr-xr-x. 3 root root 19 May 26 20:23 home
d : 디렉토리
- : file
l : link
su root // root 권한으로 변경
dnf update // 최신으로 업데이트
dnf install vim // vim 자동 설치
* 자동 설치 명령어
- Redhat 계열 : dnf install, dnf remove
- Debian 계열 : apt
* 파일 생성하기
# cd /home/계정
# vi test.txt // 파일이 없으면 새로 만들어서 시작함
i // 편집모드 시작 (--insert-- 표시가 보임)
yy // 한줄 복사
p // 현재 행 이후에 붙여넣기
P // 현재 행 이전에 붙여넣기
* 파일안에 #은 주석
dd // 한줄 삭제
. // 앞 명령 반복
gg // 맨 위로 이동
Shift G // 맨 마지막 이동
x // 한글자 삭제
X // 앞글자 삭제
ESC // 명령어 모드로 나옴
:wq // write and quit
:q // 변경사항이 없어서 저장하지 않고 종료
:q! // 변경사항이 있지만 저장하지 않고 종료
q 뒤에 !를 붙이면 '강제로'라는 의미가 됨
:set nu // 왼쪽에 라인 수를 표시함
/키워드 // 해당 키워드 검색
:%s/Friday/Sunday // 글자 변경
rm // 파일 삭제
rm -r // 디렉토리 삭제 : 디렉토리와 관련된 작업을 할때는 항상 -r
rm -rf // 디렉토리를 강제로 삭제
cp text.txt new.txt // 파일 복사
cp -r matrix /usr/local/src // 디렉토리 복사
mv secret.txt /디렉토리명 // 해당 폴더로 이동
mv secret.txt privacy.txt // 파일명을 바꿀때도 사용함
md5sum text.txt new.txt // 파일내용의 해시값
echo "Your love is spy" > secret.txt // 새로 생성 & 덮어쓰기
echo "But she is not cheat on you" >> secret.txt // 다음 줄에 추가
cat /파일명 // 파일내용을 print
- 파일 내용 읽기
head 파일명 // 위에서부터 볼 때
head -20 /var/log/secure // 위에서 20줄만 볼때
tail 파일명 // 밑에서 볼때
tail -20 /var/log/secure // 밑에서 20줄만 볼때
Ctrl + L : 맨위로 화면이 올라감
more 파일명 // 페이지 단위로 출력 (Space bar를 누르면 다음 페이지로 넘어감)
* : 아스테리스크 (Asterisk)
~ : 틸드 (Tlide)
@ : 앳(at)
& : ampersand
^ : 캐럿 (caret)
[]: bracket
! : exclamation mark
. : dot
useradd // 사용자 계정 생성
passwd username // 사용자 비밀번호 설정
useradd twice // twice 유저 생성
passwd twice // twice 비밀번호 입력
chage -m 5 -M 90 -W 7 twice // 사용자 계정에 대한 설정
-d, --lastday <날짜>: 사용자 계정의 마지막 암호 변경일을 지정
-E, --expiredate <날짜>: 사용자 계정의 암호 만료일을 지정
-m, --mindays <일수>: 암호 변경 후 최소한으로 경과해야 하는 일수를 지정
-M, --maxdays <일수>: 암호의 최대 사용 가능 일수를 지정
-W, --warndays <일수>: 암호 만료 전에 경고 메시지를 표시하는 일 수를 지정
usermod -g root twice
chage -l twice // 해당 계정의 정보
groupadd girlgroup(그룹명) // 그룹 생성
usermod -g boygroup bts
groups bts // bts의 그룹명 보기
gpasswd -A bts // bts로 관리자 지정
gpasswd
-A : 관리자(Admin) 지정
-a : 사용자 추가(add)
-d : 사용자 제거(delete)
rwxrwxrwx 소유자(User) 그룹(Group) 기타(Other)
첫번째 3개는 소유자 / 두번째 3개는 그룹 / 세번째 3개는 기타
r : read (4)
w : write (2)
x : execute (1)
- : 권한없음 (0)
chmod: 권한을 변경하는 명령
chmod 700 [파일명] -> 권한이 변경됨
600(rw-------)에서 777(rwxrwxrwx)로 바꿀때 // chmod777 password.lst
chmod g-r password.lst // password.lst에 global로 read 가능
chmod o-rwx password.lst // password.lst에 other가 read, write, execute 가능
- chown twice.girlgroup [파일명] -> Owner와 Group이 변경됨
ÿØÿà : JPG/JPEG로 인식하는 파일 시그니처
* password.lst를 /home/twice로 복사하고 오너를 twice로 변경하고, 권한을 755로 변경하기
# cp password.lst /home/twice
# cd /home /twice
# ls -l
# chown twice password.lst // 소유자 변경
# chmod 755 password.lst // 권한 변경
소유자와 그룹을 동시에 변경
# chown twice.girlgroup password.lst
파일 실행 방법 ./파일명
- setuid : 일반사용자가 일시적으로 root권한을 이용해서 명령을 실행 : -rwsr--r--
- setgid : 일반사용자가 일시적으로 group 권한을 이용해서 명령을 실행 : -rwxrwsr--
- stickybit : 공유 디렉토리(파일을 업로드할 수 있지만, 다른 사용자의 파일을 삭제/수정 불가) : drwxrwxrwt
* SetUID
- passwd라는 명령은 root의 소유
- 일반사용자(bts)도 자신의 패스워드를 바꿀 수 있어야 함 --> 임시로 root 권한이 필요함
- passwd명령을 사용하는 순간 일반 사용자(bts)도 root권한으로 패스워드 변경을 할 수 있게 됨
- 그렇게 하려면 SetUID권한이 필요하기 때문에 -rwsr-xr-x 권한을 부여하게 됨 --> 4755
0 : r이 온다면 r=4이므로 4를 이진수로 만들면 100, -----> 4는 setuid
w가 온다면 w=2이므로 2를 이진수로 만들면 010, -----> 2는 setgid
x가 온다면 x=1이므로 1을 이진수로 만들면 001, -----> 1은 stickybit
-가 온다면 -=0이므로 0을 이진수로 만들면 000
-rwsr-xr-x. 1 root root 33600 Apr 7 2020 passwd // passwd는 root의 소유, root권한이 아니면 사용할 수 없음
s는 setuid의 s임 rwsr-xr-x ---> 4755 // setuid : 일반사용자는 실행하는 순간에 root권한을 잠시 빌려서 사용하게 됨 (자신의 비밀번호만 바꿀수 있음)
rwxr-xr-x ----> 755
- setuid(4~) : user가 자신의 파일을 변경해야 할 때, 잠시 root권한을 사용하는 것
-rwsr-xr-x ex) 4xxx : 4755, 4640, 4754
- setgid(2~) : group이 자신의 파일을 변경해야 할 때, 잠시 root권한을 사용하는 것
-rwxrwsr-x ex) 2xxx : 2755, 2640, 2754
- sticky bit(1~) : 공유폴더임 drwxrwxrwt ex) 1xxx : 1777
hardlink : 링크 바로가기 (파일 내용을 변경해도 원본 내용과 동일하게 유지)
softlink는 윈도우의 바로가기와 동일
# file /home/peter/Pictures/S<tab>
---> 파일의 속성을 볼 수 있음
# vi /home/peter/Pictures/S<tab>
---> PNG 파일의 파일 시그니처 : 89 50 4E 47 (50: P, 4E: N, 47: G)
\(back slash)는 특수문자의 기능을 하지 못하게 하는 것 ---> Escape처리라고 함
* Hash Function
- 파일이나 텍스트를 해시함수에 넣으면 해시값(Hash code)이 출력됨
- 해시 함수는 '요약(Digest)'하는 방식을 반복하는 함수
- 파일이나 텍스트가 다르면 해시값도 다름 -> 무결성 검사 기능(무결성: 변조되지 않음)
- 해시값이 다르면 파일이나 텍스트가 다르다는 것을 의미함
1. 일방향 함수 (역연산 불가)
- 해시함수와 해시값을 알아도 파일이나 텍스트를 만들어 낼 수 없음
- MD5(128bit), SHA-1(160bit), SHA-256(256bit)
2. 충돌 방지 : 원문(파일, 텍스트)이 다르면 해시값도 다름 -> 무결성
- 충돌은 원문이 다른데 해시값이 같은 경우
- MD5가 충돌할 확률: 1/(2의128승) -> 0에 수렴 (그러나 요즘은 컴퓨터의 발전으로 충돌도 간혹 발생함)
3. 고정길이 출력 : 같은 해시함수를 사용하면 원문 길이와 상관없이 일정 크기로 출력됨
d75a36b1040c24b2ff678307e97c12fc 자리수가 32자리 * 4bit(16진수) = 128bit
49f518f09d093eccb29f4d0a828ea57b8b03b99c 자리수가 40자리 * 4bit(16진수) = 160bit
2eab668c0ac809f95e92c75716c859dc4767ce0873deb336b9905b74d8863f66 64자리 * 4bit = 256bit
su (switch user : 다른 사용자 계정으로 바꾸겠다)
sudo (root 권한으로 한번만 사용하겠다)
ex) sudo dnf install httpd
RPM의 단점
- 의존성 문제 발생 : 미리 설치되어 있어야 설치 가능, 버전마다 조금씩 달라지는 문제
- 강제로 패키지를 설치하는 방법 : --force
* 저장소(repo) 파일 변경 (교재의 p.92 순서대로 진행, repo 내용은 카페 참고)
# cd /etc/yum.repos.d
# mkdir backup
# mv *.repo backup
# vi This.repo (Edit > paste)
:wq
# dnf clean all
# dnf udpate
압축하고 압축해제하기
- xz, gzip, bzip2, zip/unzip
- zip은 압축할 때, unzip은 압축을 해제할 때 -> Window와 호환 가능, 여러파일 압축가능
- tar 여러파일을 새로운 묶음으로 만듬
-c : 새로운 묶음
-x : 묵음 해제
-f : 묶음 파일 이름 지정
-v : 과정을 보여줌
압축해제 => tar -zxvf [압축파일.tar.gz]
xz // XZ파일로 압축
bzip2 // bz파일로 압축
gzip // gz파일로 압축 (제일 용량이 적음)
실습) 확장자가 txt인 파일을 zip으로 모아서 압축하고, gzip으로 압축하고, xz로 또 압축하기
# zip text.zip *.txt
# gzip text.zip
# xz text.zip.gz
dnf install // 설치 명령어
RPM (Redhat Package Manager) // Redhat 계열에서 사용
rkhunter는 rootkit을 잡아주는(hunt) 도구
* 파일 찾기 : find
- 일반사용자 권한으로는 사용할 수 없음
- root 권한을 이용해야 함 (파일들 중에 권한이 일반 사용자는 읽기 권한도 없는 경우가 많기 때문)
1) 이름 찾기
# find / -name "*twice*"
#find
#find / -name "http*" // http로 시작하는 모든 파일을 찾아줌
#find / -user "twice" // 소유자가 트와이스인 파일을 찾음
#find /etc -perm 644 // etc폴더에서 644권한을 가진 파일을 찾음
#find /etc -perm 644 etc | wc -l // 파일의 갯수를 알려줌
#find /usr/bin -size +10k -size -100k // 파일 크기가 10k~100k를 찾아줌
| sort | sort -rn // sort: 정렬, -rn: 내림차순, -n: 오름차순
| wc -l // 갯수
#find ~ -size 0k -exec ls -l {} \; // 파일크기가 0인 파일을 찾아서 보여줌
#find /home -name "*.swp" -exec rm { } \; // swp파일을 찾아서 삭제
* AWK(오크; Aho Weinberger Kernighan)
echo 11 22 33 44 | awk '{print $4,$3,$2,$1}'
* MAC time
-mtime : modify time(수정 시간)
-atime : access time(접근 시간)
-ctime : create time(생성 시간)
cron // 반복되는 작업 또는 특정 시점에 수행할 작업을 미리 등록해놓음
분 시 일 월 요일 사용자 실행명령
00 05 1 * * root cp -r /home /backup
systemctl restart crond // 크론 재시작
#sysctl -a | grep tcp // tcp와 관련된 설정 보기
# wc -l // 라인수 계산해서 보여줌
# wc -m // 알파벳 개수를 계산해서 보여줌
# wc - w // 단어 개수를 계산해서 보여줌
3) sort (정렬)
# sort -u // 중복 제거
* ICMP 시스템 설정 내용을 정렬해서 따로 저장하기
# sysctl -a | grep icmp | sort | sort -n > /home/peter/config.txt
# cat /home/peter/config.txt
uniq -c // 중복을 제거하고 왼쪽에 개수를 표시
sort -u // 중복만 제거
top // 프로세스 보기
netstat -nap | less
우분투 22.04.2를 이용하여 Gnyboard 설치하기
우분투22.04.3 iso 파일을 다운받아 vmware에서 실행
1. sudo apt update // 업데이트, sudo apt install vim
2. sudo apt install apache2 // 웹서버 설치 (y를 눌러줌)
3. cd /var/www/html // 웹서버 루트 디렉토리
4. ip addr
5. cd /var/www/html
6. sudo rm index.html
7. sudo vi index.html
우분투를 설치 후
sudo apt update // 업데이트
sudo apt install vim // vim 설치
sudo apt install apache2 // 아파치 설치
sudo apt install mysql-server // mysql 설치
sudo mysql -u root -p // mysql 접속
create database gnuboard;
create user board@localhost identified by 'cyber12#$';
grant all privileges on gnuboard.* to board@localhost;
exit
테이블을 만들고 권한을 부여한 후
sudo apt install php php-mysql php-common php-gd php-fpm php-xml php-json php-curl git // 서버 라이브러리 설치
gnuboard github clone
cd gnuboard5
sudo mkdir data
sudo chmod 707 data
sudo apt install net-tools
sudo service apache2 restart
그누보드 페이지 접속 완료
- db권한 보기
mysql> use mysql;
mysql> select user, host from user;
mysql> show grants for borad@localhost;