리눅스 명령어/파일묶기, 압축/디렉터리/패키지설치/rpm/yum/소스코드 컴파일 설치/사용자와그룹 (교육 28일차)

SW·2022년 12월 29일






























실습> 체크리스트

아래 명령어를 실행하시오.

관리자 root에서 자신의 홈디렉터리에서 작업한다.

1. /etc/fstab 파일을 자신의 홈 디렉터리에 복사한다.
[root@localhost ~]# cp /etc/fstab .

2. 복사한 fstab 파일을 fstab.bak 파일로 복사한다.
[root@localhost ~]# cp fstab fstab.bak

3. fstab, fstab.bak 파일을 아래처럼 압축한다.
-fstab: gzip 명령어로 압축한다. # gzip fstab
-fstab.bak: xz 명령어로 압축한다. # xz fstab.bak
4. /var/log 디렉터리를 현재 디렉터리에 logBackup 디렉터리로 복사한다.
[root@localhost ~]# cp -a /var/log logBackup
[root@localhost ~]# cp -Rf /var/log/ logBackup

5. /etc 디렉터리를 현재 디렉터리에 복사한다.
[root@localhost ~]# cp -a /etc .
[root@localhost ~]# cp -Rf /etc .

실습> tar로 여러 파일들 묶기

1. 파일 묶기 (~.tar)
-tar 명령어
2. 압축
-gzip(z) : ~~.tar.gz
-bzip2(j) : ~~.tar.bz2
-xz(J) : ~~.tar.xz

[root@localhost ~]# cd
[root@localhost ~]# rm -rf *
[root@localhost ~]# ls
[root@localhost ~]# touch a.txt b.txt c.txt d.txt
[root@localhost ~]# ll
합계 0
-rw-r--r--. 1 root root 0 12월 28 13:43 a.txt
-rw-r--r--. 1 root root 0 12월 28 13:43 b.txt
-rw-r--r--. 1 root root 0 12월 28 13:43 c.txt
-rw-r--r--. 1 root root 0 12월 28 13:43 d.txt

파일을 묶는 방법은 tar 명령어의 c 옵션을 사용한다.
[root@localhost ~]# tar -cvf test1.tar a.txt b.txt c.txt d.txt
a.txt
b.txt
c.txt
d.txt
[root@localhost ~]# ll
합계 12
-rw-r--r--. 1 root root 0 12월 28 13:43 a.txt
-rw-r--r--. 1 root root 0 12월 28 13:43 b.txt
-rw-r--r--. 1 root root 0 12월 28 13:43 c.txt
-rw-r--r--. 1 root root 0 12월 28 13:43 d.txt
-rw-r--r--. 1 root root 10240 12월 28 13:45 test1.tar

[a-d]: a,b,c,d를 의미한다.
: 모든 파일
[a-d]
: a ~ d로 시작하는 모든 파일을 의미한다.
[root@localhost ~]# rm -f [a-d]*
[root@localhost ~]# ll
합계 12
-rw-r--r--. 1 root root 10240 12월 28 13:45 test1.tar

[root@localhost ~]# tar tf test1.tar
a.txt
b.txt
c.txt
d.txt
[root@localhost ~]# tar tvf test1.tar
-rw-r--r-- root/root 0 2022-12-28 13:43 a.txt
-rw-r--r-- root/root 0 2022-12-28 13:43 b.txt
-rw-r--r-- root/root 0 2022-12-28 13:43 c.txt
-rw-r--r-- root/root 0 2022-12-28 13:43 d.txt

[root@localhost ~]# gzip test1.tar
[root@localhost ~]# ll
합계 4
-rw-r--r--. 1 root root 138 12월 28 13:45 test1.tar.gz

[root@localhost ~]# gzip -d test1.tar.gz
[root@localhost ~]# ll
합계 12
-rw-r--r--. 1 root root 10240 12월 28 13:45 test1.tar

파일을 추출하는 방법은 tar 명령어의 x 옵션을 사용한다.
[root@localhost ~]# tar xf test1.tar
[root@localhost ~]# ll
합계 12
-rw-r--r--. 1 root root 0 12월 28 13:43 a.txt
-rw-r--r--. 1 root root 0 12월 28 13:43 b.txt
-rw-r--r--. 1 root root 0 12월 28 13:43 c.txt
-rw-r--r--. 1 root root 0 12월 28 13:43 d.txt
-rw-r--r--. 1 root root 10240 12월 28 13:45 test1.tar

tar + gzip 을 이용해서 a.txt, b.txt, c.txt, d.txt 파일을 test1.tar.gz 파일로 압축한다.
[root@localhost ~]# tar -czf test1.tar.gz [a-d].txt
-> z : 외부명령어 gzip을 실행 -> test1.tar.gz
a.txt
b.txt
c.txt
d.txt
를 tar로 묶어서 gzip으로 압축!!!

