카테고리 없음

[WIL]리눅스(CentOS, Ubuntu)

pioneerxj 2023. 6. 2. 17:36

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

 

http://192.168.X.X/gnuboard5/   

 

그누보드 페이지 접속 완료

 

- db권한 보기

mysql> use mysql;

mysql> select user, host from user;

mysql> show grants for borad@localhost;