CentOS 7.6.1810 OS에

Mysql 5.7.25 비교적 신버전 소스 설치 진행.

기본조건 : OS Package Minimal + Development Tools + Wget 설치.  

컨피그 옵션에 Apache 관련이 들어갈 경우, Apache가 먼저 설치되어야 함.

( 보통 소스는 A M P 순서대로 설치 하더랍니다.... )  

cd /usr/local/src/


yum -y install cmake ncurses-devel

groupadd -g 400 mysql

useradd -u 400 -g 400 -d /usr/local/mysql -s /bin/false mysql

wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.25.tar.gz

tar zxvf mysql-5.7.25.tar.gz

cd mysql-5.7.25


cmake \

-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \

-DMYSQL_DATADIR=/usr/local/mysql/data \

-DENABLED_LOCAL_INFILE=1 \

-DWITH_INNOBASE_STORAGE_ENGINE=1 \

-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \

-DSYSCONFDIR=/etc \

-DDEFAULT_CHARSET=utf8 \

-DMYSQL_TCP_PORT=3306 \

-DWITH_EXTRA_CHARSETS=all \

-DDEFAULT_COLLATION=utf8_general_ci \

-DDOWNLOAD_BOOST=1 \

-DWITH_BOOST=/usr/include/boost


make -j 3                 

// CPU 코어가 많은경우 수량 적절히 조절해주면 약간의 속도 효과를 볼 수있음

make install


cd /usr/include/boost/boost_1_59_0

./bootstrap.sh

./b2 install


cd /usr/local/src/


echo "[client]

default-character-set = utf8

port = 3306

socket = /tmp/mysql.sock

default-character-set = utf8


[mysqld]

socket=/tmp/mysql.sock

datadir=/usr/local/mysql/data

basedir = /usr/local/mysql

#user = mysql

#bind-address = 0.0.0.0

#

skip-external-locking

key_buffer_size = 384M

max_allowed_packet = 1M

table_open_cache = 512

sort_buffer_size = 2M

read_buffer_size = 2M

read_rnd_buffer_size = 8M

myisam_sort_buffer_size = 64M

thread_cache_size = 8

query_cache_size = 32M


#dns query

skip-name-resolve


#connection

max_connections = 1000

max_connect_errors = 1000

wait_timeout= 60


#slow-queries

#slow_query_log = /usr/local/mysql/data/slow-queries.log

#long_query_time = 3

#log-slow-queries = /usr/local/mysql/data/mysql-slow-queries.log


##timestamp

explicit_defaults_for_timestamp


symbolic-links=0


### log

log-error=/usr/local/mysql/data/mysqld.log

pid-file=/tmp/mysqld.pid


###chracter

character-set-client-handshake=FALSE

init_connect = SET collation_connection = utf8_general_ci

init_connect = SET NAMES utf8

character-set-server = utf8

collation-server = utf8_general_ci


symbolic-links=0


##Password Policy

#validate_password_policy=LOW

#validate_password_policy=MEDIUM



### MyISAM Spectific options

default-storage-engine = myisam

key_buffer_size = 32M

bulk_insert_buffer_size = 64M

myisam_sort_buffer_size = 128M

myisam_max_sort_file_size = 10G

myisam_repair_threads = 1


### INNODB Spectific options

#default-storage-engine = InnoDB

#skip-innodb

#innodb_additional_mem_pool_size = 16M

#innodb_buffer_pool_size = 1024MB

#innodb_data_file_path = ibdata1:10M:autoextend

#innodb_write_io_threads = 8

#innodb_read_io_threads = 8

#innodb_thread_concurrency = 16

#innodb_flush_log_at_trx_commit = 1

#innodb_log_buffer_size = 8M

#innodb_log_file_size = 128M

#innodb_log_files_in_group = 3

#innodb_max_dirty_pages_pct = 90

#innodb_lock_wait_timeout = 120



[mysqldump]

default-character-set = utf8

max_allowed_packet = 16M


[mysql]

no-auto-rehash

default-character-set = utf8


[myisamchk]

key_buffer_size = 256M

sort_buffer_size = 256M

read_buffer = 2M

write_buffer = 2M" > /etc/my.cnf


cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld

chmod 700 /etc/init.d/mysqld


/usr/local/mysql/bin/mysql_install_db --user=mysql --datadir=/usr/local/mysql/data


chown -R mysql.mysql /usr/local/mysql

chmod 711 /usr/local/mysql

chmod 707 /usr/local/mysql/data

chmod 751 /usr/local/mysql/bin