tar + bzip2 를 이용해서 a.txt, b.txt, c.txt, d.txt 파일을 test2.tar.bz2 파일로 압축한다.
[root@localhost ~]# tar -cjf test2.tar.bz2 [a-d]*
-> j : 외부명령어 bzip2를 실행, * : .txt

tar + xz을 이용해서 a.txt, b.txt, c.txt, d.txt 파일을 test3.tar.xz 파일로 압축한다.
[root@localhost ~]# tar -cJf test3.tar.xz a.txt b.txt c.txt d.txt
-> J : xz을 실행
[root@localhost ~]# rm -f *.txt
-> *.txt : .txt 일체

tar + gzip 을 이용해서 a.txt, b.txt, c.txt, d.txt 파일을 test1.tar.gz 파일로 압축한다.
[root@localhost ~]# tar czf test1.tar.gz [a-d]*

tar + bzip2 를 이용해서 a.txt, b.txt, c.txt, d.txt 파일을 test2.tar.bz2 파일로 압축한다.
[root@localhost ~]# tar cjf test2.tar.bz2 [a-d]*.txt

tar + xz을 이용해서 a.txt, b.txt, c.txt, d.txt 파일을 test3.tar.xz 파일로 압축한다.
[root@localhost ~]# tar cJf test3.tar.xz [a-d]*.txt

gzip으로 압축을 해제한다.
[root@localhost ~]# tar xzf test1.tar.gz
-> x : tar 파일에서 정의된 파일을 추출

[root@localhost ~]# mkdir DIR1
[root@localhost ~]# mkdir DIR2

bzip2로 압축을 해제할 때 DIR1 디렉터리에 압축을 해제한다.
-C <압축을풀디렉터리> 옵션이 없으면 현재 디렉터리에 풀린다.
[root@localhost ~]# tar -xjf test2.tar.bz2 -C DIR1
xz으로 압축을 해제할 때 DIR2 디렉터리에 압축을 해제한다.
[root@localhost ~]# tar -xJf test3.tar.bz2 -C DIR2
-> -C 디렉터리 : 다른 디렉터리에 압축해제!!!

실습> 디렉터리 압축하기

!!! 중요 !!!
파일이 여러 개 있을 경우 이 파일을 하나의 파일로 묶을 경우에는
디렉터리에 넣어두고 그 디렉터리를 압축을 한다.

[root@localhost ~]# rm -f *
rm: cannot remove 'DIR1': 디렉터리입니다
rm: cannot remove 'DIR2': 디렉터리입니다
[root@localhost ~]# ll
합계 0
drwxr-xr-x. 2 root root 58 12월 28 14:35 DIR1
drwxr-xr-x. 2 root root 58 12월 28 14:36 DIR2
[root@localhost ~]# tar czf DIR1.tar.gz DIR1
[root@localhost ~]# tar cjf DIR2.tar.bz2 DIR2
[root@localhost ~]# rm -rf DIR[12]

[root@localhost ~]# ll
합계 8
-rw-r--r--. 1 root root 170 12월 28 14:42 DIR1.tar.gz
-rw-r--r--. 1 root root 188 12월 28 14:42 DIR2.tar.bz2
[root@localhost ~]#

DIR1.tar.gz 파일을 압축을 해제한면 DIR1 디렉터리가 생성되고 그 디렉터리 안에 파일이 생성된다.
[root@localhost ~]# tar xzf DIR1.tar.gz
[root@localhost ~]# ls
DIR1 DIR1.tar.gz DIR2.tar.bz2

DIR2.tar.bz2 파일을 압축을 해제한면 DIR2 디렉터리가 생성되고 그 디렉터리 안에 파일이 생성된다.
[root@localhost ~]# tar xjf DIR2.tar.bz2
[root@localhost ~]# ll
합계 8
drwxr-xr-x. 2 root root 58 12월 28 14:35 DIR1
-rw-r--r--. 1 root root 170 12월 28 14:42 DIR1.tar.gz
drwxr-xr-x. 2 root root 58 12월 28 14:36 DIR2
-rw-r--r--. 1 root root 188 12월 28 14:42 DIR2.tar.bz2

##########
rpm
##########

rpm은 RPM Package Manager 약자로 레드햇에서 만든 패키지 관리 프로그램이다.
만들게 된 이유는 소스로 컴파일해서 설치하는 부담을 좀 더 덜어주기 위해서 만들었다.

단점: 의존성 문제

rpm -qf /bin/ls
rpm -qi coreutils
rpm -ql coretuls

rpm -qf /usr/sbin/useradd
rpm -qi shadow-utils
rpm -ql shadow-utils

