우분투 버전 Ubuntu 22.04.1 LTS (GNU/Linux 5.15.0-52-generic x86_64)

기본적으로 X Window 가 설치되어 있는 상태에서 시작

주의
상용 서비스를 운영중인 또는 운영 예정인 서버에 GUI 환경을 설치하는 것은 매우 신중하시기 바랍니다.
미니멀 설치 외에 추가로 설치되는 많은 패키지들로 인한 보안 문제가 발생할 수 있으며, 그로 인한 잦은 업데이트 권고 및 업데이트 후 예상치 못한 상황으로 전개 될 수 있습니다.

 

0. 사용자를 root 로 전환 (sudo 명령을 사용하기 귀찮아서...)

myuser@myserver:~$ su -
Password: 
root@myserver:~# id
uid=0(root) gid=0(root) groups=0(root)
root@myserver:~#

 

1. xrdp 설치

root@myserver:~# apt-get install xrdp
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following packages were automatically installed and are no longer required:
  python3-cliapp python3-markdown python3-pygments python3-ttystatus
Use 'apt autoremove' to remove them.
The following additional packages will be installed:
  libfuse2 xorg xorgxrdp
Suggested packages:
  xorg-docs xfonts-100dpi xfonts-75dpi x11-xfs-utils guacamole
The following NEW packages will be installed:
  libfuse2 xorg xorgxrdp xrdp
0 upgraded, 4 newly installed, 0 to remove and 64 not upgraded.
Need to get 675 kB of archives.
After this operation, 3,764 kB of additional disk space will be used.
Do you want to continue? [Y/n] y
Get:1 http://archive.ubuntu.com/ubuntu jammy/universe amd64 libfuse2 amd64 2.9.9-5ubuntu3 [90.3 kB]
Get:2 http://archive.ubuntu.com/ubuntu jammy/universe amd64 xrdp amd64 0.9.17-2ubuntu2 [517 kB]
Get:3 http://archive.ubuntu.com/ubuntu jammy/main amd64 xorg amd64 1:7.7+23ubuntu2 [2,890 B]
Get:4 http://archive.ubuntu.com/ubuntu jammy/universe amd64 xorgxrdp amd64 1:0.2.17-1build1 [65.3 kB]
Fetched 675 kB in 3s (265 kB/s)    
Selecting previously unselected package libfuse2:amd64.
(Reading database ... 297274 files and directories currently installed.)
Preparing to unpack .../libfuse2_2.9.9-5ubuntu3_amd64.deb ...
Unpacking libfuse2:amd64 (2.9.9-5ubuntu3) ...
Selecting previously unselected package xrdp.
Preparing to unpack .../xrdp_0.9.17-2ubuntu2_amd64.deb ...
Unpacking xrdp (0.9.17-2ubuntu2) ...
Selecting previously unselected package xorg.
Preparing to unpack .../xorg_1%3a7.7+23ubuntu2_amd64.deb ...
Unpacking xorg (1:7.7+23ubuntu2) ...
Selecting previously unselected package xorgxrdp.
Preparing to unpack .../xorgxrdp_1%3a0.2.17-1build1_amd64.deb ...
Unpacking xorgxrdp (1:0.2.17-1build1) ...
Setting up libfuse2:amd64 (2.9.9-5ubuntu3) ...
Setting up xorg (1:7.7+23ubuntu2) ...
Setting up xorgxrdp (1:0.2.17-1build1) ...
Setting up xrdp (0.9.17-2ubuntu2) ...

Generating 2048 bit rsa key...

ssl_gen_key_xrdp1 ok

saving to /etc/xrdp/rsakeys.ini

Created symlink /etc/systemd/system/multi-user.target.wants/xrdp-sesman.service → /lib/systemd/system/xrdp-sesman.service.
Created symlink /etc/systemd/system/multi-user.target.wants/xrdp.service → /lib/systemd/system/xrdp.service.
Processing triggers for man-db (2.10.2-1) ...
Processing triggers for libc-bin (2.35-0ubuntu3.1) ...
Scanning processes...                                                                                                                                                                                                                                                                                                      
Scanning candidates...                                                                                                                                                                                                                                                                                                     
Scanning processor microcode...                                                                                                                                                                                                                                                                                            
Scanning linux images...                                                                                                                                                                                                                                                                                                   

The processor microcode seems to be up-to-date.

Restarting services...
 systemctl restart avahi-daemon.service colord.service packagekit.service polkit.service
Service restarts being deferred:
 /etc/needrestart/restart.d/dbus.service
 systemctl restart gdm3.service
 systemctl restart networkd-dispatcher.service
 systemctl restart unattended-upgrades.service
 systemctl restart user@1000.service

No containers need to be restarted.

No user sessions are running outdated binaries.

No VM guests are running outdated hypervisor (qemu) binaries on this host.
root@myserver:~

정상 실행 확인