chmod 750 /usr/local/mysql/bin/*

chmod 755 /usr/local/mysql/bin/mysql

chmod 755 /usr/local/mysql/bin/mysqldump


echo "export PATH=$PATH:$HOME/bin:/usr/local/mysql/bin:/usr/local/php/bin:" >> /etc/profile

source /etc/profile


/etc/init.d/mysqld [ start | stop | restart ] 


초기패스워드 :  숨겨진 .mysql_secret 파일에 적혀있음.

mysql_secure_install 또는 DB 접속 후 패스워드 갱신해 주어야 합니다.


'Linux ( Cent OS ) > Apache' 카테고리의 다른 글

[설치] 1. Apache 2.4.39 Source Install  (0) 2019.04.18
[설치] 3. PHP 7.3.4 Source Install  (0) 2019.04.18
블로그 이미지

늙은M군

개인 저장공간입니다. 해당 일부 과정들을 공인 인터넷 환경에서 악성적으로 응용할 시 피해가 발생할 수 있으며, 그에 대해 책임은 사용자에게 있습니다!! 주의해주세요.

,


시험장에 들어가면 가장 먼저 해야 할 VM 로그인입니다.

로그인해서 yum repo 및 네트워크 설정을 해야 시험을 칠 수 있으니..

이거 못하면 돈만 40만원 내고 집에 가야합니다. 시험장까지 와서 못하실 분은 없겠지만


RHEL 7 의 루트 패스워드 초기화 방법은 하기 주소를 참조하면 되고

간단히 요약하겠습니다.

https://docs.fedoraproject.org/en-US/Fedora/23/html/System_Administrators_Guide/sec-Changing_and_Resetting_the_Root_Password.html


방법 1) rd.break + autolabel 

= grub2 화면에서 e 입력하여 커널옵션 진입 후
 linux16줄의 맨 뒤에 rd.break 입력 후 ctrl + x 로 부팅.


부팅 후 /sysroot 마운트

mount -o remount,rw /sysroot

chroot /sysroot

passwd root

touch ./autolabel

exit 2회 시 그대로 부팅 진행. 


방법 2) init=/bin/bash + chmod /etc/shadow + autolabel

= 커널옵션 linux16줄의 rhgb부터 뒷부분을 싹 지우고 

init=/bin/bash 입력 후 ctrl+x 를 입력하여 부팅. 


부팅 후 / 재 마운트. 

mount -o remount,rw /

passwd root 업데이트 ( 실패함. 성공 떠도 적용 안됩니다. ) 

chmod 640 /etc/shadow

passwd root

touch ./autolabel

exit

(셧다운 되므로, 강제 리부팅)


정상 부팅 후, 수정한 root 패스워드로 로그인. 

블로그 이미지

늙은M군

개인 저장공간입니다. 해당 일부 과정들을 공인 인터넷 환경에서 악성적으로 응용할 시 피해가 발생할 수 있으며, 그에 대해 책임은 사용자에게 있습니다!! 주의해주세요.

,


LVM 이야기입니다.

반드시 나오는 RHEL 7의 스토리지 실습 부분이고

생성 , 삭제 , 볼륨 증감 등의 기본적인 운영 커맨드를 숙지해야 합니다.

LVM 의 구조나 상세한 이해를 적는 공간은 아니고, 실전용 실습 용도로 설명합니다.

필수 용어

PV(Physical Volume): LVM 사용을 위해 설정한 최초의 raw 디스크. 

(/dev/sdb1, /dev/sdb2 등). fdisk /dev/sdb 파티셔닝 중 반드시 t 커맨드로 8e ID 부여해야 함. 

PE(Physical Extents): 블럭(PE) 단위로 제어할 때 사용. 

pvcrate에서 옵션으로 -l 을 사용. 

VG(Volume Group): PV 를 모아 하나의 논리적 그룹을 형성. 

( RAID 로 비유하면 물리디스크를 RAID 0,1 등의 Array 로 묶은 그룹 ) 

LV(Logical Volume): VG에서 분할. 실제 마운트 포인트로 사용되는 LVM 파티션. 당연한 이야기지만 VG 보다 클 수는 없다. 

간단 이해의 흐름 ) PV Drive 들을 모아서 VG 를 생성. VG에서 LV 를 분할. 

RAID 과정 생각해도 됩니다. PV가 물리디스크. VG가 Array. LV가 파티션. 


LVM 실습  

/dev/sdb   8GB 포맷되지 않은 디스크. 

1) LV name = LV01

2) VG name = VG01

3) LV size = 50PE  ( PE Size = 20MB ) 

4) LV 형식은 EXT3 

5) /mnt/lvm 에 mount하고, 부팅시 자동으로 마운트 되게 하시오.

6) LV 크기를 70PE 로 확장하시오.

7) LV 크기를 60PE 로 줄이시오.


1) LVM 사용할 디스크 확인 하기

= /dev/sdb   미 파티셔닝 상태로 8GB 디스크 입니다.  

root@TEST1:~# fdisk -l


Disk /dev/sda: 8589 MB, 8589934592 bytes, 16777216 sectors

Units = sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk label type: dos

Disk identifier: 0x0004769e


   Device Boot      Start         End      Blocks   Id  System

/dev/sda1   *        2048      616447      307200   83  Linux

/dev/sda2          616448     2713599     1048576   82  Linux swap / Solaris

/dev/sda3         2713600    16777215     7031808   83  Linux


Disk /dev/sdb: 8589 MB, 8589934592 bytes, 16777216 sectors

Units = sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk label type: dos

Disk identifier: 0x6682c1f3


   Device Boot      Start         End      Blocks   Id  System



2) n 눌러서 8GB 통으로 파티션 만들어 주고 Type 변경 

= PV 생성 준비 완료! ( 초급 학습이므로 단일디스크 사용합니다 ) 

= fdisk 종료하기 전 w 로 싱크하는거 잊지 마시구요. 


Command (m for help): t

Selected partition 1

Hex code (type L to list all codes): 8e

Changed type of partition 'Linux' to 'Linux LVM'

Command (m for help): p


Disk /dev/sdb: 8589 MB, 8589934592 bytes, 16777216 sectors

Units = sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk label type: dos

Disk identifier: 0x6682c1f3


   Device Boot      Start         End      Blocks   Id  System

/dev/sdb1            2048    16777215     8387584   8e  Linux LVM


PV 생성 완료!


3) PV 지정

= 단일디스크라 별다른 옵션 줄 게 없습니다. 만듭시다!

= 생성 후 확인은 pvs (간략 ) 와 pvdisplay ( 상세 )  두 가지 명령어가 있습니다. 

   vg, lv 도 똑같이 있으니, 활용해주세요. 

형식) pvcreate PV이름

root@TEST1:~# pvcreate /dev/sdb1

  Physical volume "/dev/sdb1" successfully created.


root@TEST1:~# pvs
  PV         VG Fmt  Attr PSize  PFree
  /dev/sdb1     lvm2 ---  <8.00g <8.00g

root@TEST1:~# pvdisplay
  "/dev/sdb1" is a new physical volume of "<8.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb1
  VG Name
  PV Size               <8.00 GiB
  Allocatable           NO
  PE Size               0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               H5G2FT-10IQ-VZwq-QZh7-gdnR-LhNN-6VMFgX

이제 LVM 용도로 사용할 디스크 하나가 준비가 완료되었습니다.


4) VG 생성

PV 의 용량만큼 VG를 생성하거나, 여러 PV모아 그룹화할 수도 있습니다.

지금은 PV 를 그대로 VG로 만듭니다. 

조건에 VG Name 이 있는데 VG부터는 Name 이 필요합니다. 

PE 조건도 있는데 --help 옵션으로 보시면 -s 옵션이 PE(=블럭)크기 지정입니다.

 형식) vgcreate 만들VG이름 PV ...  옵션..

 [ -s|--physicalextentsize Size[m|UNIT] ]

root@TEST1:~# vgcreate vg01 /dev/sdb1 -s 20M

  Volume group "vg01" successfully created

root@TEST1:~# vgs
  VG   #PV #LV #SN Attr   VSize  VFree
  vg01   1   0   0 wz--n- <7.99g <7.99g

root@TEST1:~# vgdisplay
  --- Volume group ---
  VG Name               vg01
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               <7.99 GiB
  PE Size               20.00 MiB
  Total PE              409
  Alloc PE / Size       0 / 0
  Free  PE / Size       409 / <7.99 GiB
  VG UUID               BwpXMG-oVag-8zgT-IBZg-Ctw2-3mR7-CvdDrp


5) LV 생성

이제 VG 에서 LV 만 파티션화해서 Mount 하면 실제 LVM 파티션 사용하는 겁니다.

만들 LV 용량을 지정해야 하는데 블럭단위니까 PE*수량 만큼 -l 옵션으로 지정해도 되고, 대문자 -L 10G 같은 식으로 직접 용량을 지정할 수도 있습니다.

위에도 적었지만 LV의 용량은 VG 를 넘어설 수 없습니다. 

형식) lvcreate -L|--size Size[m|UNIT] VG  ( -l 소문자일 경우 PE 수량 )

LV Name 이 조건에 있기 때문에 -n 만들LV이름  을 부가옵션으로 줍시다.


root@TEST1:~# lvcreate -l 50 vg01 -n lv01     PE 50개만큼의 용량

  Logical volume "lv01" created.


root@TEST1:~# lvs

  LV   VG   Attr       LSize    Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert

  lv01 vg01 -wi-a----- 1000.00m    PE가 20MB 이므로 * 50 = 1000M


root@TEST1:~# lvdisplay

  --- Logical volume ---

  LV Path                /dev/vg01/lv01             중요. 실제 Mount Point.

  LV Name                lv01

  VG Name                vg01

  LV UUID                TJgmq9-ihNU-TKba-wTJr-H9HZ-NjM0-DinsLm

  LV Write Access        read/write

  LV Creation host, time TEST1, 2019-04-17 17:20:05 +0900

  LV Status              available

  # open                 0

  LV Size                1000.00 MiB

  Current LE             50

  Segments               1

  Allocation             inherit

  Read ahead sectors     auto

  - currently set to     8192

  Block device           253:0



6) 마운트

LV Path 를 마운트해야 합니다 fdisk 로 보이는 mapper 는 마운트가 안됩니다 ;;

lvdisplay 는 아무리봐도 안질리니까 꼭 100번 보세요.

문제 조건에 /mnt/lvm 에 마운트하라고 했으니 디렉토리를 만들어 줍니다.

마운트 전에 조건에 있는 EXT3 형식으로 포맷해줘야 마운트 됩니다. 

root@TEST1:~# lvdisplay

  --- Logical volume ---

  LV Path                /dev/vg01/lv01

  LV Name                lv01

  VG Name                vg01

  LV UUID                TJgmq9-ihNU-TKba-wTJr-H9HZ-NjM0-DinsLm

  LV Write Access        read/write

  LV Creation host, time TEST1, 2019-04-17 17:20:05 +0900

  LV Status              available

  # open                 0

  LV Size                1000.00 MiB

  Current LE             50

  Segments               1

  Allocation             inherit

  Read ahead sectors     auto

  - currently set to     8192

  Block device           253:0


root@TEST1:~# mkdir -p /mnt/lvm

root@TEST1:~# mkfs.ext3 /dev/vg01/lv01

mke2fs 1.42.9 (28-Dec-2013)

Filesystem label=

OS type: Linux

Block size=4096 (log=2)

Fragment size=4096 (log=2)

Stride=0 blocks, Stripe width=0 blocks

64000 inodes, 256000 blocks

12800 blocks (5.00%) reserved for the super user

First data block=0

Maximum filesystem blocks=264241152

8 block groups

32768 blocks per group, 32768 fragments per group

8000 inodes per group

Superblock backups stored on blocks:

        32768, 98304, 163840, 229376


Allocating group tables: done

Writing inode tables: done

Creating journal (4096 blocks): done

Writing superblocks and filesystem accounting information: done


root@TEST1:~# mount /dev/vg01/lv01 /mnt/lvm

root@TEST1:~# df -h

Filesystem             Size  Used Avail Use% Mounted on

/dev/sda3              6.7G  4.3G  2.4G  65% /

devtmpfs               486M     0  486M   0% /dev

tmpfs                  496M     0  496M   0% /dev/shm

tmpfs                  496M  7.1M  489M   2% /run

tmpfs                  496M     0  496M   0% /sys/fs/cgroup

/dev/sda1              297M  146M  152M  49% /boot

tmpfs                  100M     0  100M   0% /run/user/0

/dev/mapper/vg01-lv01  969M  1.3M  918M   1% /mnt/lvm


마운트가 완료 되었습니다.


7) 부팅시 자동 마운트

LV_PATH 로 /etc/fstab 에 추가. ( 틀리면 부팅안되니까 꼭 재부팅해서 확인해보세요 ) 

root@TEST1:~# vi /etc/fstab


/dev/vg01/lv01                  /mnt/lvm                ext3    defaults        0 0

~


8) 용량을 70PE 로 확장

lvextend 라는 명령어가 있습니다.  create 때랑 똑같아요.

-l PE 수 만큼 입력해주면 됩니다

df 쳐보면 실시간 반영은 안되므로 파일시스템의 리사이징 명령을 내려줘야 합니다.

( EX : xfs 인 경우 xfs_grown LV_PATH 치면 즉시 반영.  ext 시스템은 resize2fs LV_PATH ) 

root@TEST1:~# lvextend -l 70 /dev/vg01/lv01

  Size of logical volume vg01/lv01 changed from 1000.00 MiB (50 extents) to <1.37 GiB (70 extents).

  Logical volume vg01/lv01 successfully resized.


root@TEST1:~# df -h

Filesystem             Size  Used Avail Use% Mounted on

/dev/sda3              6.7G  4.3G  2.4G  65% /

devtmpfs               486M     0  486M   0% /dev

tmpfs                  496M     0  496M   0% /dev/shm

tmpfs                  496M  7.1M  489M   2% /run

tmpfs                  496M     0  496M   0% /sys/fs/cgroup

/dev/sda1              297M  146M  152M  49% /boot

tmpfs                  100M     0  100M   0% /run/user/0

/dev/mapper/vg01-lv01  969M  1.3M  918M   1% /mnt/lvm

용량이 1기가에서 그대로 안늘어나있음 


root@TEST1:~# resize2fs /dev/vg01/lv01     // 파일시스템에서 리사이징 체크

resize2fs 1.42.9 (28-Dec-2013)

Filesystem at /dev/vg01/lv01 is mounted on /mnt/lvm; on-line resizing required

old_desc_blocks = 1, new_desc_blocks = 1

The filesystem on /dev/vg01/lv01 is now 358400 blocks long.


root@TEST1:~# df -h

Filesystem             Size  Used Avail Use% Mounted on

/dev/sda3              6.7G  4.3G  2.4G  65% /

devtmpfs               486M     0  486M   0% /dev

tmpfs                  496M     0  496M   0% /dev/shm

tmpfs                  496M  7.1M  489M   2% /run

tmpfs                  496M     0  496M   0% /sys/fs/cgroup

/dev/sda1              297M  146M  152M  49% /boot

tmpfs                  100M     0  100M   0% /run/user/0

/dev/mapper/vg01-lv01  1.4G  1.5M  1.3G   1% /mnt/lvm

정상적으로 늘어난 것 확인. 


9) 용량을 60PE 로 감소

TIP) XFS 파일시스템으로 되어있는 LV는 용량 축소가 안됩니다....

lvextend 다음에는 lvreduce 라는 명령이 있습니다. 줄여줍시다..

reduce 는 주의해야 할 점이 많습니다

1) 반드시 먼저 파일시스템에서 먼저 리사이징으로 줄여줍니다.

lv부터 줄이면 데이터 날아갑니다. 

( /etc/lvm/backup 이용한 복원이 가능하지만 RHCSA 의 영역이 아님 ) 

2) lvreduce 사용 전 반드시 umount 해야 합니다.

3) lvreduce 옵션에 -r ( resize ) 옵션을 꼭 주세요. 안주면 무조건 DATA Loss물어봄.

4) 용량 감소는 가급적 PE 보다 실용량 ( -L ) 으로 하는게 좋습니다. 


ex)

umount /dev/vg01/lv01 또는 /mnt/lvm

resize2fs -f /dev/vg01/lv01 1000M       파일 시스템 사이즈를 1000M 으로 변경

lvreduce -r -L -500M /dev/vg01/lv01    LVM 에서 실제로 변경. ( 1500 --> 1000 )



root@TEST1:~# lvreduce -r -l 60 /dev/vg01/lv01

  WARNING: Reducing active and open logical volume to 1.17 GiB.

  THIS MAY DESTROY YOUR DATA (filesystem etc.)

Do you really want to reduce vg01/lv01? [y/n]:

umount 안하면 저런 DATA DESTROY 라는 무시무시한 상황이 발생!! 

다만 시험에선 데이터 필요없으니까 그냥 해도 됩니다.  ㅎ



블로그 이미지

늙은M군

개인 저장공간입니다. 해당 일부 과정들을 공인 인터넷 환경에서 악성적으로 응용할 시 피해가 발생할 수 있으며, 그에 대해 책임은 사용자에게 있습니다!! 주의해주세요.

,


요즘 대부분 tar + 압축을 섞어서 .tar.gz 방식을 많이 씁니다만..

bzip2 과 star 방식도 간략하게만 알아보겠습니다.

( 시험에 나왔다는 소리 못들어봤습니다 ) 


1) tar로 묶고 gzip 으로 압축 

=  cvzf 옵션 자체를 그냥 달달 외워도 무방합니다. 


c = 만든다

v = 과정을 보여준다

z = gzip 사용 ( 압축 안 하려면 해당 옵션 빼면 됩니다 ) 

f = Archive 사용

root@TEST1:~# tar cvzf test.tar.gz ./a.txt ./b.txt

./a.txt

./b.txt


root@TEST1:~# ll
-rw-r--r--  1 root root      0 Apr 16 16:02 a.txt
-rw-r--r--  1 root root     38 Apr 16 16:05 b.txt
-rw-r--r--  1 root root    167 Apr 17 13:39 test.tar.gz


2) 임의의 경로에 압축 해제

= c 대신 x 옵션 = xvzf ,  xvjf   

C [PATH] : 압축을 풀 경로 지정

root@TEST1:~# tar xvzf test.tar.gz -C /home/test

./a.txt

./b.txt


root@TEST1:~# ls -l /home/test

total 4

-rw-r--r-- 1 root root  0 Apr 16 16:02 a.txt

-rw-r--r-- 1 root root 38 Apr 16 16:05 b.txt



3) tar 로 묶고 bzip2 를 이용한 압축 = cvjf 

z(gzip) 을 j(bzip2) 옵션으로 바꿔줌. 

root@TEST1:~# tar cvjf test.tar.bz2 ./a.txt ./b.txt

./a.txt

./b.txt


root@TEST1:~# ll

total 368

-rw-r--r--  1 root root    171 Apr 17 13:45 test.tar.bz2



4. star 를 이용한 archieve.

Description

Star is a very fast tar(1) like tape archiver with improved functionality.

라고 적혀는 있지만, tar가 편하고, 대용량, 고속 시대에서 약간의 성능이 범용성을 넘어설 수 있는지는 좀 부정적.

옵션은 기본적으로 동일하게 줄 수 있고, yum -y install star 로 별도 설치를 해줘야 합니다.




블로그 이미지

늙은M군

개인 저장공간입니다. 해당 일부 과정들을 공인 인터넷 환경에서 악성적으로 응용할 시 피해가 발생할 수 있으며, 그에 대해 책임은 사용자에게 있습니다!! 주의해주세요.

,




su 를 이용하여 쉘 내에서 사용자 전환이 자유롭게 가능합니다.

단 /bin/false 또는 /sbin/nologin 설정이 되어있는 사용자로의 변환은 안됩니다.


그리고 su root 랑 su - 랑 차이가 뭔지 궁금하신 분이 있는데

사용자 변환과, 사용자 환경변수까지 변환의 차이라고 대충 생각해두시면 됩니다

가령 su root 는 root 로 변환은 되지만 $home/.bash_profile 의 환경변수를 불러오지 않습니다.


하지만 su - 계정명 은 완벽하게 해당 계정 환경으로 이동합니다.

root@TEST1:~# su test

sh-4.2$ whoami

test

sh-4.2$

블로그 이미지

늙은M군

개인 저장공간입니다. 해당 일부 과정들을 공인 인터넷 환경에서 악성적으로 응용할 시 피해가 발생할 수 있으며, 그에 대해 책임은 사용자에게 있습니다!! 주의해주세요.

,




Key 를 이용한 SSH 무인증 접속은 별도의 페이지에서 다루도록 하고

금번 장은, SSH 명령어를 이용한 간단한 원격 접근방법입니다.



1) SSH Account@IP 를 이용한 접속

- root 가 sshd config 에서 Permit 허용이 되어있지 않다면 일반계정 필요.

[root@NAT ~]$ ssh root@192.168.0.3

root@192.168.0.3's password:

Last login: Wed Apr 17 09:48:36 2019 from 192.168.0.115


//////////////////////////////////////////////////////////////////////////////

RHCSA Exam Test Private Server #01

IP : 192.168.0.3

SUBNET : 255.255.255.0

GATEWAY : 192.168.0.2


SNAT

IP : 210.90.167.135 : 8822

GUI Graphics Server

yum install xorg* gnome*

startx or init 5.

//////////////////////////////////////////////////////////////////////////////

[root@192.168.0.3]$ 


2) /etc/hosts 에 Hostname 매칭이 되어있다면 hostname 으로도 접근 가능.

root@NAT:~# cat /etc/hosts

192.168.0.3 TEST1

root@NAT:~# ssh root@TEST1

The authenticity of host 'test1 (192.168.0.3)' can't be established.

ECDSA key fingerprint is SHA256:atlcg+nHLC2TVL3vDZhq9RvYEMI14NwjcHzTuLWMF9s.

ECDSA key fingerprint is MD5:71:a0:95:6a:1f:c3:f5:7f:87:63:64:ef:4c:e0:c9:f9.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added 'test1' (ECDSA) to the list of known hosts.

root@test1's password:

Last login: Wed Apr 17 09:50:10 2019 from gateway



3) -p 옵션을 사용하여 SSH Port 가 다른 경우 접근 가능.

root@Web1:~# ssh -p 8822 root@210.90.167.135

root@210.90.167.135's password:

Last failed login: Wed Apr 17 10:00:02 KST 2019 from 210.90.167.135 on ssh:notty

There was 1 failed login attempt since the last successful login.

Last login: Wed Apr 17 09:55:08 2019 from gateway


//////////////////////////////////////////////////////////////////////////////

RHCSA Exam Test Private Server #01


IP : 192.168.0.3

SUBNET : 255.255.255.0

GATEWAY : 192.168.0.2




블로그 이미지

늙은M군

개인 저장공간입니다. 해당 일부 과정들을 공인 인터넷 환경에서 악성적으로 응용할 시 피해가 발생할 수 있으며, 그에 대해 책임은 사용자에게 있습니다!! 주의해주세요.

,


grep ( 및 sed awk 등등 ) 을 사용한 정규표현식은

문자 및 데이터를 가공하는 시작과, 마지막 끝이라고 봐도 됩니다.

기초과정에서 복잡하게 생각할 필요는 없고

RHCSA 에서는 간단하게 Apache Log 가공하는 형식 정도만 짚고 넘어가도록 하겠습니다. 


[ AWK ] Apache access Log 에서 접속 IP 숫자별로 정렬하기

1) 해당 Log 출력

root@Web1:~# cat /usr/local/apache2/logs/access_log 

210.90.168.131 - - [14/Mar/2019:00:09:21 +0900] "GET / HTTP/1.1" 200 44

210.90.168.131 - - [14/Mar/2019:00:09:21 +0900] "GET /favicon.ico HTTP/1.1" 404 209

210.90.168.131 - - [14/Mar/2019:00:09:32 +0900] "GET /apm_ver.php HTTP/1.1" 200 20

14/Mar/2019:16:07:42 +0900] "GET /favicon.ico HTTP/1.1" 404 209

211.115.203.215 - - [14/Mar/2019:16:07:45 +0900] "GET /php_ver.php HTTP/1.1" 404 209

.
.

2) 첫번째 줄에 있는 IP 만 추출하기 

파이프로 awk '{ print $1 }' 추가

root@Web1:~# cat /usr/local/apache2/logs/access_log | awk '{ print $1 }' 

210.90.168.131

210.90.168.131

211.115.203.215

211.115.203.215

.
.

3) 동일 IP들의 수량으로 출력하기
 
파이프로 uniq -c 입력하여 동일패턴의 갯수화 및 높은 수량대로 정렬 sort -rn 

root@Web1:~# cat /usr/local/apache2/logs/access_log | awk '{ print $1 }' | uniq -c | sort -rn | head -n 5
    470 115.159.107.118
    468 111.230.52.108
    452 182.253.72.44
    452 124.156.176.170
    451 148.70.140.176

access.log 에 가장 많이 보이는 IP 5개가 수량으로 추출.


[grep] 

-i  : 대소문자 가리지 않음

-e : 확장된 정규 표현식 ( extended regex ) 사용 

-v : 매칭된 문자를 제외하고.


ex) /etc/passwd

root@Web1:~# grep "nologin" /etc/passwd

"nologin" 이 포함된 라인만 출력. 

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

adm:x:3:4:adm:/var/adm:/sbin/nologin

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

operator:x:11:0:operator:/root:/sbin/nologin

games:x:12:100:games:/usr/games:/sbin/nologin

ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

nobody:x:99:99:Nobody:/:/sbin/nologin

systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin

dbus:x:81:81:System message bus:/:/sbin/nologin

polkitd:x:999:998:User for polkitd:/:/sbin/nologin

sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin

postfix:x:89:89::/var/spool/postfix:/sbin/nologin

chrony:x:998:996::/var/lib/chrony:/sbin/nologin

tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin

apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin


root@Web1:~# grep -v "nologin" /etc/passwd

nologin 이 없는 라인만 출력.

root:x:0:0:root:/root:/bin/bash

sync:x:5:0:sync:/sbin:/bin/sync

shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

halt:x:7:0:halt:/sbin:/sbin/halt

myungin.baek:x:1000:1000::/home/myungin.baek:/bin/bash

mysql:x:1001:1001::/home/mysql:/bin/false

guest:x:1002:1002::/home/guest:/bin/bash



root@Web1:~# cat /usr/local/apache2/conf/httpd.conf | grep -v "#" | grep -v "^$"

# 들어가는 주석 라인 및 ^$ (시작과 끝이 같은 행. 즉 빈줄 ) 제거 출력.

ServerRoot "/usr/local/apache2"
Listen 80
LoadModule authn_file_module modules/mod_authn_file.so
.
.



블로그 이미지

늙은M군

개인 저장공간입니다. 해당 일부 과정들을 공인 인터넷 환경에서 악성적으로 응용할 시 피해가 발생할 수 있으며, 그에 대해 책임은 사용자에게 있습니다!! 주의해주세요.

,


역시 시험 실기문제로 나오는 것이 아닌,

리눅스의 기본 사용법이므로 아주 간략하게만 정리 하겠습니다.


입출력 리다이렉션은 표준 출력(모니터) 가 아닌, 

다른 방향으로도(파일, 명령어의 뒷부분, 휴지통 등.. )가리킬 수 있는 지정형식입니다.


ex 1 )   >            전방에 기입한 명령어의 결과를 뒤에 기입한 파일로 보낸다. 

기존의 파일이 존재할 시,  덮어쓰는 점 유의. 

[root@TEST1 ~]# df -Th > df.txt          

화면에 df -Th 를 출력하지 않고, 바로 df.txt 라는 파일로 보냄 

[root@TEST1 ~]# cat df.txt

Filesystem                     Type      Size  Used Avail Use% Mounted on

/dev/sda3                      xfs       6.7G  4.4G  2.4G  66% /

devtmpfs                       devtmpfs  486M     0  486M   0% /dev

tmpfs                          tmpfs     496M     0  496M   0% /dev/shm

tmpfs                          tmpfs     496M   20M  476M   5% /run

tmpfs                          tmpfs     496M     0  496M   0% /sys/fs/cgroup

/dev/mapper/datastore-database xfs       2.4G   33M  2.4G   2% /database

/dev/sda1                      xfs       297M  146M  152M  49% /boot

tmpfs                          tmpfs     100M   36K  100M   1% /run/user/0

/dev/sr0                       iso9660   918M  918M     0 100% /run/media/root/CentOS 7 x86_64



ex 2 )   >>   전방에 기입한 명령어의 결과를 후반의 파일에 추가. 

[root@TEST1 ~]# uname -a >> df.txt      

df.txt 내용뒤에 명령어 결과를 추가

[root@TEST1 ~]# cat df.txt

Filesystem                     Type      Size  Used Avail Use% Mounted on

/dev/sda3                      xfs       6.7G  4.4G  2.4G  66% /

devtmpfs                       devtmpfs  486M     0  486M   0% /dev

tmpfs                          tmpfs     496M     0  496M   0% /dev/shm

tmpfs                          tmpfs     496M   20M  476M   5% /run

tmpfs                          tmpfs     496M     0  496M   0% /sys/fs/cgroup

/dev/mapper/datastore-database xfs       2.4G   33M  2.4G   2% /database

/dev/sda1                      xfs       297M  146M  152M  49% /boot

tmpfs                          tmpfs     100M   36K  100M   1% /run/user/0

/dev/sr0                       iso9660   918M  918M     0 100% /run/media/root/CentOS 7 x86_64

Linux TEST1 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux                 uname -a 결과값이 df.txt 파일 뒤에 추가됌. 

 


ex 3 ) <  전방의 명령어에 후반의 내용을 추가.

[root@TEST1 ~]# cat < df.txt                 

df.txt 의 내용을 cat 명령어 뒤에 기입한 것과 같은 효과

Filesystem                     Type      Size  Used Avail Use% Mounted on

/dev/sda3                      xfs       6.7G  4.4G  2.4G  66% /

devtmpfs                       devtmpfs  486M     0  486M   0% /dev

tmpfs                          tmpfs     496M     0  496M   0% /dev/shm

tmpfs                          tmpfs     496M   20M  476M   5% /run

tmpfs                          tmpfs     496M     0  496M   0% /sys/fs/cgroup

/dev/mapper/datastore-database xfs       2.4G   33M  2.4G   2% /database

/dev/sda1                      xfs       297M  146M  152M  49% /boot

tmpfs                          tmpfs     100M   36K  100M   1% /run/user/0

/dev/sr0                       iso9660   918M  918M     0 100% /run/media/root/CentOS 7 x86_64

Linux TEST1 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

 

 


파이프 ( | )  

[root@TEST1 ~]# cat df.txt  | grep -i G

df.txt 의 내용 중 "G"가 포함된 라인만을 출력. 

/dev/sda3                      xfs       6.7G  4.4G  2.4G  66% /

tmpfs                          tmpfs     496M     0  496M   0% /sys/fs/cgroup

/dev/mapper/datastore-database xfs       2.4G   33M  2.4G   2% /database

Linux TEST1 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux


 

 


파일 디스크립터 ( 2> ) 

0 : 키보드  1 : 모니터 표준 출력  2 : 모니터 표준 (에러) 출력 의 의미로 사용합니다. 

파일 리다이렉션에서 가령 df -Th > df.txt 로 하면, 파일 저장만 되고 아무 표시도 안 되는데 2>&1 구문을 추가하면 에러 발생시에도, 저장 및 모니터로 출력 하라는 표현이 됩니다.

다양한 방법이 가능하며 쉘 스크립팅에서 출력 용도로 유용하게 사용할 수 있습니다.  

[root@TEST1 ~]# dffa > dd.txt 2>&1

dffa 라는 명령어 실행 결과를 dd.txt 에 기록하라는 의미지만, 2>&1 없을시 

해당 출력이 error 일 경우 모니터에 출력만 하고 dd.txt에 아무 기록이 되지 않음. 

2>&1 일 경우 해당 에러값을 그대로 리다이렉션 합니다. 

[root@TEST1 ~]# cat dd.txt

bash: dffa: command not found


 


블로그 이미지

늙은M군

개인 저장공간입니다. 해당 일부 과정들을 공인 인터넷 환경에서 악성적으로 응용할 시 피해가 발생할 수 있으며, 그에 대해 책임은 사용자에게 있습니다!! 주의해주세요.

,


시험장에서는 VM 던져주니까 별도의 설명은 필요하지 않을 것 같습니다.

혹여 Shell 변경이 궁금하신 분은


chsh 명령어 하나 알면 되겠네요.

/etc/passwd 에서 유저의 shell 을 직접 수정해도 동일한 결과입니다.

root@TEST1:/# chsh -l           사용가능한 shell 종류 리스트 나열 

/bin/sh

/bin/bash

/usr/bin/sh

/usr/bin/bash 



root@TEST1:/# chsh test               test 유저의 기본 shell 변경

Changing shell for test.

New shell [/bin/bash]: /bin/sh

Shell changed.


root@TEST1:/# cat /etc/passwd | grep test

test:x:1000:1000:test:/home/test:/bin/sh


root@TEST1:/# su test                         test 유저로 로그인.

sh-4.2$ 



블로그 이미지

늙은M군

개인 저장공간입니다. 해당 일부 과정들을 공인 인터넷 환경에서 악성적으로 응용할 시 피해가 발생할 수 있으며, 그에 대해 책임은 사용자에게 있습니다!! 주의해주세요.

,

RHCSA는 RedHat 에서 주관하는 RHEL 초급 자격증에 해당합니다.


등록은 하기의 주소에서 하거나 ( 등록하면 보통 노브레이크에서 시험을 봅니다. ) 

솔XXX , ITXX 같은 공인 시험센터에서 교육+시험을 동시에 할 수 있습니다. 

(공식 시험일정과 다른 경우 있습니다 ) 

[ Redhat 링크 바로가기



RHEL ( CentOS 로 해도 무방 합니다 ) 7.x 기준으로 트레이닝하면 됩니다.  

시험 도중에는 외부 인터넷이 되지 않으므로 man 명령을 적극 활용해야 합니다. 

과정이 필요한 부분은 별도의 링크 포스팅으로.

그외에는 필요 명령어 위주로 정리합니다. 

RHCSA 시험 대비를 위한 학습 포인트

Red Hat은 목표를 추가, 수정 또는 제거할 권리가 있습니다. 그러한 변경이 있을 경우, 이 문서의 개정을 통해 사전에 공지됩니다.

RHCSA 시험 응시자는 그 어떤 도움 없이 크게 세 가지 범주로 구분한 다음 사항을 수행할 수 있어야 합니다.

기본적인 툴 이해 및 사용 ( 시험에 안나옴 ㅡㅡ

참고: Red Hat은 응시자가 이 시험의 목표를 충족하는 능력을 보유하고 있는지를 평가하기 위한 목적으로 Red Hat Enterprise Linux에 포함되지 않은 애플리케이션을 이 시험에 사용할 수도 있습니다.

실행 시스템 운영 ( 여기부턴 중요합니다
  • 정상적으로 시스템 부팅, 재부팅 및 종료
  • 시스템을 다른 대상에서 직접 부팅
  • 시스템에 액세스하기 위해 부팅 프로세스 인터럽트
  • CPU/메모리 집약적인 프로세스를 파악하고 renice를 통해 프로세스 우선 순위를 수정하고 프로세스 종료
  • 시스템 로그 파일 및 저널 검색 및 해석
  • 가상 시스템의 콘솔에 액세스
  • 가상 시스템 시작 및 중지
  • 네트워크 서비스 시작, 종료 및 상태 점검
  • 시스템 간에 안전하게 파일 전송
로컬 스토리지 구성
파일 시스템 생성 및 구성
  • vfat, ext4 및 xfs 파일 시스템을 생성, 마운트, 마운트 해제 및 사용
  • CIFS와 NFS 네트워크 파일 시스템을 마운트 및 마운트 해제
  • 기존 논리 볼륨 확장
  • 협업을 지원하도록 set-GID 디렉터리를 생성 및 구성
  • ACL(Access Control List) 생성 및 관리
  • 파일 권한 문제를 진단 및 수정
시스템 배포, 구성 및 유지 관리
  • 네트워킹 및 호스트명 분석을 정적 또는 동적으로 구성
  • at 및 cron을 사용하여 작업 스케줄링
  • 서비스 시작 및 중지, 부팅 시 자동으로 시작되도록 서비스 구성
  • 특정 대상 내로 자동 부팅하도록 시스템 구성
  • Red Hat Enterprise Linux 시스템을 가상 게스트로 설치
  • 부팅 시 가상 시스템을 실행하도록 시스템 구성
  • 부팅 시 자동으로 시작하도록 네트워크 구성
  • 시간 서비스 사용이 가능하도록 시스템 구성
  • Red Hat Network, 원격 리포지토리 또는 로컬 파일 시스템의 소프트웨어 패키지를 설치 및 업데이트
  • 커널 패키지를 적절하게 업데이트하여 시스템을 항상 부팅 가능하도록 유지
  • 시스템 부트로더 수정
사용자와 그룹 관리
  • 로컬 사용자 계정 생성, 삭제 및 수정
  • 로컬 사용자 계정을 위한 비밀번호 변경 및 비밀번호 기한설정 수정
  • 로컬 그룹과 그룹 멤버십 생성, 삭제 및 수정
  • 사용자와 그룹 정보에 대한 기존 인증 서비스를 사용하도록 시스템 구성
보안 관리
  • firewall-config, firewall-cmd 또는 iptables를 사용하여 방화벽 설정 구성
  • SSH에 대한 키 기반 인증 구성
  • SELinux에 대한 강제(enforcing) 및 허용(permissive) 모드 설정
  • SELinux 파일 및 프로세스 컨텍스트 목록화 및 파악
  • 기본 파일 컨텍스트 복구
  • 부울 설정을 사용하여 시스템 SELinux 설정 수정
  • 일상적인 SELinux 정책 위반을 진단 및 해결




블로그 이미지

늙은M군

개인 저장공간입니다. 해당 일부 과정들을 공인 인터넷 환경에서 악성적으로 응용할 시 피해가 발생할 수 있으며, 그에 대해 책임은 사용자에게 있습니다!! 주의해주세요.

,