실습> rpm 파일 설치하기

http://mirror.kakao.com/centos/7/os/x86_64/Packages/

1. rpm 패키지 다운로드
[root@localhost ~]# wget http://mirror.kakao.com/centos/7/os/x86_64/Packages/mc-4.8.7-11.el7.x86_64.rpm

2. 삭제/설치
-ivh: 설치 (-Uvh 옵션이 있으므로 사용을 잘 안한다.)
-Uvh: 업데이트 설치 (주로 사용하는 옵션, 패키지가 없으면 설치, 있지만 버전이 낮으면 업데이트 한다.)
-evh: 삭제

[root@localhost ~]# rpm -e mc
[root@localhost ~]# rpm -i mc-4.8.7-11.el7.x86_64.rpm
[root@localhost ~]# mc
[root@localhost ~]# rpm -e mc-4.8.7-11.el7.x86_64.rpm <-- 에러
[root@localhost ~]# rpm -e mc-4.8.7-11.el7.x86_64

[root@localhost ~]# rpm -iv mc-4.8.7-11.el7.x86_64.rpm
[root@localhost ~]# rpm -ev mc-4.8.7-11.el7

[root@localhost ~]# rpm -ivh mc-4.8.7-11.el7.x86_64.rpm
준비 중... ################################# [100%]
Updating / installing...
1:mc-1:4.8.7-11.el7 ################################# [100%]

[root@localhost ~]# rpm -evh mc
준비 중... ################################# [100%]
Cleaning up / removing...
1:mc-1:4.8.7-11.el7 ################################# [100%]

[root@localhost ~]# rpm -Uvh mc-4.8.7-11.el7.x86_64.rpm
준비 중... ################################# [100%]
Updating / installing...
1:mc-1:4.8.7-11.el7 ################################# [100%]

3. 명령어 삭제 후 재설치
[root@localhost ~]# which mc
alias mc='. /usr/libexec/mc/mc-wrapper.sh'

[root@localhost ~]# rm -fv /usr/libexec/mc/mc-wrapper.sh
[root@localhost ~]# mc <-- mc가 실행이 안된다.
-bash: /usr/libexec/mc/mc-wrapper.sh: 그런 파일이나 디렉터리가 없습니다

이미 mc 패키지가 설치되어 있으므로 설치가 안된다.
[root@localhost ~]# rpm -ivh mc-4.8.7-11.el7.x86_64.rpm
준비 중... ################################# [100%]
mc-1:4.8.7-11.el7.x86_64 패키지는 이미 설치되어 있습니다
[root@localhost ~]# rpm -Uvh mc-4.8.7-11.el7.x86_64.rpm
준비 중... ################################# [100%]
mc-1:4.8.7-11.el7.x86_64 패키지는 이미 설치되어 있습니다

--force: 패키지가 이미 설치되어 있어도 재설치한다.
[root@localhost ~]# rpm -Uvh --force mc-4.8.7-11.el7.x86_64.rpm
준비 중... ################################# [100%]
Updating / installing...
1:mc-1:4.8.7-11.el7 ################################# [100%]

[root@localhost ~]# mc <-- mc가 실행된다.

실습> rpm 파일 설치하기2

http://mirror.kakao.com/centos/7/os/x86_64/Packages/

1. rpm 패키지 다운로드
[root@localhost ~]# wget http://mirror.kakao.com/centos/7/os/x86_64/Packages/vsftpd-3.0.2-28.el7.x86_64.rpm

2. 설치/삭제
[root@localhost ~]# rpm -U vsftpd-3.0.2-28.el7.x86_64.rpm

3. 패키지 정보 확인
[root@localhost ~]# rpm -q vsftpd
[root@localhost ~]# rpm -qi vsftpd
[root@localhost ~]# rpm -ql vsftpd
[root@localhost ~]# rpm -qa | grep vsftpd
<-- 패키지명이 출력된다.

4. 패키지 삭제
[root@localhost ~]# rpm -e vsftpd
[root@localhost ~]# rpm -qa | grep vsftpd
<-- 아무것도 나오지 않는다.

MS Visio 추천
상용이므로 무료툴도 많이 있으니 참고!!!

실습> rpm DB 테스트

rpm 정보가 저장되는 위치: /var/lib/rpm/

1. 패키지 삭제
설치된 패키지를 삭제한다.
[root@localhost ~]# rpm -e vsftpd
[root@localhost ~]# rpm -e mc

2. rpm DB 이동
자신의 홈디렉터리로 이동한다.
[root@localhost ~]# mv /var/lib/rpm ~