root@mserver:~$ systemctl status xrdp
● xrdp.service - xrdp daemon
     Loaded: loaded (/lib/systemd/system/xrdp.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2022-11-29 10:43:05 KST; 12min ago
       Docs: man:xrdp(8)
             man:xrdp.ini(5)
    Process: 3608275 ExecStartPre=/bin/sh /usr/share/xrdp/socksetup (code=exited, status=0/SUCCESS)
    Process: 3608283 ExecStart=/usr/sbin/xrdp $XRDP_OPTIONS (code=exited, status=0/SUCCESS)
   Main PID: 3608284 (xrdp)
      Tasks: 2 (limit: 76917)
     Memory: 20.7M
        CPU: 4.682s
     CGroup: /system.slice/xrdp.service
             ├─3608284 /usr/sbin/xrdp
             └─3608350 /usr/sbin/xrdp

이상태에서 윈도우 원격데스크탑연결로 연결시 인증화면까지 진행되고 id / pw 입력 하면 윈도우가 종료된다.

구글링 구글링...

 

2. xrdp 유저, ssl-cert 그룹에 추가

root@myserver:~# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
... 생략...
xrdp:x:134:140::/run/xrdp:/usr/sbin/nologin
root@myserver:~# 
root@myserver:~# adduser xrdp ssl-cert
Adding user `xrdp' to group `ssl-cert' ...
Adding user xrdp to group ssl-cert
Done.
root@myserver:~#

 

3.  방화벽 허용 (내부방 172.30.*.*  에서 접속 가능하도록 방화벽 정책 추가)

root@myserver:~# ufw allow from 172.30.0.0/16 to any port 3389
Rules updated
root@myserver:~# ufw reload
Firewall not enabled (skipping reload)
root@myserver:~# ufw status
Status: inactive
root@myserver:~#

우분투 방화벽은 활성화 되어 있지 않았음 (-.,-a)

사실 인증 화면까지 나왔다는 것은 방화벽 문제는 아니었음을...

 

4. xfce4 인스톨

구글링 결과 기본 xrdp 만으로는 버그로 인해 원격데스크톱연결이 잘 안되는 것 같다.

ubuntu-desktop과 xfce4 추가 인스톨

서두에서 언급한 보안 및 업데이트 문제로 상용 서비스에 사용하는 서버는 ubuntu-desktop 설치에 신중하시기 바랍니다. 

root@myserver:~# apt install ubuntu-desktop
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
... 생략...
root@myserver:~# apt-get install xfce4 -y
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following packages were automatically installed and are no longer required:
  python3-cliapp python3-markdown python3-pygments python3-ttystatus
Use 'apt autoremove' to remove them.
The following additional packages will be installed:
  dbus-x11 desktop-base elementary-xfce-icon-theme exo-utils fonts-quicksand gir1.2-libxfce4util-1.0 gir1.2-xfconf-0 greybird-gtk-theme libexo-2-0 libexo-common libgarcon-1-0 libgarcon-common libgarcon-gtk3-1-0 libkeybinder-3.0-0 libthunarx-3-0 libtumbler-1-0 libxfce4panel-2.0-4 libxfce4ui-2-0 libxfce4ui-common
  libxfce4ui-utils libxfce4util-bin libxfce4util-common libxfce4util7 libxfconf-0-3 libxpresent1 pavucontrol tango-icon-theme thunar thunar-data thunar-volman tumbler tumbler-common xfce4-appfinder xfce4-helpers xfce4-notifyd xfce4-panel xfce4-pulseaudio-plugin xfce4-screensaver xfce4-session xfce4-settings
  xfconf xfdesktop4 xfdesktop4-data xfwm4 xiccd
Suggested packages:
  devhelp gnome-icon-theme kdelibs-data thunar-archive-plugin thunar-media-tags-plugin tumbler-plugins-extra xfce4-goodies xfce4-power-manager fortunes-mod
The following NEW packages will be installed:
  dbus-x11 desktop-base elementary-xfce-icon-theme exo-utils fonts-quicksand gir1.2-libxfce4util-1.0 gir1.2-xfconf-0 greybird-gtk-theme libexo-2-0 libexo-common libgarcon-1-0 libgarcon-common libgarcon-gtk3-1-0 libkeybinder-3.0-0 libthunarx-3-0 libtumbler-1-0 libxfce4panel-2.0-4 libxfce4ui-2-0 libxfce4ui-common
  libxfce4ui-utils libxfce4util-bin libxfce4util-common libxfce4util7 libxfconf-0-3 libxpresent1 pavucontrol tango-icon-theme thunar thunar-data thunar-volman tumbler tumbler-common xfce4 xfce4-appfinder xfce4-helpers xfce4-notifyd xfce4-panel xfce4-pulseaudio-plugin xfce4-screensaver xfce4-session
  xfce4-settings xfconf xfdesktop4 xfdesktop4-data xfwm4 xiccd
0 upgraded, 46 newly installed, 0 to remove and 64 not upgraded.
Need to get 18.3 MB of archives.
After this operation, 88.5 MB of additional disk space will be used.
... 생략 ...
root@myserver:~#

설정 파일 수정

root@overtake:~# vi /etc/xrdp/startwm.sh

#!/bin/sh
# xrdp X session start script (c) 2015, 2017, 2021 mirabilos
# published under The MirOS Licence

# Rely on /etc/pam.d/xrdp-sesman using pam_env to load both
# /etc/environment and /etc/default/locale to initialise the
# locale and the user environment properly.

if test -r /etc/profile; then
        . /etc/profile
fi
# 내용 추가
unset DBUS_SESSION_BUS_ADDRESS
unset XDG_RUNTIME_DIR

# 실행 명령 변경
#test -x /etc/X11/Xsession && exec /etc/X11/Xsession
#exec /bin/sh /etc/X11/Xsession
test -x /usr/bin/startxfce4 && exec /usr/bin/startxfce4
exec /bin/sh /usr/bin/startxfce4
~                                                                                                                                                                                                                                                                                                                          
~                                                                                                                                                                                                                                                                                                                          
~                                                                                                                                                                                                                                                                                                                          
~                                                                                                                                                                                                                                                                                                                          
~                                                                                                                                                                                                                                                                                                                          
~

xrdp 재시작

root@myserver:~# systemctl restart xrdp
root@myserver:~#

5. 원격데스크탑연결

원격데스트탑 연결 화면

 

XDRP 인증화면
Ubuntu 접속 화면

끝.

운영하는 시스템에 MySql 데이터를 crone tab을 이용하여 정기적으로 백업을 받는 설정을 하기로 했다.

MySql에서 제공하는 mysqldump 를 이용하여 매일 새벽 1시에 Full Dump를 해당 날짜의 이름으로 받아서 압축 하고 1주일 이상 지난 덤프파일은 삭제 하는 방식으로 스크립트를 만들었다.

mysqldump를 사용하기 위해  root 계정으로 진행 하였다.

 

/usr/local/backup/mysql/backup.sh 내용

#!/bin/bash 
echo "[$(date +%Y-%m-%d) $(date +%H:%M:%S)] start backup"
export backup_file_name="MySystem_db_backup_$(date +%Y%m%d)" echo "[$(date +%Y-%m-%d) $(date +%H:%M:%S)] start backup"
#echo ${backup_file_name} 
echo "[$(date +%Y-%m-%d) $(date +%H:%M:%S)] daily backup start dump : ${backup_file_name}"
/usr/bin/mysqldump -uDBUSERID -pDBUSERPW DBNAME > /usr/local/backup/mysql/${backup_file_name}.sql
echo "[$(date +%Y-%m-%d) $(date +%H:%M:%S)] daily backup compress : ${backup_file_name}.sql to ${backup_file_name}.sql.tar.gz"
/usr/bin/tar cvfpzR /usr/local/backup/mysql/${backup_file_name}.tar.gz /usr/local/backup/mysql/${backup_file_name}.sql 
echo "[$(date +%Y-%m-%d) $(date +%H:%M:%S)] daily backup delete dump : ${backup_file_name}.sql"
/usr/bin/rm /usr/local/backup/mysql/${backup_file_name}.sql
echo "[$(date +%Y-%m-%d) $(date +%H:%M:%S)] end backup successfully"

※ 각 명령의 수행 시간을 로그에 남기도록 추가 하였다. echo ...

위 스트립트는 실행하면 지정한 DBNAME에 해당하는 데이터베이스를 MySystem_db_backup_YYYYMMDD.sql 파일로 dump 받고 해당 파일을 tar.gz 파일로 압축 후 sql 파일을 삭제하는 명령을 순서대로 기술 한 것이다.

MySQL 계정과 비밀번호가 적혀 있으므로 다른 계정에서는 접근 못하도록 퍼미션 변경

[root@localhost mysql]# chmod 600 backup.sh

[root@localhost mysql]# ls -al backup.sh[root@localhost mysql]# ls -al backup.sh
-rw-------. 1 root root 382 10월 11  2018 backup.sh
[root@localhost mysql]#

 

이제 매일 7일 지난 백업 파일을 삭제하는 스크립트를 만들어 보자

/usr/local/backup/mysql/delete_backup.sh 내용

===================================================================

#!/bin/bash
/usr/bin/find /usr/local/backup/mysql -name '*.tar.gz' -mtime +7 -exec rm {} \;

===================================================================

위 스크립트는 백업 폴더에 *.tar.gz 에 해당하는 모든 파일 중 생성된지 7일이 지난 파일을 삭제하는 명령이다.

코맨드 라인에서 개별로 실행 했을 때 잘 시행 된다면 크론텝에 등록하자.

[root@localhost mysql]#crontab -e 

아래 내용을 입력하고 저장한다.

0 0 * * * /usr/local/backup/mysql/backup.sh >> /usr/local/backup/mysql/backup.log
0 1 * * * /usr/local/backup/mysql/delete_backup.sh >> /usr/local/backup/mysql/backup.log

위 내용은 매일 0시에 backup.sh 를 실행하고 STDOUT으로 출력되는 내용은  backup.log 파일에 추가

매일 1시에 최근 7일 이전에 생성된 backup 파일을 삭제하고 STDOUT으로 출력되는 내용은 backup.log 파일에 추가

크론텝에 잘 지정이 되었는지 확인

[root@localhost mysql]# crontab -l
0 0 * * * /usr/local/backup/mysql/backup.sh >> /usr/local/backup/mysql/backup.log
0 1 * * * /usr/local/backup/mysql/delete_backup.sh >> /usr/local/backup/mysql/backup.log
[root@localhost mysql]#

이후에 /usr/local/backup/mysql 폴더에

[root@localhost mysql]# ls -al 
합계 6888652 
drwxr-xr-x. 2 root root      4096 12월 23 01:00 . 
drwxr-xr-x. 3 root root        19  9월 18  2018 .. 
-rw-r--r--. 1 root root 878195635 12월 16 00:02 MYSystem_db_back_20191216.tar.gz 
-rw-r--r--. 1 root root 879246960 12월 17 00:02 MYSystem_db_back_20191217.tar.gz 
-rw-r--r--. 1 root root 880465270 12월 18 00:02 MYSystem_db_back_20191218.tar.gz 
-rw-r--r--. 1 root root 881659467 12월 19 00:02 MYSystem_db_back_20191219.tar.gz 
-rw-r--r--. 1 root root 882824252 12월 20 00:02 MYSystem_db_back_20191220.tar.gz 
-rw-r--r--. 1 root root 883832714 12월 21 00:02 MYSystem_db_back_20191221.tar.gz 
-rw-r--r--. 1 root root 883838930 12월 22 00:02 MYSystem_db_back_20191222.tar.gz 
-rw-r--r--. 1 root root 883857070 12월 23 00:02 MYSystem_db_back_20191223.tar.gz 
-rw-r--r--. 1 root root     28840 12월 23 00:00 backup.log 
-rw-------. 1 root root       382 10월 11  2018 backup.sh 
-rw-r--r-x. 1 root root        92 10월 11  2018 delete_backup.sh 
[root@localhost mysql]# 

이런 식으로 Dump파일이 압축되어 저장된다.

 

끝.

사소한 그룹웨어를 봐주고 있는 회사가 있는데 언젠가 접속을 해볼 수 없는 상황에서 서버가 다운되었다는 연락을 받았다.

강제로 전원을 내렸다 올려도 수동으로 톰켓을 실행 시켜주어야 한다.

언제나 서버가 재부팅이 필요 할 때에는 엔지니어가 콘솔에 붙어 있는 상황에서만 가능하다는 나의 고집 때문인 듯...

다행이 업무 시간이 지난 때여서 양해를 구하고 저녁에 집에 가서 접속해서 확인해 주고 서버를 살려 놓은 적이 있는데

여전히 불안하다...

한번 시간 내서 작업을 해봤는데 CentOS 7 로 오면서 자잘한 것들이 많이 바뀐 듯... 예전에 

예전에 하던 service 등록 하는 방식으로 잘 되지 않는다.

구글링을 좀 해보니 systemctl 등록 하는 방법이 나와서 작업하고 내용을 정리해본다.


0. 사전 준비
당연히 톰켓이 설치되어 있고 정상적으로 동작해야 한다.
나의 경우 /usr/local/tomcat7 경로에 설치를 했다.
Tomcat 실행 유저는 webservice 계정 이다
평소에 톰켓을 가동 할 때는
  /usr/local/tomcat7/bin/startup.sh
종료할 때는
  /usr/local/tomcat7/bin/shutdown.sh
문제 없이 잘 동작 해야 한다.

위 상황에 문제가 없다면 아래 내용에서 유저나 경로는 자신의 환경에 맞게 바꿔주면 됩니다.


1. tomcat.service  파일 생성
모든 작업은 root 권한으로 진행한다.
/usr/lib/systemd/system 디렉토리에 아래와 같은 내용으로 tomcat.service 파일을 생성한다.

[Unit]
Description=Apache Tomcat 7
After=network.target syslog.target

[Service]
Type=forking
User=webservice
Group=webservice

ExecStart=/usr/local/tomcat7/bin/startup.sh
ExecStop=/usr/local/tomcat7/bin/shutdown.sh

[Install]
WantedBy=multi-user.target

2. 데몬 재로드

$ systemctl daemon-reload


3. 시작서비스 등록

systemctl enable /usr/lib/systemd/system/tomcat.service


4. 테스트

$ systemctl start tomcat

Job for tomcat.service failed because the control process exited with error code. See "systemctl status tomcat.service" and "journalctl -xe" for details.

$

에러가 나면서 잘 되지 않는다.

내용을 읽어 보니 "$systemctl status tomcat.service" 으로 자세한 내용을 확인 할 수 있는 듯 하다

$ systemctl status tomcat.service

● tomcat.service - Apache Ttomcat 7

   Loaded: loaded (/usr/lib/systemd/system/tomcat.service; enabled; vendor preset: disabled)

   Active: failed (Result: exit-code) since 목 2018-11-15 00:22:12 KST; 44s ago

  Process: 2017 ExecStart=/usr/local/tomcat7/bin/startup.sh (code=exited, status=1/FAILURE)


11월 15 00:22:12 localhost.localdomain systemd[1]: Starting Apache Ttomcat 7...

11월 15 00:22:12 localhost.localdomain startup.sh[2017]: touch: cannot touch `/usr/local/tomcat7/logs/catalina.out': 허가 거부

11월 15 00:22:12 localhost.localdomain systemd[1]: tomcat.service: control process exited, code=exited status=1

11월 15 00:22:12 localhost.localdomain systemd[1]: Failed to start Apache Ttomcat 7.

11월 15 00:22:12 localhost.localdomain systemd[1]: Unit tomcat.service entered failed state.

11월 15 00:22:12 localhost.localdomain systemd[1]: tomcat.service failed.

아까 테스트 하느라 logs 디렉토리를 비우고 실수로 tomcat을 root 권한으로 실행하면서 catalina.out 파일이 root 소유로 생성된 듯...

/usr/local/tomcat7 아래 모든 파일의 오너쉽을 webservice:webservice로 변경
$ chown webservice:webservice /usr/local/tomcat7 -R
$ ls -alR /usr/local/tomcat7

다시 실행하니 에러 없이 잘 된다.

4. 재부팅 후 서비스 확인
재부팅

$ sync

$ sync

$ sync

$ reboot

부팅이 완료 된 후 서비스가 정상으로 올라왔는지 확인

$ ps -ef | grep tomcat

webserv+  1327     1 31 00:34 ?        00:00:18 /usr/bin/java -Djava.util.logging.config.file=/usr/local/tomcat7/conf/logging.properties -..

.... 생략 ... org.apache.catalina.startup.Bootstrap start

webserv+  1600  1569  0 00:35 pts/0    00:00:00 grep --color=auto tomcat

$

webservice 계정으로 잘 실행 되어 있다.

브라우저로 접속 역시 문제 없음


끝~


중요

본 작업은 서버 콘솔에서 작업하기를 권합니다. 만약 원격에서 하는경우 매우 신중하게 해야 합니다. SSH설정을 드랍하고 새로운 제한을 추가 한것을 적용했다가 IP나 문법이 잘못 적용된 경우 원격에서 접속이 불가능한 상태가 되어 버릴 수 있습니다. 결국 야밤에 택시타고 IDC로 달려가는 귀찮은 경험을 하고 싶지 않으면 매우 신중하게 하고 작업 후 반드시 외부 접속을 테스트 해보기를 권합니다.


이전 포스트에서도 언급 한 적 있지만 CentOS 최근 버전부터 기존 방화벽인 iptables를 좀 더 쉽게(?) 사용 할 수 있도록 개선한 firewalld 가 제공되고 있습니다.

(firewalld 방화벽에 대한 소개는 https://sepiros.tistory.com/7 에 잘 되어 있습니다.)


설정 파일을 xml 형태로 확인 가능하고 그 xml 파일을 직접 편집해서 룰을 추가 가능하며 기존 iptables  처럼 명령라인으로도 조작 가능합니다.


방화벽이 불편하다고 제대로 설정하지 않거나 서비스를 내려놓고 서비스를 한다면 머지않아 외부에서 침투해서 불순한 목적의 프로세스가 실행되어 엄청난 트래픽이 발생하고, 급기야 IDC 관제실로 부터 랜포트를 제거 한다는 신박한 연락을 받는 경험을 할 수도 있을것 입니다. Traffic Shared 회선을 사용하는 경우 같은 대역폭을 사용하는 타 업체에게 엄청난 민폐를 끼치고 끝나지만, 종량제를 사용하는 경우 트래픽 사용료 폭탄을 맞을 수도 있습니다.

그리고 한번 외부에 털린(?) 서버는 백프로 다음 접근을 위해 백도어가 설치되었다고 보는게 맞을 것이며, 상대도 최대한 들키지 않도록 백도어를 꽁꽁 숨겨놓아서 그것을 찾아서 깨끗이 제거하는 것은 결코 쉬운일이 아닙니다. 결국 꼭 필요한 소스만 백업받고 서버를 재설치 하는 경우를 많이 보아왔습니다.

이런 문제는 실제 서비스를 운영하고 있는 서버라면 엄청난 리스크이자 시스템 엔지니어에게는 크나큰 스트래스입니다. 그러므로 꼭 필요한 포트와 접근 가능한 IP를 지정 하도록 하는 습관을 들이도록 권합니다.


방화벽 설정에 대한 기본 지식은

https://www.lesstif.com/pages/viewpage.action?pageId=22053128

이곳을 참고 하도록 하고 여기서는 우리서버의 외부 접근을 모두 차단하고

1. http (80)는 모든 곳에서 접근 할 수 있도록

2. ssh(21), mysql(3306)은 내부망(192.168.0.*)과 특정 IP(xxx,xxx.xxx.xxx)에서만 접근 가능

두가지를 설정해 보겠습니다.

[root@localhost ~]# firewall-cmd --get-default-zone

public

[root@localhost ~]#

현재 우리 서버의 기본 방화벽 존은 public 으로 되어 있습니다.

영구(permanent) 등록된 서비스를 확인해 보겠습니다.

[root@localhost ~]# firewall-cmd --permanent --list-all --zone=public

public

  target: default

  icmp-block-inversion: no

  interfaces:

  sources:

  services: dhcpv6-client ssh

  ports:

  protocols:

  masquerade: no

  forward-ports:

  source-ports:

  icmp-blocks:

  rich rules:


[root@localhost ~]#

기본적으로 IPV6 DHCP 클라이언트와 SSH 가 허용되어 있습니다.

이것은 아래와 같이 xml 파일로도 확인 가능합니다.

[root@localhost ~]# cat /etc/firewalld/zones/public.xml

<?xml version="1.0" encoding="utf-8"?>

<zone>

  <short>Public</short>

  <description>For use in public areas. You do not trust the other computers on networks to not harm your computer...</description>

  <service name="dhcpv6-client"/>

  <service name="ssh"/>

</zone>

[root@localhost ~]#

DHCP 클라이언트는 그냥 두고 어디서나 제한 없이 SSH 접속 할 수 있도록 되어있는 것을 내부망(192.168.0.*) 특정 IP xxx.xxx.xxx.xxx에서만 접근 가능 하도록 변경하고 역시 같은 곳에서 mysql(3306)으로 연결 할 수 있도록 설정 해보겠습니다.

그리고 끝으로 어디서나 제한 없이 http로 접근 할 수 있도록 설정을 추가 하도록 설정 해보겠습니다.

[root@localhost ~]# firewall-cmd --permanent --zone=public --remove-service=ssh

success

[root@localhost ~]# firewall-cmd --permanent --zone=public --add-rich-rule="rule family='ipv4'  source address='192.168.0.0/24'  service name='ssh' accept"

success

[root@localhost ~]# firewall-cmd --permanent --zone=public --add-rich-rule="rule family='ipv4'  source address='xxx.xxx.xxx.xxx'  service name='ssh' accept"

success

[root@localhost ~]# firewall-cmd --permanent --zone=public --add-rich-rule="rule family='ipv4'  source address='192.168.0.0/24'  port protocol='tcp' port='3306' accept"

success

[root@localhost ~]# firewall-cmd --permanent --zone=public --add-rich-rule="rule family='ipv4'  source address='xxx.xxx.xxx.xxx'  port protocol='tcp' port='3306' accept"

success

[root@localhost ~]# firewall-cmd --permanent --zone=public --remove-service=http

설정이 제대로 되었는디 확인해 보겠습니다.

[root@localhost ~]# cat /etc/firewalld/zones/public.xml

<?xml version="1.0" encoding="utf-8"?>

<zone>

  <short>Public</short>

  <description>For use in public areas. You do not trust the other computers on networks to not harm your computer...</description>

  <service name="dhcpv6-client"/>

  <service name="http"/>

  <rule family="ipv4">

    <source address="192.168.0.0/24"/>

    <service name="ssh"/>

    <accept/>

  </rule>

  <rule family="ipv4">

    <source address="192.168.0.0/24"/>

    <port protocol="tcp" port="3306"/>

    <accept/>

  </rule>

  <rule family="ipv4">

    <source address="xxx.xxx.xxx.xxx"/>

    <service name="ssh"/>

    <accept/>

  </rule>

  <rule family="ipv4">

    <source address="xxx.xxx.xxx.xxx"/>

    <port protocol="tcp" port="3306"/>

    <accept/>

  </rule>

</zone>

[root@localhost ~]#

잘 적용 된것 같습니다.

이제 방화벽 정책에 반영하겠습니다.

[root@localhost ~]# firewall-cmd --reload

success

[root@localhost ~]# netstat -ntl

Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address           Foreign Address         State

tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN

tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN

tcp6       0      0 :::3306                 :::*                    LISTEN

tcp6       0      0 :::22                   :::*                    LISTEN

tcp6       0      0 ::1:25                  :::*                    LISTEN

[root@localhost ~]#


netstat 명령으로 포트 오픈 상태를 확인 할 수 있습니다. mysql 과 ssh 데몬이 실행 되고 있다면 위와 같은 결과가 나올 것입니다.

http (80)은 아직 포트를 listen 하고 있는 데몬이 없어서 활성화 되지 않았습니다.

접속 확인은 다른 SSH  창을 열고 접속 해보시고 잘 되었다면  MySQL 접속도 테스트 해보시면 됩니다.


여기까지 CentOS 7 minimal 설치 에 대한 포스팅을 마칩니다.



https://opensrc.tistory.com/191?category=475519현재 MySQL 8 버전이 올라와 있습니다. 작년 까지만 해도 5.x 대 였는데 어떻게 된 것인가... 싶었는데 아마도 5.8 버전 부터 MySQL 8 이라고 부르는 것 같습니다. 

MySQL이 Oracle에 인수되고나서 오픈소스 진영에서 동일한 클론으로 배포되던 Maria DB와도 5.6 후로는 완벽히 동일하다는 말이 사라진 것으로 보아 이후 버전은 소스코드가 별개로 가지 않나 싶은 생각이 드네요

아직은 MySQL 8버전에 대한 자료가 많지 않고 레퍼런스가 많지 않다고 판단되어 5.7버전을 선택하기로 했습니다.

실제로 설치 해보니 5.7버전도 시작부터 몇가지 기존 버전과 다른 점이 있어 몇번 삽질을 했습니다.

가장 문제가 된 점은 설치 root로 접속을 할 수 없는 점 이었습니다. rpm 패키지를 yum 으로 인스톨 하면서 비밀번호 설정하는 곳이 없는데 비밀번호를가 틀려서 접속 할 수가 없습니다.

공식문서(https://dev.mysql.com/doc/refman/5.7/en/linux-installation-yum-repo.html) 에 살펴보니 설치되면서 관리자 계정 root@localhost 이 생성되고 임시 비밀번호는 /var/log/mysqld.log 에 기록된다고 하네요.

설치 후 

shell> sudo grep 'temporary password' /var/log/mysqld.log

명령으로 확인 가능하다고 합니다.

이점 참고 해서 MySQL 5.7 버전을 설치 하고 관리자 계정의 비번을 원하는대로 변경 하도록 하겠습니다.

그리고 마지막으로 비밀번호를 분실 했을 경우 기존 버전에서  mysqld-safe --skip-grant-tables 명령르로 실행 후 접속해서 비번을 변경하던 방식을 mysqld-safe 명령이 사라진 5.7 버전에서는 어떻게 하는지 알아보았습니다.


가장 먼저 설치할 패키지의 주소를 확인합니다.

CentOS 7은 Red Hat Enterparise Linux 7  과 동일한 오픈 버전입니다.

https://dev.mysql.com/downloads/repo/yum/

로그인 하지 않은 상태에서 다운로드를 클릭하면 로그인 하라고 창이 먼저 나옵니다.

Oracle 계정이 없으신 분은 하나 만들어 두시면 두고 두고 쓸일이 있을 것이니 하나 생성하시길... 공짠데 뭐 ㅋ

로그인을 완료 하면 아래 처럼 다운로드 화면으로 자동으로 이동합니다. 크롬에서 검사를 눌려 보면 실제 파일의 경로가 보입니다

현재 Red Hat 7(CentOS 7)용 MySQL 5.7의 패키지 경로는 /get/mysql57-community-release-el7-11.noarch.rpm 입니다.

이것을 도메인과 합치면 https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm 가 됩니다.


이것을 로컬에 다운 받아서 ftp로 서버에 올려서 설치해도 되고, 서버에서 wget 명령으로 직접 다운받아서 해도 되고 패키지의 경로로 위 주소를 직접 지정해서 설치도 가능합니다.

이번에는 세번째 방법으로 설치 하도록 하겠습니다.

root 권한으로 실행합니다.

[root@localhost ~]# rpm -ivh https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm

[root@localhost ~]# yum -y install mysql-community-server

mysql-community-server 를 설치함으로써 의존성이 걸려있는 mysql-community-server, mysql-community-client, mysql-community-libs, mysql-community-common 네개의 패키지가 설치 됩니다.


요즘은 대부분 케릭터셋이 utf-8로 통일 되고 있는 추세 입니다.

혹시 나중에 문제가 될 수 있으니 /etc/my.cnf 에 한줄 추가 하도록 하겠습니다.

[mysqld]

collation-server = utf8_unicode_ci

character-set-server = utf8

... 생략


설치 완료 후 데몬을 실행하도록 하겠습니다.

[root@localhost ~]# systemctl start mysqld


로그인 하기 전에 mysql이 설치되면서 입력된 임시 비밀번호를 확인해야 한다.

[root@localhost ~]# grep 'temporary password' /var/log/mysqld.log

2018-02-13T14:49:45.720116Z 1 [Note] A temporary password is generated for root@localhost: tur++-dvf7tI

부여된 패스워드는 붉은 부분(실제로는 붉은 글씨가 아님)입니다.


임시 비번으로 로그인 해서 새로운 비밀번호를 부여하도록 하겠습니다.

[root@localhost ~]# mysql -u root -p

Enter password : tur++-dvf7tI

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 2

Server version: 5.7.21


Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.


Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.


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


mysql> use mysql

ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.


헐... 임시 비밀번호를 바꾸기 전에는 아무것도 할 수 없는 듯...


mysql> alter user 'root'@'localhost' identified by '새비밀번호';

Query OK, 0 rows affected (0.00 sec)


mysql> commit;

Query OK, 0 rows affected (0.00 sec)


mysql> quit

Bye



이제 비밀번호가 잘 바뀌었는지 확인 해보도록 하겠습니다.

[root@localhost download]# mysql -u root -p

Enter password:

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 3

Server version: 5.7.21 MySQL Community Server (GPL)


Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.


Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.


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


mysql> use mysql

Reading table information for completion of table and column names

You can turn off this feature to get a quicker startup with -A


Database changed

mysql> show tables;

+---------------------------+

| Tables_in_mysql           |

+---------------------------+

| columns_priv              |

| db                        |

| engine_cost               |

| event                     |

| func                      |

| general_log               |

| gtid_executed             |

| help_category             |

| help_keyword              |

| help_relation             |

| help_topic                |

| innodb_index_stats        |

| innodb_table_stats        |

| ndb_binlog_index          |

| plugin                    |

| proc                      |

| procs_priv                |

| proxies_priv              |

| server_cost               |

| servers                   |

| slave_master_info         |

| slave_relay_log_info      |

| slave_worker_info         |

| slow_log                  |

| tables_priv               |

| time_zone                 |

| time_zone_leap_second     |

| time_zone_name            |

| time_zone_transition      |

| time_zone_transition_type |

| user                      |

+---------------------------+

31 rows in set (0.00 sec)

mysql> quit

Bye


정상적으로 설치가 된것 같습니다.


끝으로 이전 버전에서 root 비밀번호를 분실 했을때 유용하게 이용되던 mysqld-safe 명령에 대해서 알아 보겠습니다.

MySQL 5.7버전을 설치 한 후에 저 명령을 아무리 찾아도 없었습니다. 구글링 끝에 

https://stackoverflow.com/questions/33510184/change-mysql-root-password-on-centos7

이런 내용의 글을 보았습니다.


간단히 요약해 보면

1. mysqld-safe  명령은 사라졌음

2. user 테이블의 구조가 바뀌었음

그래서 아래의 순서에 따라서 비밀번호를 바꿀 수 있습니다.

1. MySQL 서버 중지

[root@localhost ~]# systemctl stop mysqld

2. MySQL 환경변수 설정

[root@localhost ~]# systemctl set-environment MYSQLD_OPTS="--skip-grant-tables"

3. MySQL  서버 가동

[root@localhost ~]# systemctl start mysqld

4. 비번 없이  root 로그인

[root@localhost ~]# mysql -u root

5.  root 비밀번호 업데이트

mysql> UPDATE mysql.user SET authentication_string = PASSWORD('새비밀번호')

    -> WHERE User = 'root' AND Host = 'localhost';

mysql> FLUSH PRIVILEGES;

mysql> quit

6.  MySQL 중지

[root@localhost ~]# systemctl stop mysqld

7. MySQL 환경변수 초기화

[root@localhost ~]# systemctl unset-environment MYSQLD_OPTS

8. MySQL 서버 시작

[root@localhost ~]# systemctl start mysqld

9. 새 비밀번호로 로그인 확인

[root@localhost ~]# mysql -u root -p

참고로  user 테이블이 변경 된것은 user 테이블의 접근을 쿼리가 아닌 시스템 명령으로 하면 큰 차이는 없을 것 같습니다.

MySQL 홈페이지에서도 

alter user 'root'@'localhost' identified by '새비밀번호';

이런 형태를 권장 하는 것 같습니다.


이제 다음번에는 db를 생성하고 user 를 생성해서 공간을 할당해 보도록 하겠습니다.



MySQL DB 생성과 사용자 추가는 아래 링크의 [CentOS 7 minimal 설치] MySQL DB생성, User생성 편 를 참고 하세요

https://opensrc.tistory.com/191?category=475519

경고 : 이 페이지에 나오는 내용은 중요한 시스템 작업의 내용을 포함하고 있으므로 내용을 정확히 이해하지 못하고 작업 중 에러가 발생해서 시스템이 정상적으로 동작 하지 않을 경우 복구하는 방법까지 기술 하지 않고 있기 때문에 현재 운영중인 서버에 적용은 신중하게 선택하시기 바랍니다.

이 문서를 참고하여 작업 한 후 발생하는 문제에 대해서 본 문서의 작성자는 책임이 없음을 유의하시기 바랍니다.


CentOS 7 minimal 설치 후 확인해보니

[root@localhost ~]# df -h

Filesystem               Size  Used Avail Use% Mounted on

/dev/mapper/centos-root  50G  2.2G  1.9T   1% /

devtmpfs                 7.7G     0  7.7G   0% /dev

tmpfs                    7.7G     0  7.7G   0% /dev/shm

tmpfs                    7.7G  8.5M  7.7G   1% /run

tmpfs                    7.7G     0  7.7G   0% /sys/fs/cgroup

/dev/sda1               1014M  143M  872M  15% /boot

tmpfs                    1.6G     0  1.6G   0% /run/user/0

/dev/mapper/centos-home  1.8T  1G  1.8T   1% /

[root@localhost ~]# df -h

/ 에 약 50Gbyte 

/home 1.8Tbyte 가 할당되어 있습니다.


인스톨 할 때 조절 하는 화면을 주의 깊게 보지 못하고 그냥 깔았더니 이렇게 되었습니다.

https://blog.asamaru.net/2015/10/14/centos-7-minimal-install/

위 링크에 보면 설치 할 때 파티션 용량을 정해주는 내용이 있으니 참고 하시기 바랍니다.


실제 서버용으로 사용하려면 /usr~ /local~ /var 같은 디렉토리 들이 더 많이 사용되게 됩니다.

/home 디렉토리를 사용해도 되지만 보통 서비스용으로 사용하는 서버스에는 왠지 잘 사용하지 않게 되더군요.


디렉토리 마운트를 나누지 않고 / 로 몰아버리는 것도 방법 입니다.


검색해 보니 나랑 같은 문제로 이미 먼저 눈길을 걸어간 이가 있습니다

http://wincloud.link/pages/viewpage.action?pageId=1736706

그의 발자욱을 따르기로 했습니다.

링크의 예 중 첫 번째 방법은 /home에 할당된 크기를 조정 하다가 에러가 발생합니다.


두번째 방법 시도.

[root@localhost ~]# mv /home /home.back                                                 # home 디렉토리 내용을 백업

[root@localhost ~]# umount /home                                                           # home 디렉토리 마운트 해제

[root@localhost ~]# lvremove /dev/mapper/centos-home                               # home 파티션을 삭제

[root@localhost ~]# lvextend -r -l+100%FREE /dev/mapper/centos-root             # 남은 공간을 모두 루트 파티션에 할당

[root@localhost ~]# mv /home.back /home                                                 # 홈 디렉토리 내용을 복원 

[root@localhost ~]# vi /etc/fstab                                                               # 부팅시 에러 방지를 위해 /home 에 해당하는 라인을 주석처리

[root@localhost ~]# df -h

Filesystem               Size  Used Avail Use% Mounted on

/dev/mapper/centos-root  1.9T  2.2G  1.9T   1% /

devtmpfs                 7.7G     0  7.7G   0% /dev

tmpfs                    7.7G     0  7.7G   0% /dev/shm

tmpfs                    7.7G  8.5M  7.7G   1% /run

tmpfs                    7.7G     0  7.7G   0% /sys/fs/cgroup

/dev/sda1               1014M  143M  872M  15% /boot

tmpfs                    1.6G     0  1.6G   0% /run/user/0

[root@localhost ~]#

잘 재 할당 되었습니다.


한 가지 참고 할 것은 원작자의 글에 나온대로 mv 명령을 실행해서는 /home -> /home.back -> /home  이렇게 복원이 잘 되지 않는다.

이글 에서도 mv 명령은 파티션 재 할당 완료 후에 기억을 재조합 해서 편집한 명령에 불과 하므로 개념적인 참고만 하고 제대로 백업이 되었는지 복원후 제대로 복원이 되었는지 필히 확인하는 것이 좋겠습니다.


나보다 앞서 눈길을 걸어가고 뒤 따르는 이에게 이정표가 될 발자국을 남겨주신 winCloud님께 감사드립니다.



언제나 새버전의 OS를 접하는 것은 난감함의 연속인것 같습니다.

이것 저적 작업 하다 보면 보면 참고할 만한 자료가 없어 애먹는 경험이 많아서 최신버전 보다 한단계 낮은 버전을 선택 하곤 하는데도 했는데도 몇번의 시행착오를 격었습니다.

특히 MySQL 5.7 버전은 이전 버전과 몇가지 바뀌어서 약간 많은 애를 먹었습니다.


얼마전 지인으로 부터 윈도우+MSSQL에서 돌아가고 있는 스트럿츠 기반의 어플리케이션을 Linux  + MySQL  기반으로 옮겨 달라는 의뢰를 받았습니다.

서버를 납품하는 업체의 엔지니어에게 OS를 설치 해달라고 요청 한 후 몇일이 지나서 IP가 할당되었다고 계정과 암호를 받아 접속 해 보니 CentOS 7 64bit 버전을 풀 인스톨 해 놓은듯... 

에초에 모든게 세팅된 상황에서 소스와 DB 만 옮겨 주겠다고 신신당부하고 시작했는데... 결국엔 재설치를 위해 CentOS 7 64bit Minimal  iso를 USB에 부팅 이미지로 만들어 서버실에 방문하고야 말았습니다. ㅠㅠ v


CentOS 7 minimal  설치는 간단한 구글링 으로도 많이 나오니 참고 하시기 바랍니다.

(https://joungkyun.gitbooks.io/annyung3-installation-guide/content/chapter1.html)


네트워크 설정은 가능한 install 하면서 GUI화면에서 설정하는게 편합니다.

부팅되면 네트워크가 활성화 되어 있는지 먼저 확인 했습니다.

[root@localhost ~]# ping 8.8.8.8

PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.

64 bytes from 8.8.8.8: icmp_seq=1 ttl=41 time=56.3 ms

64 bytes from 8.8.8.8: icmp_seq=2 ttl=41 time=56.4 ms

64 bytes from 8.8.8.8: icmp_seq=3 ttl=41 time=55.0 ms

64 bytes from 8.8.8.8: icmp_seq=4 ttl=41 time=55.4 ms

^C

--- 8.8.8.8 ping statistics ---

4 packets transmitted, 4 received, 0% packet loss, time 3004ms

rtt min/avg/max/mdev = 55.082/55.832/56.425/0.633 ms

[root@localhost ~]#


네트웍이 정상적이지 않은경우 /etc/sysconfig/network-scripts/ifcfg-eth0 을 확인해 보시기 바랍니다. (ifcfg-eth0 명은 사용자의 네트워크 인터페이스 구성에 따라 다를 수 있습니다.)

많은 변수들이 있지만 중요한 것은 아래 네가지 정도 확인하시면 됩니다.

BOOTPROTO="static"

ONBOOT="yes"

IPADDR="192.168.0.240"

NETMASK="255.255.255.0"

GATEWAY="192.168.0.1"

DNS1="8.8.8.8"

제가 작업한 서버는 망을 분리해서 사설 IP를 사용하고 있습니다.


이제 몇가지 기본적인 utility 를 설치합니다.

[root@localhost ~]# yum -y install bind-utils wget elinks vim net-tools
[root@localhost ~]# yum -y install yum-utils sysstat system-config-firewall-tui
[root@localhost ~]# yum -y install man man-pages kernel-doc

이제 ifconfig로 네트워크 상태를 확인할 수 있습니다.


다음은 방화벽 설정

CentOS 7 부터는 iptables를 좀더 간단하게 사용할 수 있도록 새로운 firewalld 를 제공한다고 합니다.

자세한 내용은 구글링 해보면 많은 문서가 나오니 참고 하시고

/etc/firewalld/zones/public.xml 파일에 설정를 살펴보면 기본적으로   dhcpv6-client와 ssh만 허용되어 있습니다.

우선은 모든 외부 접속을 차단하고 내부망, 특정 사무실과 제가 작업할 장소에서만 SSD 접속이 가능하도록 설정하겠습니다.

/etc/firewalld/zones/public.xml 내용입니다.

<?xml version="1.0" encoding="utf-8"?>

<zone>

  <short>Public</short>

  <description>For use in public areas. You do not trust the other computers on ...</description>

  <service name="dhcpv6-client"/>

  <rule family="ipv4">

    <source address="192.168.0.0/24"/>

    <service name="ssh"/>

    <accept/>

  </rule>

  <rule family="ipv4">

    <source address="xxx.xxx.xxx.xxx"/>

    <service name="ssh"/>

    <accept/>

  </rule>

  <rule family="ipv4">

    <source address="yyy.yyy.yyy.yyy"/>

    <service name="ssh"/>

    <accept/>

  </rule>

</zone>

192.168.0.0/24 이렇게 대역(192.168.0.*)으로 룰을 추가 할 수 도 있고 xxx.xxx.xxx.xxx 단일 IP만 기술 하면 허용할 IP를 특정 할 수도 있습니다.

service name 으로 허용 할 수도 있고 port로도 허용할 수있습니다. 향후 필요에 따라 서비스 또는 포트를 추가 할 것입니다.

자세한 것은 [CentOS 7 minimal 설치 #4] 방화벽(firewalld) 설정 하기편을 참고하거나

 구글링 GO~ (https://www.lesstif.com/ws/네트웍-구성과-방화벽/firewalld)


설정을 변경 했으면 방화벽을 재시작 하여 설정을 반영합니다.

[root@localhost ~]# systemctl restart firewalld


이제 외부 접속 할 수 있는 ssh데몬을 설치 합니다.

[root@localhost ~]# yum -y install openssh-server openssh-clients

(SSH 데몬은 위에서  설치한 net-tools 패키지에 포함되어 있습니다.)



사용자 추가

[root@localhost ~]# groupadd -g 1000 dev <-- 사용자그룹 추가

[root@localhost ~]# cat /etc/group

root:x:0:

bin:x:1:

daemon:x:2:

... 생략 ...

dev:x:1000: <-- 새로 추가한 사용자 그룹

[root@localhost ~]# useradd -g 1000 -u 1000 webservice <-- 사용자 추가

[root@localhost ~]# passwd webservice <-- 생성한 사용자 비밀번호 설정

webservice 사용자의 비밀 번호 변경 중

새  암호:

새  암호 재입력:

passwd: 모든 인증 토큰이 성공적으로 업데이트 되었습니다.

[root@localhost ~]#


서비스 환경이 여러대의 머신이라면 가능하면 그룹아이디(gid)와 유저아이디(uid)를 동일하게 맞춰주는 것이 좋습니다.

시스템간에 파일을 이동하거나, 네트웍 스토리지등을 사용할 때 gid와 uid가 동일하면 추가로 오너쉽이나 퍼미션을 지정하지 않아도 됩니다.


root 권한 ssh 로그인 금지 설정

사용자들이 ssh를 이용해 root 권한으로 접근을 허용하는 경우 외부에서 리눅스의 취약점을 이용해 root 권한을 탈취하려고 시도하는 경우가 매우 많습니다.

조금 불편하더라도 root 권한은 콘솔에서만 접근하거나, ssh로 접근하는경우 다른 계정으로 로그인해서 Switch User (su -) 명령으로 권한을 획득해서 사용하는 것이 좋겠습니다.

[root@localhost ~]# vi /etc/ssh/sshd_config

... 생략 ...

#PermitRootLogin yes <-- 기존에 주석으로 되어 있던 것을 해제하고 yes => no 로 바꾼다.

PermitRootLogin no

... 생략 ...


자 이제 외부에서 접속 할 수 있는 준비는 완료 하였습니다.

디스크 확인

http://wikibook.co.kr/article/when-the-disk-is-full/

가장큰 디렉토리 추적하기

$ sudo du -ckx | sort -n > /tmp/duck-root



우리의 문제는 Mysql 로그가 70G 정도 쌓여 있었다...

http://theeye.pe.kr/archives/972


최근 30일간의 로그 삭제

PURGE MASTER LOGS BEFORE DATE_SUB(CURRENT_DATE, INTERVAL 30 DAY);

1. root 권한

2. /etc/sysconfig/i18n파일 편집

원본========================

LANG="en_US.UTF-8"

SYSFONT="latarcyrheb-sun16"

============================

수정========================

#LANG="en_US.UTF-8"

#SYSFONT="latarcyrheb-sun16"

LANG="ko_KR.eucKR"
SUPPORTED="en_US.iso885915:en_US:en:ko_KR.eucKR:ko_KR:ko"
SYSFONT="lat0-sun16"
SYSFONTACM="iso15"

============================

3. source /etc/sysconfig/i18n명령으로 설정적용

find . -name 'AhdPollDao.class' -exec ls -al {} \;

+ Recent posts