3. rpm 질의
rpm 질의를 하면 /var/lib/rpm 디렉터리가 자동으로 생성된다.
[root@localhost ~]# rpm -qa
[root@localhost ~]# ls /var/lib/rpm
Basenames Group Obsoletename Requirename Triggername _db.003
Conflictname Installtid Packages Sha1header _db.001
Dirnames Name Providename Sigmd5 _db.002

4. rpm DB 확인
[root@localhost ~]# file /var/lib/rpm/*
/var/lib/rpm/Basenames: Berkeley DB (Btree, version 9, native byte-order)
/var/lib/rpm/Conflictname: Berkeley DB (Btree, version 9, native byte-order)
/var/lib/rpm/Dirnames: Berkeley DB (Btree, version 9, native byte-order)
/var/lib/rpm/Group: Berkeley DB (Btree, version 9, native byte-order)
/var/lib/rpm/Installtid: Berkeley DB (Btree, version 9, native byte-order)
/var/lib/rpm/Name: Berkeley DB (Btree, version 9, native byte-order)
/var/lib/rpm/Obsoletename: Berkeley DB (Btree, version 9, native byte-order)
/var/lib/rpm/Packages: Berkeley DB (Hash, version 9, native byte-order)
/var/lib/rpm/Providename: Berkeley DB (Btree, version 9, native byte-order)
/var/lib/rpm/Requirename: Berkeley DB (Btree, version 9, native byte-order)
/var/lib/rpm/Sha1header: Berkeley DB (Btree, version 9, native byte-order)
/var/lib/rpm/Sigmd5: Berkeley DB (Btree, version 9, native byte-order)
/var/lib/rpm/Triggername: Berkeley DB (Btree, version 9, native byte-order)
/var/lib/rpm/_db.001: Applesoft BASIC program data
/var/lib/rpm/_db.002: 386 pure executable not stripped
/var/lib/rpm/_db.003: 386 pure executable

[root@localhost ~]# rpm -qa
[root@localhost ~]#

5. 패키지 설치
vsftpd-3.0.2-28.el7.x86_64.rpm 의존성 에러가 발생되서 설치가 중단되었다.
[root@localhost ~]# rpm -Uvh vsftpd-3.0.2-28.el7.x86_64.rpm
경고: vsftpd-3.0.2-28.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
오류: Failed dependencies:
/bin/bash is needed by vsftpd-3.0.2-28.el7.x86_64
/bin/sh is needed by vsftpd-3.0.2-28.el7.x86_64
libc.so.6()(64bit) is needed by vsftpd-3.0.2-28.el7.x86_64
libc.so.6(GLIBC_2.14)(64bit) is needed by vsftpd-3.0.2-28.el7.x86_64
libc.so.6(GLIBC_2.15)(64bit) is needed by vsftpd-3.0.2-28.el7.x86_64
libc.so.6(GLIBC_2.2.5)(64bit) is needed by vsftpd-3.0.2-28.el7.x86_64
libc.so.6(GLIBC_2.3)(64bit) is needed by vsftpd-3.0.2-28.el7.x86_64
libc.so.6(GLIBC_2.3.4)(64bit) is needed by vsftpd-3.0.2-28.el7.x86_64
libc.so.6(GLIBC_2.4)(64bit) is needed by vsftpd-3.0.2-28.el7.x86_64
libc.so.6(GLIBC_2.7)(64bit) is needed by vsftpd-3.0.2-28.el7.x86_64
libcap.so.2()(64bit) is needed by vsftpd-3.0.2-28.el7.x86_64
libcrypto.so.10()(64bit) is needed by vsftpd-3.0.2-28.el7.x86_64
libcrypto.so.10(OPENSSL_1.0.1_EC)(64bit) is needed by vsftpd-3.0.2-28.el7.x86_64
libcrypto.so.10(libcrypto.so.10)(64bit) is needed by vsftpd-3.0.2-28.el7.x86_64
libdl.so.2()(64bit) is needed by vsftpd-3.0.2-28.el7.x86_64
libnsl.so.1()(64bit) is needed by vsftpd-3.0.2-28.el7.x86_64
libpam.so.0()(64bit) is needed by vsftpd-3.0.2-28.el7.x86_64
libpam.so.0(LIBPAM_1.0)(64bit) is needed by vsftpd-3.0.2-28.el7.x86_64
libssl.so.10()(64bit) is needed by vsftpd-3.0.2-28.el7.x86_64
libssl.so.10(libssl.so.10)(64bit) is needed by vsftpd-3.0.2-28.el7.x86_64
libwrap.so.0()(64bit) is needed by vsftpd-3.0.2-28.el7.x86_64
logrotate is needed by vsftpd-3.0.2-28.el7.x86_64
rtld(GNU_HASH) is needed by vsftpd-3.0.2-28.el7.x86_64

6. 강제 설치
--nodeps 옵션을 이용해서 패키지를 강제로 설치한다.
[root@localhost ~]# rpm -Uvh --nodeps vsftpd-3.0.2-28.el7.x86_64.rpm
[root@localhost ~]# rpm -Uvh mc-4.8.7-11.el7.x86_64.rpm --nodeps

7. 확인
설치된 모든 패키지 정보를 확인한다.
[root@localhost ~]# rpm -qa
mc-4.8.7-11.el7.x86_64
vsftpd-3.0.2-28.el7.x86_64

8. 패키지 삭제
설치된 패키지를 삭제한다.
[root@localhost ~]# rpm -e mc
[root@localhost ~]# rpm -e vsftpd
[root@localhost ~]# rpm -qa

9. rpm DB 복구
[root@localhost ~]# rm -rf /var/lib/rpm
[root@localhost ~]# mv rpm /var/lib/
[root@localhost ~]# rpm -qa | head
grub2-2.02-0.86.el7.centos.x86_64
grub2-common-2.02-0.86.el7.centos.noarch
openssh-server-7.4p1-21.el7.x86_64
setup-2.8.71-11.el7.noarch
NetworkManager-tui-1.18.8-1.el7.x86_64
basesystem-10.0-7.el7.centos.noarch
authconfig-6.2.8-30.el7.x86_64
ncurses-base-5.9-14.20130511.el7_4.noarch
postfix-2.10.1-9.el7.x86_64
tzdata-2020a-1.el7.noarch

실습> yum 명령어 알아보기

[root@localhost ~]# yum | head -40
You need to give some command
Loaded plugins: fastestmirror
Usage: yum [options] COMMAND

List of Commands:

check Check for problems in the rpmdb
check-update Check for available package updates
clean Remove cached data
deplist List a package's dependencies
distribution-synchronization Synchronize installed packages to the latest available versions
downgrade downgrade a package
erase Remove a package or packages from your system
fs Acts on the filesystem data of the host, mainly for removing docs/lanuages for minimal hosts.
fssnapshot Creates filesystem snapshots, or lists/deletes current snapshots.
groups Display, or use, the groups information
help Display a helpful usage message
history Display, or use, the transaction history
info Display details about a package or group of packages
install Install a package or packages on your system
list List a package or groups of packages
load-transaction load a saved transaction from filename
makecache Generate the metadata cache
provides Find what package provides the given value
reinstall reinstall a package
repo-pkgs Treat a repo. as a group of packages, so we can install/remove all of them
repolist Display the configured software repositories
search Search package details for the given string
shell Run an interactive yum shell
swap Simple way to swap packages, instead of using shell
update Update a package or packages on your system
update-minimal Works like upgrade, but goes to the 'newest' package match which fixes a problem that affects your system
updateinfo Acts on repository update information
upgrade Update packages taking obsoletes into account
version Display a version for the machine and/or available repos.

[root@localhost ~]# yum -y install mc
[root@localhost ~]# yum -y remove mc
[root@localhost ~]# rm -f /bin/ls
[root@localhost ~]# ls <-- 파일을 삭제했으므로 에러가 발생된다.
[root@localhost ~]# rpm -qf /bin/ls <-- rpm DB에서 패키지 정보를 확인한다.
[root@localhost ~]# yum -y install coreutils <-- 이미 설치된 패키지이므로 설치가 안된다.
[root@localhost ~]# yum -y reinstall coreutils <-- 재설치를 하면 패키지가 다시 설치된다.

실습> DVD 저장소 만들기

1. DVD 저장소 활성화

enabled를 활성화 시켜놓고 사용하는 경우
[root@localhost ~]# vi /etc/yum.repos.d/CentOS-Media.repo
[c7-media]
name=CentOS-$releasever - Media
baseurl=file:///media/CentOS/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

CentOS-Media.repo 에 있는 baseurl에 있는 디렉터리를 생성한다.
[root@localhost ~]# mkdir /media/CentOS

CD/DVD를 connect를 선택해서 연결한다.
[root@localhost ~]# mkdir /media/CentOS

[root@localhost ~]# mount -t iso9660 -o ro /dev/cdrom /media/CentOS/
[root@localhost ~]# df
:
:(생략)
/dev/sr0 996038 996038 0 100% /media/CentOS <--

--disablerepo=*: 모든 저장소를 비활성화 한다.
--enablerepo=c7-media: c7-media만 활성화 한다.
[root@localhost ~]# yum --disablerepo=* --enablerepo=c7-media repolist
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
repo id repo name status
c7-media CentOS-7 - Media 447
repolist: 447

[root@localhost ~]# rpm -e net-tools

모든 저장소를 비활성화 시키고 CD/DVD를 활성화한 후 net-tools 패키지를 설치한다.
[root@localhost ~]# yum -y --disablerepo=* --enablerepo=c7-media install net-tools

실습> MariaDB 설치하기

1. 기본 mariadb 설치

CentOS 7에서 mariadb를 설치하면 5.5.68 버전이 설치된다.
[root@localhost ~]# yum -y install mariadb mariadb-server
[root@localhost ~]# systemctl start mariadb
[root@localhost ~]# mysql
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 2
Server version: 5.5.68-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> quit

[root@localhost ~]# systemctl stop mariadb
[root@localhost ~]# yum -y remove mariadb mariadb-server
[root@localhost ~]# rm -rf /var/lib/mysql /etc/my.cnf.d /etc/my.cnf

2. 업데이트된 mariadb 설치

공식사이트: https://mariadb.org/
mariadb 버전에 맞는 저장소를 만든다.
저장소 만드는 방법은 mariadb 사이트에서 확인한다.
현재 최신 버전인 10.8을 설치하기로 한다.
[root@localhost ~]# vi /etc/yum.repos.d/MariaDB.repo
[root@localhost ~]# MariaDB 10.8 CentOS repository list - created 2022-07-01 01:25 UTC
[root@localhost ~]# https://mariadb.org/download/
[mariadb]
name = MariaDB
baseurl = https://ftp.harukasan.org/mariadb/yum/10.8/centos7-amd64
gpgkey=https://ftp.harukasan.org/mariadb/yum/RPM-GPG-KEY-MariaDB
gpgcheck=1

[root@localhost ~]# yum -y install MariaDB-server MariaDB-client
[root@localhost ~]# systemctl start mariadb
[root@localhost ~]# mysql
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 3
Server version: 10.8.3-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> quit

[root@localhost ~]# systemctl stop mariadb
[root@localhost ~]# yum remove MariaDB-server MariaDB-client

MariaDB-server MariaDB-client 패키지를 설치할 때 같이 설치된 패키지들이 안지워지면 수동으로 삭제한다.
[root@localhost ~]# yum -y remove MariaDB-common galera-4 libpmem lsof pcre2 socat
[root@localhost ~]# rm -rf /var/lib/mysql
[root@localhost ~]# rm -rf /etc/my.*

실습> 소스코드 컴파일 설치

소스컴파일 순서
1. 환경설정
-configure
2. 컴파일
-make
3. 설치
-make install

넷켓(netcat, nc)?
TCP/UDP 통신을 다양하게 실행해서 전송할 수 있는 프로그램

http://netcat.sourceforge.net/

[root@localhost ~]# yum -y install gcc

1. 소스코드 다운로드
소스코드를 다운로드 받는다.
[root@localhost ~]# wget --no-check-certificate http://sourceforge.net/projects/netcat/files/netcat/0.7.1/netcat-0.7.1.tar.gz
[root@localhost ~]# md5sum netcat-0.7.1.tar.gz
088def25efe04dcdd1f8369d8926ab34 netcat-0.7.1.tar.gz

2. 압축 해제
다운로드 받은 netcat 파일의 압축을 해제하고 그 디렉터리 안으로 들어간다.
[root@localhost ~]# tar xzf netcat-0.7.1.tar.gz
[root@localhost ~]# cd netcat-0.7.1

3. 환경설정 단계
[root@localhost ~]# ls
<-- Makefile이 없다.

[root@localhost ~]# ./configure --help

환경설정 단계로 여기서는 옵션없이 사용한다.
[root@localhost ~]# ./configure
[root@localhost ~]# ls
Makefile <-- Makefile이 생성되었다.

4. 컴파일 단계
make 명령어는 Makefile의 내용을 보고 컴파일을 한다.
Makefile은 configure에서 생성한다.
[root@localhost ~]# make
[root@localhost ~]# ls
Makefile ...(생략)
[root@localhost ~]# file src/netcat

5. 설치 단계
[root@localhost ~]# make install

설치가 잘 되었는지 확인한다.
[root@localhost ~]# ll /usr/local/bin/
합계 124
lrwxrwxrwx. 1 root root 6 5월 20 02:46 nc -> netcat
-rwxr-xr-x. 1 root root 126800 5월 20 02:46 netcat

6. 통신 연결
[root@localhost ~]# iptables -F
[root@localhost ~]# systemctl stop firewalld

[root@localhost ~]# rpm -q nc
nc 패키지가 설치되어 있지 않습니다

첫 번째 터미널에서 실행한다.
800번 포트를 오픈한다.
-l: listen
-v: verbose
-p: port number
[root@localhost ~]# nc -lvp 8000

두 번째 터미널에서 실행한다.
[root@localhost ~]# nc 127.0.0.1 8000

두 번째 터미널에서 Hello 메세지를 보내면 연결된 서버쪽으로 메세지가 전송된다.
[root@localhost ~]# nc 127.0.0.1 8000
Hello

첫 번째 터미널에서 Hello 메세지가 왔는지 확인한 것이다.
[root@localhost ~]# nc -lvp 8000
Hello

첫 번째 터미널에서 Hi 메세지를 보내면 연결된 클라이언트쪽으로 메세지가 전송된다.
[root@localhost ~]# nc -lvp 8000
Hello
Hi

두 번째 터미널에서 Hi 메세지가 왔는지 확인한 것이다.
[root@localhost ~]# nc 127.0.0.1 8000
Hello
Hi

📌 사용자와 그룹 📌

[root@localhost ~]# useradd -D
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes

[root@localhost ~]# grep -E '^UID_MIN|^GID_MIN' /etc/login.defs
UID_MIN 1000
GID_MIN 1000

1. user1 생성
[root@localhost ~]# useradd user1

2. user2 생성
[root@localhost ~]# useradd -u 2000 user2
[root@localhost ~]# tail -2 /etc/passwd
user1:x:1000:1000::/home/user1:/bin/bash
user2:x:2000:2000::/home/user2:/bin/bash

3. user3 생성
[root@localhost ~]# mkdir /home2
[root@localhost ~]# useradd -c 'test user' -d /home2/user3 user3
[root@localhost ~]# ls /home2
user3
[root@localhost ~]# tail -3 /etc/passwd
user1:x:1000:1000::/home/user1:/bin/bash
user2:x:2000:2000::/home/user2:/bin/bash
user3:x::2001:test user:/home2/user3:/bin/bash

4. user4 생성
[root@localhost ~]# grep 100 /etc/group
users:x:100:
user1:x:1000:
[root@localhost ~]# useradd -g users -s /bin/sh user4
[root@localhost ~]# tail -5 /etc/passwd
mysql:x:27:27:MariaDB Server:/var/lib/mysql:/sbin/nologin
user1:x:1000:1000::/home/user1:/bin/bash
user2:x:2000:2000::/home/user2:/bin/bash
user3:x:2001:2001:test user:/home2/user3:/bin/bash
user4:x:2002:100::/home/user4:/bin/sh

실습> usermod

/etc/passwd 정보를 변경하는 명령어

[root@localhost ~]# tail -5 /etc/passwd
mysql:x:27:27:MariaDB Server:/var/lib/mysql:/sbin/nologin
user1:x:1000:1000::/home/user1:/bin/bash
user2:x:2000:2000::/home/user2:/bin/bash
user3:x:2001:2001:test user:/home2/user3:/bin/bash
user4:x:2002:100::/home/user4:/bin/sh

                          ~~~~~~~  /bin/sh -> /bin/bash

[root@localhost ~]# usermod -s /bin/sh user4
[root@localhost ~]# tail -5 /etc/passwd
mysql:x:27:27:MariaDB Server:/var/lib/mysql:/sbin/nologin
user1:x:1000:1000::/home/user1:/bin/bash
user2:x:2000:2000::/home/user2:/bin/bash
user3:x:2001:2001:test user:/home2/user3:/bin/bash
user4:x:2002:100::/home/user4:/bin/sh

[root@localhost ~]# usermod -c 'Homepage User' user4

[root@localhost ~]# tail -5 /etc/passwd
mysql:x:27:27:MariaDB Server:/var/lib/mysql:/sbin/nologin
user1:x:1000:1000::/home/user1:/bin/bash
user2:x:2000:2000::/home/user2:/bin/bash
user3:x:2001:2001:test user:/home2/user3:/bin/bash
user4:x:2002:100:Homepage User:/home/user4:/bin/sh

             ~~~~~~~~~~~~~ '' -> 'Homepage User'

[root@localhost ~]# usermod -c '' user4

[root@localhost ~]# tail -5 /etc/passwd
mysql:x:27:27:MariaDB Server:/var/lib/mysql:/sbin/nologin
user1:x:1000:1000::/home/user1:/bin/bash
user2:x:2000:2000::/home/user2:/bin/bash
user3:x:2001:2001:test user:/home2/user3:/bin/bash
user4:x:2002:100::/home/user4:/bin/sh
~~ 'Homepage User' -> ''

실습> passwd 설정하기

자기 자신과 사용자의 비밀번호를 설정하는 명령어

[root@localhost ~]# passwd --help
[root@localhost ~]# grep user1 /etc/shadow
user1:!!:19354:0:99999:7:::
[root@localhost ~]# passwd user1
user1 사용자의 비밀 번호 변경 중
새 암호:
새 암호 재입력:
passwd: 모든 인증 토큰이 성공적으로 업데이트 되었습니다.
[root@localhost ~]# grep user1 /etc/shadow
user1:$6$8tgI2VnL$15RrjxD/f6Nw1XiJRQBvqT.XMlBxUrUtnm6GM2IBczsfpGmqKjButQj7AlXsG9R8FqmPaTp0zV7kx2/YO3ftQ0:19354:0:99999:7:::

-l 옵션: 사용자를 로그인하지 못하게 Lock을 설정한다.
-/etc/shadow 파일에 비밀번호 필드에 !! 를 추가한다.
[root@localhost ~]# useradd -l user1
useradd: 'user1' 사용자가 이미 있습니다
[root@localhost ~]# passwd -l user1
user1 사용자의 비밀 번호 잠금
passwd: 성공
[root@localhost ~]# grep user1 /etc/shadow
user1:!!$6$8tgI2VnL$15RrjxD/f6Nw1XiJRQBvqT.XMlBxUrUtnm6GM2IBczsfpGmqKjButQj7AlXsG9R8FqmPaTp0zV7kx2/YO3ftQ0:19354:0:99999:7:::

-u 옵션: 사용자를 로그인하게 Lock을 해제한다.
-/etc/shadow 파일에 비밀번호 필드에 !! 를 삭제한다.
[root@localhost ~]# useradd -l user1
[root@localhost ~]# passwd -u user1
user1 사용자의 비밀 번호 잠금 해제 중
passwd: 성공
[root@localhost ~]# grep user1 /etc/shadow
user1:$6$8tgI2VnL$15RrjxD/f6Nw1XiJRQBvqT.XMlBxUrUtnm6GM2IBczsfpGmqKjButQj7AlXsG9R8FqmPaTp0zV7kx2/YO3ftQ0:19354:0:99999:7:::

usermod 를 이용해서 Lock & UnLock을 설정한 예
-참고로 usermod로 설정하면 비밀번호 필드에 !(느낌표 1개만 추가된다.)
-passwd로 설정하면 비밀번호 필드에 !!(느낌표 2개가 추가된다.)
[root@localhost ~]# usermod -L user1
[root@localhost ~]# grep user1 /etc/shadow
user1:!$6$8tgI2VnL$15RrjxD/f6Nw1XiJRQBvqT.XMlBxUrUtnm6GM2IBczsfpGmqKjButQj7AlXsG9R8FqmPaTp0zV7kx2/YO3ftQ0:19354:0:99999:7:::
[root@localhost ~]# usermod -U user1
[root@localhost ~]# grep user1 /etc/shadow
user1:$6$8tgI2VnL$15RrjxD/f6Nw1XiJRQBvqT.XMlBxUrUtnm6GM2IBczsfpGmqKjButQj7AlXsG9R8FqmPaTp0zV7kx2/YO3ftQ0:19354:0:99999:7:::

vi로 열어서 편집을 할 수 있지만 비추!!!
정 vi로 편집하고 싶다면 vipw -s 를 사용한다.

실습> 계정 만료 설정하기

1. user1 사용자의 계정 확인
[root@localhost ~]# chage -l user1
마지막으로 암호를 바꾼 날 :12월 28, 2022
암호 만료 :안함
암호가 비활성화 기간 :안함
계정 만료 :안함
암호를 바꿀 수 있는 최소 날 수 : 0
암호를 바꿔야 하는 최대 날 수 : 99999
암호 만료 예고를 하는 날 수 : 7

[root@localhost ~]# grep user1 /etc/shadow
user1:$6$8tgI2VnL$15RrjxD/f6Nw1XiJRQBvqT.XMlBxUrUtnm6GM2IBczsfpGmqKjButQj7AlXsG9R8FqmPaTp0zV7kx2/YO3ftQ0:19354:0:99999:7:::

2. user1 사용자의 만료일 설정
[root@localhost ~]# chage -E 2022-12-31 user1
[root@localhost ~]# grep user1 /etc/shadow
user1:$6$8tgI2VnL$15RrjxD/f6Nw1XiJRQBvqT.XMlBxUrUtnm6GM2IBczsfpGmqKjButQj7AlXsG9R8FqmPaTp0zV7kx2/YO3ftQ0:19354:0:99999:7::19357:
[root@localhost ~]# chage -l user1
마지막으로 암호를 바꾼 날 :12월 28, 2022
암호 만료 :안함
암호가 비활성화 기간 :안함
계정 만료 :12월 31, 2022
암호를 바꿀 수 있는 최소 날 수 : 0
암호를 바꿔야 하는 최대 날 수 : 99999
암호 만료 예고를 하는 날 수 : 7

profile
정보보안 전문가

0개의 댓글