[ 서비스 관리]
CentOS 6이전 버전의 리눅스는 /etc/rc.d/init.d/ 디렉토리에 서비스 관리 스크립트가 존재했다.
하지만 CentOS 7부터는 서비스 관리 스크립트들은 몇몇 서비스를 제외하고 각 서비스 유닛(Unit)으로 변경되었다.
서비스 유닛은 .service 으로 끝나는 파일이며,  systemctl 에 의해 제어된다. 
예전 버전의 서비스를 제어하기 위한  service 명령어 와  systemctl 의 사용법을 비교하면 다음과 같다.





* systemctl은 <TAB>키를 사용한 자동완성 기능을 지능적으로 제공 한다. 예를 들면 systemctl start <TAB>키를 누르면 시작되지 않은 유닛들을 기준으로 자동완성 또는 유닛 리스트를 보여주고, systemctl stop <TAB>키를 누르면 시작된 유닛들을 기준으로 자동완성 또는 유닛 리스트를 보여준다.
* systemctl은 service와 달리 정해진 서비스 명령어외의 사용자 명령어는 제공하지 않는다. 예를 들면 Apache의 설정내역을 테스트하기 위한 configtest 등의 명령은 호환되지 않는다.
부팅 시 서비스 자동시작 여부를 설정하기 위해 사용하는 chkconfig와 systemctl의 명령을 비교해 보자.



[자동 시작 서비스 관리]------------------------------------------------------------------
시스템 부팅 시 자동 시작되는 서비스 리스트를 다음과 같이 확인해 보자.
  
~ ]# systemctl     list-unit-files    --type  service   |   grep enabled
abrt-ccpp.service                           enabled
abrt-oops.service                           enabled
abrt-vmcore.service                         enabled
abrt-xorg.service                           enabled
abrtd.service                               enabled
accounts-daemon.service                     enabled
atd.service                                 enabled
...
  
systemctl을 사용하여 서비스 유닛 중 활성화(enabled)된 서비스 유닛을 나열해 보았다. 각 서비스 유닛을 확인하여 비활성화(disable)로 변경하는 것이 보안 및 시스템 성능 면에서도 필요한 부분이다.
프린트 관련 서비스 cups를 시스템 부팅 시 비활성화 되도록 해보자.
 
 ~ ]# systemctl   disable   cups.service
rm '/etc/systemd/system/multi-user.target.wants/cups.path'
rm '/etc/systemd/system/sockets.target.wants/cups.socket'
rm '/etc/systemd/system/printer.target.wants/cups.service'
  
cups서비스를 비활성화 하면, 관련된 파일이 위와 같이 삭제된다.
다시 cups서비스를 활성화 시켜보자.
  
~ ]# systemctl   enable   cups.service
ln -s '/usr/lib/systemd/system/cups.service' '/etc/systemd/system/printer.target.wants/cups.service'
ln -s '/usr/lib/systemd/system/cups.socket' '/etc/systemd/system/sockets.target.wants/cups.socket'
ln -s '/usr/lib/systemd/system/cups.path' '/etc/systemd/system/multi-user.target.wants/cups.path'
  
cups서비스를 활성화 하면, 관련된 파일을 심볼릭 링크를 건다.


[서비스 시작/상태확인/재시작/종료] ---------------------------------------------------------
서비스를 시작, 재시작, 종료를 다음과 같이해 보도록 하자. 먼저 시작되지 않은 서비스를 조회해 보자.
  
~ ]# systemctl   list-units   --type   service   -a   |  grep   -w    inactive
abrt-vmcore.service           loaded inactive dead    Harvest vmcores for ABRT
alsa-restore.service          loaded inactive dead    Restore Sound Card State
alsa-store.service            loaded inactive dead    Store Sound Card State
...
  
systemctl을 사용하여 서비스 유닛 중 중지된 서비스를 나열해 보았다. 
정지된 서비스 중 파일 및 디렉토리 원격 동기화를 위해 사용하는 rsyncd 서비스를 시작시켜 보자.
 
 ~ ]# systemctl   start   rsyncd
 위와 같이 입력하면 rsyncd 서비스가 시작된 것이다.  서비스 상태를 확인해 보자.
  
]# systemctl status rsyncd
rsyncd.service - fast remote file copy program daemon
   Loaded: loaded (/usr/lib/systemd/system/rsyncd.service; disabled)
   Active: active (running) since 일 2015-04-12 14:00:20 KST; 48s ago
 Main PID: 6379 (rsync)
   CGroup: /system.slice/rsyncd.service
           └─6379 /usr/bin/rsync --daemon --no-detach
 4월 12 14:00:20 localhost.localdomain systemd[1]: Starting fast remote file copy program .....
 ...
 
systemctl의 status명령을 사용하여 위와 같이 서비스 상태를 확인하였다. 서비스에 대한 간단한 설명, 시스템 부팅 시 자동시작 유무, 서비스 데몬 시작일, PID, CGroup, 최근 로그를 확인할 수 있다.
서비스 재시작은 다음과 같이 입력한다.
 
~ ]# systemctl   restart   rsyncd

그리고 서비스를 종료하는 방법은 다음과 같다.
 
~ ]# systemctl stop rsyncd


[ Target(런레벨) 관리] ---------------------------------------------------------------------
CentOS 6이전 버전은 시스템 초기화를 위해 사용하는 0부터 6까지 런 레벨(run level)이 존재했다. 예를 들면 런 레벨 0은 종료, 런 레벨 3은 Text 모드, 런 레벨 5은 Xwindows를 사용한 GUI환경, 런 레벨 6은 리부팅으로 사용되었다. 하지만, CentOS 7에서 사용하는 systemd는 이 런 레벨을 타겟(target) 유닛으로 변경하였다. 기존 버전의 런 레벨과 systemd의 타겟 유닛은 다음 표와 같이 대응된다.


런 레벨 2,3,4는 동일하게 TUI 멀티유저 환경이다. 
예전에 제공하던 runlevel명령어와 telinit 명령어는 호환을 가지며 다음과 같이 대응된다.


현재 런 레벨을 확인하기 위해 다음 명령어를 입력한다.
~ ]# runlevel
N 5
 
예전방식의 런 레벨 5를 확인할 수 있다. systemctl을 사용하여 확인해 보자.
~ ]# systemctl   get-default
graphical.target
 
앞에서 정리한 표와 같이 런 레벨 5와 graphical.target은 동일한 것으로 볼 수 있다.

시스템의 기본 타겟을 변경해 보자.

~ ]# systemctl   set-default   multi-user.target
rm '/etc/systemd/system/default.target'
ln -s '/usr/lib/systemd/system/multi-user.target' '/etc/systemd/system/default.target'
  
systemctl set-default를 사용하여 multi-user 타겟으로 변경하였다. multi-user 타겟은 예전의 런 레벨 3이다. multi-user 타겟으로 전환해 보자.
 
 ~ ]# systemctl   isolate   multi-user.target
 
 systemctl isolate를 이용하여 multi-user 타겟으로 전환하였다.
변경된 런 레벨을 확인하기 위해 다음 명령어를 입력한다.
 
 ~ ]# runlevel
5 3
  
런 레벨 5에서 3으로 변경된 것을 확인할 수 있다.
systemctl을 사용하여 확인해 보자.
  
~ ]# systemctl get-default
multi-user.target
  
multi-user 타겟으로 변경된 것을 확인할 수 있다.



[기타 마무리 ] ---------------------------------------------------------------------
1. initd 에서  systemd 로 변경.
    - runlevel 확인을 위해  기존 /etc/inittab 을 열어보거나 runlevel 명령을 사용했으나 이제는
      systemctl  get-default  명령으로  확인해야 한다.   기존의 runlevel 3에 해당하던   
      /etc/rc.d/rc3.d 에  해당하던  정보가  /etc/systemd/system 으로 변경되어 실행되는 데몬들의
      항목을 확인할 수 있다.
                  [root@colt357-server etc]# runlevel
                   N 3     
                  [root@colt357-server system]# systemctl  get-default
                   multi-user.target  
             (*  ps,  runlevel 5 는  graphical.target  참조. )

2. runlevel 변경하기 
    -  /etc/systemd/system  경로의  심볼릭 링크로 걸려있는  default.target 으로 결려있는 대상을 
       변경하고자하는  target 으로 변경한다.
drwxr-xr-x. 2 root root   56  1월 11 16:09 basic.target.wants
lrwxrwxrwx. 1 root root   41  1월 11 16:09 dbus-org.fedoraproject.FirewallD1.service -> /usr/lib/systemd/system/firewalld.service
lrwxrwxrwx. 1 root root   46  1월 11 16:09 dbus-org.freedesktop.NetworkManager.service -> /usr/lib/systemd/system/NetworkManager.service
lrwxrwxrwx. 1 root root   57  1월 11 16:09 dbus-org.freedesktop.nm-dispatcher.service -> /usr/lib/systemd/system/NetworkManager-dispatcher.service
lrwxrwxrwx. 1 root root   37  1월 11 16:12 default.target -> /lib/systemd/system/multi-user.target
drwxr-xr-x. 2 root root   87  1월 11 16:09 default.target.wants
drwxr-xr-x. 2 root root   38  1월 11 16:09 dev-virtio\x2dports-org.qemu.guest_agent.0.device.wants
drwxr-xr-x. 2 root root   32  1월 11 16:09 getty.target.wants
drwxr-xr-x. 2 root root 4096  1월 11 16:12 multi-user.target.wants
drwxr-xr-x. 2 root root   31  1월 11 16:09 remote-fs.target.wants
drwxr-xr-x. 2 root root  115  1월 11 16:09 sockets.target.wants
drwxr-xr-x. 2 root root   26  1월 11 16:09 sssd.service.d
drwxr-xr-x. 2 root root  169  1월 11 16:09 sysinit.target.wants
drwxr-xr-x. 2 root root   44  1월 11 16:09 system-update.target.wants















[ 시간 /  날짜  설정 ]
1. 날짜와 시간을  모두 설정하기
   [root@vm-colt357 ~]# timedatectl  set-time "2017-01-13  14:15:35"

2. 날짜만 설정하기
   [root@vm-colt357 ~]# timedatectl  set-time "2017-01-13"

3. 시간만 설정하기
   [root@vm-colt357 ~]# timedatectl  set-time "14:15:35"

[ 시간대(Time zone) 변경 ]
1. 지원하는 시간대 확인하기
    시간대 정보가 너무 많아 파이프(|)와  grep 명령으로 Asia 또는  Seoul 지역만을 걸러낸다.
   [root@vm-colt357 ~]# timedatectl  list-timezones | grep Seoul
   Asia/Seoul

2. 리스트 중 변경하고자 하는 시간대를 다음과 같이 입력한다.
   [root@vm-colt357 ~]# timedatectl  set-timezone Asia/Segoul

[ RTC(하드웨어 시계) 시간 설정 ]
1. 하드웨어 시계의 시간을 설정하기 위해서는 다음과 같은 과정을 거쳐서 설정한다.
   [root@vm-colt357 ~]# timedatectl  set-local-rtc  yes
   [root@vm-colt357 ~]# timedatectl  set-time  "2017-01-13  14:15:35"
   [root@vm-colt357 ~]# timedatectl  
set-local-rtc  no
 -> 먼저, 시스템에서 하드웨어 시계를 사용하게 설정하고, 날짜와 시간을 설정 한 다음, 시스템에서 
      하드웨어 시계를 사용하지 않게 하는 것이다.  물론 시간을 맞우는 과정에서 ntpdate,  rdate  명령
      을 사요하여 동기화할 수 있다.
 -> RTC 타임 세팅은, 개인적으로 기존의 centos6 방식이 더 편하다.
     * 시스템 시간을 하드웨어 시간으로 설정.
           [root@vm-colt357 ~]#  hwclock -w
     * 하드웨어 시간을 시스템 시간으로 설정.
          [root@vm-colt357 ~]# hwclock -s



로케일(locale)은 사용자의 언어, 구가, 숫자 형식, 날짜/시간 형식, 시간대,  통화형식을 설정하고 있는 변수 모임이다. 이로케일은  RFC 3066에 정의되어 있다.
로케일의 설정에 따란  동일한 명령어의 결과가 다른 언어로 표시되기도 한다.

[root@vm-colt357 ~]# locale --help 
사용법: locale[옵션...] <이름> 
  혹은:  locale[옵션...] [-a|-m] 
로캘 관련 정보를 읽습니다. 

 시스템 정보: 
  -a, --all-locales          사용 가능한 로캘의 이름을  표시합니다 
  -m, --charmaps         사용 가능한 문자맵의 이름들을  출력합니다 

 출력 형식 수정: 
  -c, --category-name        사용 가능한 범주의 이름을 표시합니다 
  -k, --keyword-name         선택한 키워드의 이름을 표시합니다 
  -v, --verbose              더 많은 정보를 표시합니다 

  -?, --help                 이 도움말 리스트를 표시함 
      --usage                간략한 사용법 메시지를 표시함 
  -V, --version              프로그램 버전 표시

한국, 한국어, UTF-8 사용을 위한 기본 설정은 "ko_KR.UTF-8"이다.

     [root@vm-colt357 ~]# LANG=ko_KR.UTF-8   --> 기존  centos 6 에서의 설정 방법


centos 7  에서의 설정 방법.

     [root@vm-colt357 ~]# localectl    
     \   System Locale: LANG=ko_KR.UTF-8 
            VC Keymap: kr 
            X11 Layout: kr

    --> 로케일 및 키보드 관련 부분에도 새로운 명령어인 localectl 을 제공한다. 로케일 설정은 /etc/clcale.conf 에 저장
          되고,  centos 6 이하 버전에서 사용하던 /etc/sysconfig/i18n은 더 이상 찾아볼 수 없다.
  
 로케일 설정.
     [root@vm-colt357 ~]# localectl  set-locale  "LANG=ko_KR.UTF-8"



1. ip
    커널 2.4이후 리눅스 고급 네트워킹 기능을 사용하기 위한 유틸리티로 ip를 많이 사용한다. 
    ip는 iproute 패키지로 기본 제공된다.
    많은 기능들이 ip 유틸리티로 통합되었다.

[네트워크 연결 확인 : ip link]
[root@vm-colt357 /]# ip link 
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT qlen 1 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000 
    link/ether 00:0c:29:a3:5b:8c brd ff:ff:ff:ff:ff:ff


위와 같이 ip link 라고 입력하면 네트워크 연결상태를 알려준다. 여기서 중요한 것은 state UP이다. 네트워크에 연결되지 않았다면 state DOWN으로 나타난다.  여러 링크관련 고급 설정을 할 수 있는데 이 방법은 멘페이지(man ip-link)에서 확인할 수 있다.

[네트워크 연결 확인 : ip addr]
[root@vm-colt357 /]# ip -4 addr 
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1 
    inet 127.0.0.1/8 scope host lo 
       valid_lft forever preferred_lft forever 
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 
    inet 192.168.0.20/24 brd 192.168.0.255 scope global ens33 
       valid_lft forever preferred_lft forever


위 결과는 네트워크 인터페이스에 할당된 IP 주소와 서브넷마스크, 브로드케스트 IP, 연결상태를 한눈으로 볼수 있는 결과이다. “-4”옵션을 사용한 것은 IPv4에 해당되는 내용만 보기 위함이다. ifconfig 명령어로 확인 가능한 정보이지만 좀더 깔끔하게 보여준다. ip 고급설정을 위해 사용할 수 있는데 그 방법은 멘페이지(man ip-address)를 확인하길 바란다. 


2. ifconfig
    ifconfig는 현재 시스템에 장착되어 있는 네트워크 인터페이스를 설정하거나 확인하는 명령어이다. 서버가 통신을 하기 위해서는 네트워크 인터페이스(NIC, 흔히 랜카드)가 있어야 하는데, 이러한 네트워크 인터페이스의 네트워크 정보를 설정, 변경 및 확인하는 명령어가 ifconfig이다.

ifconfig로 확인 가능한 네트워크 인터페이스의 내용은 다음과 같다.

∙MAC 주소
∙eth0에 할당된 IP 주소
∙브로드케스트(BroadCast)
∙서브넷마스크(Subnet Mask)
∙MTU(Maximum Transfer Unit)
∙RX packets(부팅 후 현재까지 받은 패킷수)
∙TX packets(부팅 후 현재까지 보내진 패킷수)
∙Collisions
∙Interrupt 주소
∙현재 UP(사용가능) 되어 있는지 여부

3. netstat : 인터페이스 통계 및 기타 정보 확인
netstat는 현재 연결된 네트워크 연결과 라우팅 테이블, 인터페이스에 대한 통계, 마스커레이딩 연결, 멀티캐스팅 정보 등을 보여준다. 즉, netstat 명령으로 어떤 호스트(또는 서버)들과 어떤 서비스로 연결되어 있는지와 그 연결 상태는 어떠한가에 대한 정보들을 알 수 있다.

① 어떤 클라이언트와 연결되었는가?
② 어떤 서비스(www, ftp, mysql, ssh 등)로 연결되었는가?
③ 어떤 포트(port) 번호로 연결되어 있는가?(②의 서비스에 대한 포트 번호)
④ 연결상태(wait, listen, connect 등)는 어떠한가?
⑤ 네트워크 연결상태가 어떻게 되어 있는가?
⑥ 기본 게이트웨이의 설정이 제대로 되어 있는가?
⑦ route에서처럼 라우팅 경로는 어떠한가?

4. route : 라우팅 테이블 확인 및 설정
route는 라우팅 경로(다른 말로 “라우팅 테이블”)를 보거나 변경할 수 있도록 해주는 명령어이다. 주로 이더넷(Ethernet) 카드를 설정할 때 패킷들이 어떠한 경로로 외부로 나가야 하는지 알려주는 역할을 한다. 인터넷은 네트워크들이 게이트웨이를 통해 이리저리 연결되어 있는 커다랗고 복잡한 네트워크이다. 이러한 네트워크에서 지표가 되는 것은 오직 도메인 네임과 IP 주소 밖에는 없다. 따라서 호스트에 설정된 라우팅 테이블은 패킷들이 자유로이 이동할 수 있도록 한다. 

5. traceroute : 라우팅 경로 확인
어느 날 서버에 접속한 상태에서 다른 서버로 ssh 접속이 안 되는 것을 발견했다고 가정해 보자. 즉시 옆에 있는 166.104.50.152로 ping을 보내 보았으나 이것은 아무 문제가 없었다. 내부 네트워크가 잘 작동 중인데 외부로 연결이 안 된다면 외부로 연결된 어느 게이트웨이 중 하나가 잘못 됐을 가능성이 있다. 이를 확인해 보는 방법은 traceroute를 이용하는 것이다.
인터넷은 네트워크 하드웨어들이 게이트웨이를 통해서 서로 연결된 거대하고 복잡한 집합체이다. traceroute는 사용자가 원하는 호스트까지 패킷이 어떠한 경로로 전달이 되는지를 작은 ttl(time-to-live) 값과 돌아오는 'ICMP TIME_EXCEEDED' 응답을 통해 사용자에게 알려준다. 

6. tracepath : 경로 확인
tracepath는 패스를 가지고 있는 MTU를 통해서 목적 시스템까지의 경로를 알아내는 프로그램이다. 이 프로그램은 UDP 포트나 불규칙적으로(random) 몇몇의 다른 포트를 사용한다. 

7. ping : 원격 호스트 응답 테스트
컴퓨터의 네트워크가 정상적으로 동작중인지 확인해 볼 때 사용하는 도구이다. ping은 특정 호스트로 ICMP(Internet Control Message Protocol) 에코 메시지를 사용해서 원격 호스트가 다시 로컬 호스트로 응답하도록 한다.

8. arp : ARP 테이블 관리
arp는 “Address Resolution Protocol”의 약자로서 동일한 네트워크 내에 존재하는 호스트들의 IP 주소와 ethernet 주소(MAC 주소)를 확인하는 명령어이다. 즉, 특정 네트워크 내에 어떤 호스트들이 존재하는지를 확인할 수 있는 것이 바로 arp 명령어이다. arp는 이를 위해 리눅스의 /proc/net/arp에 기록된 ARP 관련 정보를 참조한다.

9. nslookup : 도메인 네임 서버 질의
nslookup은 인터넷 도메인 네임 서버에 사용자가 직접 도메인 이름을 질의할 수 있도록 해주는 프로그램이다. 이 프로그램을 통해 누구나 네임서버에 직접 질의하여 도메인 네임 서버가 가지고 있는 정보를 검색할 수 있는 것이다. 이를 통해 사용자는 도메인 네임 서버가 올바르게 설정되고 동작하고 있는지를 확인할 수 있다.

10. dig : 도메인 네임 서버 질의
dig(Domain Information Groper)는 지정한 DNS 서버의 설정 내용과 특정 도메인의 네임서버 설정 내용을 확인하는 명령이다. 즉, nslookup 명령과 거의 같은 역할을 한다. nslookup 명령과 host 명령과 마찬가지로 /etc/resolv.conf 파일에 정의되어 있는 네임서버를 기본 네임서버로 사용한다. 

11. host : 도메인 네임 서버 질
host는 도메인 네임 서버에서 도메인의 설정 정보를 찾기 위한 간단한 유틸리티이다. 이것은 보통 도메인 이름들을 IP 주소로 바꿔서 정보를 알려 주기 위해 사용된다. host 명령은 nslookup과 dig와 마찬가지로 /etc/resolv.conf 에 설정된 도메인 네임 서버를 기본 네임서버로 인식한다. 



[firewalld]
CentOS7부터 많은 부분이 통합되고 추상화 되었다. CentOS6까지 방화벽 설정파일을 변경하고 iptables 서비스를 재시작하여 방화벽 규칙을 설정하였다면, CentOS7은 방화벽 규칙을 관리하는 데몬(firewalld)가 작동되고 이 방화벽 데몬이 제공하는 DBUS API를 통해 방화벽을 제어한다. GUI환경에서는 firewall-config를 이용하여 방화벽설정을 할 수 있으며, CUI환경에서는 firewall-cmd를 이용하여 방화벽 설정을 할 수 있다. 방화벽을 제어하려는 별도 어플리케이션을 개발할 때도 filrewalld API를 사용하면 설정파일 변경에 따른 각 방화벽 관리 어플리케이션과의 충돌을 피할 수 있다. 
firewalld에서 사용되는 용어, GUI 프로그램인 firewall-config, CUI 프로그램인 firewall-cmd에 대해 알아보겠다.


[firewalld에서 사용되는 용어]
일반적인 서비스 오픈을 위해서는 앞에서 설명한 정도 방화벽 사용법을 알면 될 것이다. CentOS7에서 도입된 firewalld에 대해 자세히 보면 런타임, 영구적, 영역, 서비스등의 용어들이 사용되는 것을 알 수 있다.

① 설정 : 런타임(run time)
런타임(실행시간)에만 설정한다는 것이다. 즉, 설정 내역이 메모리에 상주되어 있어 적용은 되지만, Firewalld를 다시 불러오거나, 시스템을 재시작 하면 설정된 내역은 지워지게 된다. 

② 설정 : 영구적(permanent)
영구적으로 설정한다는 것이다. 즉, Firewalld를 다시 불러오는 경우 영구적으로 설정된 내역에서 불러오고, 시스템 재시작시 영구적 설정에서 불러와 방화벽을 설정하게 된다. 앞의 http, https 허용 예에서도 영구적 설정을 하였다. 런타임 설정내역을 저장할 수 있는 방법을 제공하지 않기 때문에 영구적 설정으로 관리하는 것이 효율적이다.

③ 영역(zone)
네트워크 연결 신뢰도에 따라 영역을 구분하여 사용할 수 있다. 기본 영역은 public이며 영역을 추가/편집/삭제(일부영역 편집/삭제 불가)할 수 있다. 이 영역을 활용하면 네트워크 상황에 따라 여러 가지 잘 정의된 방화벽룰을 효율적으로 사용할 수 있다. 예를 들면 일반적인 환경에서는 public영역을 초기 구축 단계에서 모든 접속을 허용해야 할 경우 trusted영역을, 시스템 운영중 외부접속 차단을 위해 work영역 또는 drop, block영역을 사용할 수 있다. 
기본적으로 정의된 영역에 대해 알아보자.





[참 고]
REJECT와 DROP
방화벽 설정에서 패킷을 거부(reject) 또는 폐기(drop)할 수 있다. 거부와 폐기의 차이는 다음과 같다.
REJECT(거부) : 패킷을 받으면 거부한다는 ICMP패킷을 보내게 된다. 기본은 port-unreachable이며 icmp-net-unreachable,   icmp-host-unreachable,   icmp-port-unreachable, icmp-proto-unreachable, icmp-net-prohibited, icmp-host-prohibited, icmp-admin-prohibited등을 선택해서 거부할 수 있다.
DROP(폐기) : 패킷을 받으면 아무런 응답을 하지 않고 버린다.

④ 서비스(service)
각 서비스별 정의된 프로토콜, 포트, 모듈, 목적지에 대해 정의가 된 서비스이다. 여기서 서비스는 /etc/service에 명시된 내용과는 조금 다르다. 
firewalld의 서비스는 /usr/lib/firewalld/services/*.xml 파일에 명시되어 있다. 여러 서비스 중 ftp 서비스 파일(ftp.xml) 내용을 살펴보자.

~]# cat /usr/lib/firewalld/services/ftp.xml
<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>FTP</short>
  <description>FTP is a protocol used for remote file transfer. If you plan to make your FTP server publicly available, enable this option. You need the vsftpd package installed for this option to be useful.</description>
  <port protocol="tcp" port="21"/>
  <module name="nf_conntrack_ftp"/>
</service>

위 내용을 보면, FTP 서비스에 대한 설명과 프로토콜(tcp), 포트(21)가 명시되어 있고, FTP passive 모드를 위해 사용하는 nf_conntrack_ftp 모듈이 설정되어 있다. FTP 서비스를 선택하게되면 nf_conntrack_ftp 모듈이 로드된다


[방화벽 CUI 설정 (firewall-cmd)]
firewalld의 CUI인터페이스인 firewall-cmd에 대해 알아보기 이전에 웹서버를 운영하기 위해 HTTP, HTTPS 포트를 허용하는 방법에 대해 알아보자.

터미널 창에서 다음과 같이 입력한다.

~]# firewall-cmd   --permanent   --add-service=http   --add-service=https
success
~]# firewall-cmd --reload
success
~]# firewall-cmd --list-all
public (default)
  interfaces:
  sources:
  services: dhcpv6-client http https ssh
  ports: 5900-5910/tcp
  masquerade: no
  forward-ports: 
  icmp-blocks: 
  rich rules:

firewall-cmd명령을 사용하여 위와 같이 룰을 추가할 수 있다. --permanent 옵션은 영구적인 설정을 의미하며 옵션을 주지 않으면 런타임 환경에서 적용되기 때문에 서버를 리부팅하면 룰이 없어진다. --add-service 옵션을 사용하여 오픈하고자 하는 서비스를 지정한다. 만약 이미 추가된 서비스를 제거하기 위해서는 --remove-service 옵션을 사용한다. 다음으로 --reload 옵션을 사용하여 영구적으로 설정된 룰을 런타임 환경에 적용시킨다. 적용이 완료된 후 --list-all 옵션으로 설정된 룰을 확인한다.

방화벽 오픈 여부를 위해 다른 리눅스 컴퓨터에서 다음과 같이 확인해 보자.

~]#  nmap 192.168.0.201 -p 443,80,22,25

Starting Nmap 5.21 ( http://nmap.org ) at 2015-03-24 19:57 KST
Nmap scan report for 192.168.0.201
Host is up (0.00041s latency).
PORT    STATE    SERVICE
22/tcp  open     ssh
25/tcp  filtered smtp
80/tcp  closed   http
443/tcp closed   https

Nmap done: 1 IP address (1 host up) scanned in 0.03 seconds

nmap명령어를 방화벽 설정 내역을 확인할 수 있다. 22/tcp(SSH)는 오픈된 것이 확인되고, 25/tcp(SMTP)는 filtered되었다. 웹서비스 포트 80/tcp(HTTP), 443/tcp(HTTPS)는 방화벽에서 차단된 것은 아니지만 닫혀 있다고 나타난다. 

[참 고]
firewall-cmd 자동완성 기능
CentOS7의 통합된 명령어들은 자동완성 기능을 제공한다. 자동완성이란 옵션의 몇몇 단어만 입력하고 <TAB>키를 누르게 되면 관련 옵션의 단어가 자동완성된다. 또 여러개의 가능한 옵션이 있을때는 <TAB>키를 여러번 누르면 옵션 리스트가 나타난다. 아래와 같이 옵션을 모를 때는 <TAB>키를 여러번 누르면 사용할 수 있는 옵션 리스트가 나타난다.

~]#  firewall-cmd --permanent --
--add-forward-port=                   --list-rich-rules
--add-icmp-block=                     --list-services
--add-interface=                      --list-sources
--add-lockdown-whitelist-command=     --query-forward-port=
... 

[영역(zone) 변경]
앞에서 설명한 영역(zone)은 다음과 같은 방법으로 변경할 수 있다.

~]#  firewall-cmd --set-default-zone=block
success

기본 영역을 block으로 변경하였다. 설정 가능한 영역은 영역값을 입력하지 않고 <TAB>키를 여러번 누르면 다음과 같이 확인할 수 있다.

~]#  firewall-cmd --set-default-zone=<TAB><TAB>
block     dmz       drop      external  home      internal  public    trusted   work

설정된 내역은 다음과 같이 확인할 수 있다.

~]#  firewall-cmd --list-all
block (default, active)
  interfaces: eth0
  sources:
  services:
  ports:
  masquerade: no
  forward-ports:
  icmp-blocks:
  rich rules:

위 결과를 보면 기본영역이 block으로 변경된 것을 확인할 수 있다. 물론 --get-default-zone 옵션으로 기본영역을 확인할 수 있다.

[서비스(service) 수정]
GUI와 다르게 firewall-cmd는 서비스 추가/수정 방법을 제공하지 않는다. 다음과 같은 방법으로 미리 정의된 서비스를 편집하여 사용할 수 있다. 리눅스 서버 접속을 위해 SSH를 가장 많이 사용한다. 많이 사용되는 만큼 인터넷에 공개된 서버의 경우 사전(dictionary) 공격을 통해 접속정보를 획득하려는 시도가 많이 일어난다. 이러한 접근 시도를 회피하기 위해 SSH 기본포트(tcp/22)를 1024이후 잘 알려지지 않은 포트로 변경한다. 이러한 경우 SSH 서비스에 대한 서비스 포트 또한 변경이 되어야 하기에 다음과 같이 방화벽 설정을 변경해 보도록 하자.

~]#  cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/

서비스가 정의된 파일(ssh.xml)을 /usr/lib/firewalld/services 디렉토리에서 /etc/firewalld/services 디렉토리로 복사한다.
/etc/firewalld/services/ssh.xml 파일을 열어 다음과 같이 수정한다.

<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>SSH</short>
  <description>Secure Shell (SSH) is a protocol for logging into and executing commands on remote machines. It provides secure encrypted communications. If you plan on accessing your machine remotely via SSH over a firewalled interface, enable this option. You need the openssh-server package installed for this option to be useful.</description>
  <port protocol="tcp" port="15322"/>
</service>

필자는 SSH포트로 15322를 입력하였다.

~]#  firewall-cmd --reload
success
--reload옵션으로 변경내역을 반영한다. 

~]#  iptables -nL |grep 15322
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0      tcp dpt:15322 ctstate NEW

firewall-cmd으로는 서비스의 변경내역을 확인할 수 없었다. iptables명령을 사용하여 변경된 서비스 포트를 확인하였다.

[포트 및 프로토콜 직접 추가]
앞에서 다뤘던 서비스를 이용하여 방화벽을 관리하기도 하지만, 앞 예와 같이 미리 정의된 서비스의 포트를 변경하는 경우는 포트 및 프로토콜을 직접 추가하는 것이 방화벽 관리에 더 효율적이다. SSH 포트를 변경한 경우 서비스 리스트에서는 바로 확인하기 어렵기 때문에 서버를 이전하는 경우 실수할 수 있다. 
 VNC접속을 위해 포트 및 프로토콜을 직접 추가해 보도록 하자.

~]# firewall-cmd --permanent --add-port=5900-5910/tcp
success
~]# firewall-cmd --reload
success
~]# firewall-cmd --list-all
public (default, active)
  interfaces: eth0
  sources: 
  services: dhcpv6-client http https ssh
  ports: 5900-5910/tcp
  masquerade: no
  forward-ports: 
  icmp-blocks: 
  rich rules: 

firewall-cmd명령을 사용하여 위와 같이 룰을 추가할 수 있다. --permanent 옵션은 영구적인 설정을 의미하며 옵션을 주지 않으면 런타임 환경에서 적용되기 때문에 서버를 리부팅하면 룰이 없어진다. --add-port 옵션을 사용하여 오픈하고자 하는 포트 및 포트범위/프로토콜을 지정한다. 만약 추가된 포트를 제거하기 위해서는 --remove-port 옵션을 사용한다. 다음으로 --reload 옵션을 사용하여 영구적으로 설정된 룰을 런타임 환경에 적용시킨다. 적용이 완료된 후 --list-all 옵션으로 설정된 룰을 확인한다. 물론 추가된 포트는 --list-ports 옵션으로 확인 가능하다.

[마스커레이딩(Masquerading)]
리눅스 시스템을 인터넷 공유 목적의 라우터 기능을 사용하기 위해 마스커레이딩 기능을 활성화 시킨다. 
마스커레이딩을 사용하기 위해 공인망, 사설망 네트워크 구성을 미리 해 두어야 한다.

~]# firewall-cmd --permanent --add-masquerade
success
~]# firewall-cmd --reload
success
~]# firewall-cmd --list-all
public (default, active)
  interfaces: eth0
  sources:
  services: dhcpv6-client http https ssh
  ports: 5900-5910/tcp
  masquerade: yes
  forward-ports: 
  icmp-blocks: 
  rich rules:

firewall-cmd명령을 사용하여 위와 같이 마스커레이딩을 활성화 시킬 수 있다. --permanent 옵션은 영구적인 설정을 의미하며 옵션을 주지 않으면 런타임 환경에서 적용되기 때문에 서버를 리부팅하면 룰이 없어진다. --add-masquerade 옵션을 사용 마스커레이딩을 활성화시킨다. 만약 마스커레이딩을 비활성화시고 싶다면 --remove-masquerade 옵션을 사용한다. 다음으로 --reload 옵션을 사용하여 영구적으로 설정된 룰을 런타임 환경에 적용시킨다. 적용이 완료된 후 --list-all 옵션으로 masquerade 활성화 유부를 확인한다. 

[포트 포워딩(port forwarding)]
앞에서 마스커레이딩 설정으로 인터넷 공유 라우터를 설정한 경우 외부에서 공인IP로 접속되는 연결에 대해서 포트에 따라 내부 서버로 연결시킬 수 있는 포트 포워딩 기능을 사용할 수 있다. 
또, 시스템으로 들어오는 포트를 포워딩하여 로컬의 다른 포트로 포워딩할 수 있다. 시스템의 각 서비스들은 보안을 위해 일반 사용자 권한으로 서비스를 실행하기를 권장한다. 예를 들어 Tomcat은 JSP 컨테이너이면서 웹서버 기능을 가지고 있다. Tomcat은 일반 사용자 계정으로 실행할 것을 권장한다. 하지만, HTTP기본포트 80을 사용할 경우 root권한이 아니면 80포트를 Bind할 수 없다. 이러한 경우 포트포워딩을 사용하여 80포트로 접속되는 패킷을 로컬의 8080(Tomcat의 기본 HTTP 포트)포트로 포워딩 시킴으로 root권한 없이 80포트를 사용하여 웹서비스를 할 수 있다.
80포트로 접속되는 패킷을 8080포트로 포워딩 설정해 보자.

~]# firewall-cmd --permanent --add-forward-port=port=80:proto=tcp:toport=8080
success
~]# firewall-cmd --reload
success
~]# firewall-cmd --list-all
public (default, active)
  interfaces: eth0
  sources:
  services: dhcpv6-client http https ssh
  ports: 5900-5910/tcp
  masquerade: yes
  forward-ports: port=80:proto=tcp:toport=8080:toaddr=
  icmp-blocks: 
  rich rules:

firewall-cmd명령을 사용하여 위와 같이 포트 포워딩 하였다. --permanent 옵션은 영구적인 설정을 의미하며 옵션을 주지 않으면 런타임 환경에서 적용되기 때문에 서버를 리부팅하면 룰이 없어진다. --add-forward-port 옵션을 사용 포트 포워딩 규칙을 추가하였다. 다음과 같은 방법으로 입력된다.
--add-forward-port=port=portid[-portid]:proto=protocol[:toport=portid[-portid]][:toaddr=address[/mask]]
만약 포트포워딩을 제거하기 위해서는 --remove-forward-port 옵션을 사용한다.다음과 같은 방법으로 입력된다.
--remove-forward-port=port=portid[-portid]:proto=protocol[:toport=portid[-portid]][:toaddr=address[/mask]]
 다음으로 --reload 옵션을 사용하여 영구적으로 설정된 룰을 런타임 환경에 적용시킨다. 적용이 완료된 후 --list-all 옵션으로 포트포워딩 설정내역을 확인할 수 있다. 물론 --list-forward-ports 옵션으로 확인할 수 있다.

[ping 응답 하지 않기]
시스템의 네트워크 상태를 확인하기 위해 ping명령어를 이용하여 응답 테스트를 한다. ping은 네트워크 확인을 위해 유용하게 사용되지만, 악의적으로 패킷크기를조절하여 네트워크의 과다한 트래픽을 유발하기도 한다. 이러한 공격을 차단하기 위해 ping에 대해 응답하지 않도록 설정하는 경우가 있다. 
다음은 ICMP 프로토콜 중 ping에 대해 응답하지 않게 설정하고 있다.

~]# firewall-cmd --permanent --add-icmp-block=echo-request
success
~]# firewall-cmd --reload
success
~]# firewall-cmd --list-all
public (default, active)
  interfaces: eth0
  sources:
  services: dhcpv6-client http https ssh
  ports: 5900-5910/tcp
  masquerade: yes
  forward-ports: port=80:proto=tcp:toport=8080:toaddr=
  icmp-blocks: echo-request
  rich rules:

firewall-cmd명령을 사용하여 위와 같이 ping을 차단할 수 있다. --permanent 옵션은 영구적인 설정을 의미하며 옵션을 주지 않으면 런타임 환경에서 적용되기 때문에 서버를 리부팅하면 룰이 없어진다. --add-icmp-block 옵션을 사용 ICMP 차단할 유형을 추가하였다. 만약 차단할 유형을 제거하기 위해서는 --remove-icmp-block옵션을 사용한다. 다음으로 --reload 옵션을 사용하여 영구적으로 설정된 룰을 런타임 환경에 적용시킨다. 적용이 완료된 후 --list-all 옵션으로 차단된 ICMP 유형을 확인할 수 있다. 물론 --list-icmp-blocks 옵션으로도 확인할 수 있다.

[직접 방화벽 규칙 넣기]
리눅스 방화벽 iptables는 막강한 확장기능을 제공한다. firewalld에서 제공되는 기능은 확장 기능 중 일부만 사용할 수 있으며, 원하는 확장 기능 사용을 위해 다음과 같은 방법으로 직접 입력하여 사용할 수 있는 인터페이스가 제공된다.
웹서버를 대상으로 DOS공격이 많이 발생된다. 특정 클라이언트 IP에서 접속이 많이 발생된다면 특정 클라이언트 IP 차단을 위해 사용하는 모듈이 connlimit이다. 
다음은 connlimit를 사용하여 DOS공격을 막도록 설정해 보겠다.

~]# firewall-cmd --permanent --direct --add-passthrough ipv4 -I INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 16 -j REJECT
success
~]# firewall-cmd --reload
success

firewall-cmd명령을 사용하여 DOS공격을 막을 수 있다. --permanent 옵션은 영구적인 설정을 의미하며 옵션을 주지 않으면 런타임 환경에서 적용되기 때문에 서버를 리부팅하면 룰이 없어진다. --direct 옵션은 직접 입력한다는 설정이다. --add-passthrough는 통과 규칙을 직접 입력하는 옵션이다. 만약 통과 규칙을 제거하기 위해서는 --remove-passthrough을 사용한다. 다음으로 --reload 옵션을 사용하여 영구적으로 설정된 룰을 런타임 환경에 적용시킨다. 

~]# iptables -nL |grep conn
REJECT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:80 flags:0x17/0x02 #conn src/32 > 16 reject-with icmp-port-unreachable

firewall-cmd으로는 직접 설정한 규칙 확인이 어려워 iptables명령을 사용하여 직접 추가한 규칙을 확인하였다.


.bash_history 작업 날짜 확인하기(세팅)



/etc/profile 파일에 아래 내용을 추가하여  "날짜/시간" 에 대한 기록을 추가해 준다.

# Add timestamp to .bash_history 
HISTTIMEFORMAT="%Y-%m-%d_%d_%H:%M:%S   " 
export HISTTIMEFORMAT 



[root@localhost /]#  history  
  993  2017-05-30_09:40:54  vi /etc/profile 
  994  2017-05-30_09:40:54  history 
  995  2017-05-30_09:40:54  exit 
  996  2017-05-30_09:40:08  ls 
  997  2017-05-30_09:40:12  hostory 
  998  2017-05-30_09:40:14  history 
  999  2017-05-30_09:40:34  vim /etc/profile 
 1000  2017-05-30_09:40:50  exit 
 1001  2017-05-30_09:40:56  history 
 1002  2017-05-30_09:42:58  cd /var 
 1003  2017-05-30_09:42:59  ls 
 1004  2017-05-30_09:43:00  cd / 
 1005  2017-05-30_09:43:01  ls 
 1006  2017-05-30_09:43:16  find ./ -type d -name 'buffered' 
 1007  2017-05-30_09:43:25  find ./ -type d -name 'buffere' 
 1008  2017-05-30_09:43:37  find ./ -type d -name 'cache' 
 1009  2017-05-30_09:45:19  more /etc/profile 
 1010  2017-05-30_09:45:41   history



리눅스 개인서명(사설) SSL 인증서 생성


1. 개요
개인 인증서를 만들고 인증서를 발급 받아 사용해본다. 브라우저에서  신뢰할 수 없는 사이트로 표시되지만, SSL 보안 기능을 사용할 수 있다.


2. 확인
리눅스 서버에 Openssl 패키지를 설치한다.
[root@localhost ~]# rpm -qa | grep openssl 
openssl-libs-1.0.1e-60.el7_3.1.x86_64 
openssl-1.0.1e-60.el7_3.1.x86_64 
openssl098e-0.9.8e-29.el7.centos.3.x86_64 
openssl-devel-1.0.1e-60.el7_3.1.x86_64 



3. 개인키 생성
[root@localhost ~]# openssl genrsa -des3 -out server.key 2048 
Generating RSA private key, 2048 bit long modulus 
.....+++ 
.......................................................................................................................+++ 
e is 65537 (0x10001) 
Enter pass phrase for server.key: 
Verifying - Enter pass phrase for server.key: 
[root@localhost ~]#


4. 인증요청서 생성
[root@localhost ~]# openssl req -new -key server.key -out server.csr 
Enter pass phrase for server.key:                  ---->  서버 개인키  패스워드 입력
You are about to be asked to enter information that will be incorporated 
into your certificate request. 
What you are about to enter is what is called a Distinguished Name or a DN. 
There are quite a few fields but you can leave some blank 
For some fields there will be a default value, 
If you enter '.', the field will be left blank. 
----- 
Country Name (2 letter code) [XX]:kr 
State or Province Name (full name) []:daejeon 
Locality Name (eg, city) [Default City]:seogu    
Organization Name (eg, company) [Default Company Ltd]:colt357 
Organizational Unit Name (eg, section) []:colt357 
Common Name (eg, your name or your server's hostname) []:web1.com 
Email Address []:admin@web1.com 
  --------->   적당히  자신의 경우게 맞게 입력

Please enter the following 'extra' attributes 
to be sent with your certificate request 
A challenge password []:
An optional company name []:

---------->  그냥 Enter, Enter

서버 인증요청서인 server.csr 파일이 생성되었다.


5. (Optional) 개인키에서 패스워드 제거
- 키에 패스워드가 들어 있으면 아파치 구동시마다 물어본다. 패스워드를 제거하더라도 SSL 암호화 통신 에는 문제가 없으므로 제거하자.

[root@localhost ~]# cp server.key  server.key.origin 
[root@localhost ~]# ls 
anaconda-ks.cfg  server.csr  server.key  server.key.origin 
[root@localhost ~]# openssl rsa -in server.key.origin -out server.key 
Enter pass phrase for server.key.origin:             ---->   개인키 패스워드를 입력
writing RSA key                   -----> 패스워드가 제거된 개인키  파일 server.key 가 생성된다.
[root@localhost ~]# 

 
패스워드가 제거된 파일(server.key)은 원래 파일(server.key.origin)에 비해 용량이 조금 줄었다.


6.  인증서 생성
- 개인키와 인증요청서를 가지고 인증서를 생성해 보자.

[root@localhost ~]# openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt 
Signature ok 
subject=/C=kr/ST=daejeon/L=seogu/O=colt357/OU=colt357/CN=web1.com/emailAddress=admin@web1.com 
Getting Private key 
[root@localhost ~]#
 


7. 확인
- 개인키
[root@localhost ~]# head -3 server.key 
-----BEGIN RSA PRIVATE KEY----- 
MIIEowIBAAKCAQEAyyIIj70AxbZmWKeL7vTg0cDouD8U+Fxt5046YFYh6bUXbev0 
tILTBRZBeGJzeL1GJ2NB1nkPQ4uaIPGCghhD/4ttvKFbH09quPLWFZ44Pth0kCwN 


- 사설인증서
[root@localhost ~]# head -3 server.crt 
-----BEGIN CERTIFICATE----- 
MIIDiDCCAnACCQDyRS6tuMObrDANBgkqhkiG9w0BAQUFADCBhTELMAkGA1UEBhMC 
a3IxEDAOBgNVBAgMB2RhZWplb24xDjAMBgNVBAcMBXNlb2d1MRAwDgYDVQQKDAdj 
[root@localhost ~]# 



samba는 이기종간의 파일,  CD-ROM, 프린터 등을 공유하기 위해 만들어진 프로그램이다.
samba는 마이크로소프트사와 인텔이 다른 시스템의 디스크나 프린터와 같은 자원을 공유하기 위해 개발한 프로토콜이다. SMB는 tcp/ip 기반의 NetBIOS 프로토콜을 사용한다.

samba는 서버는 크게 2개(smbd, nmbd)의 프로세스로 구성 되어 있다.
대부분의 처리는 smbd에서 한다. 포트 또한 tcp:445 만 열려 있으면 작동한다.  다만, 윈도우즈 사용자의  컴퓨터이름으로 접속할 수 있게 하기 위해서는 nmbd를 사용해야 한다. nmbd는 3개의 포트를 사용한다.  (tcp:139, udp:137,138) 

SAMBA를 사용하는 경우 tcp : 139, 445번과  udp : 137, 138번 포트가 열려있어야 한며, 방화벽설정에도 적용되어야 한다.

1. SAMBA 서버 설치

~]#  yum  -y  install  samba  samba-common  samba-client

2. SAMBA 시작 및 종료
samba server는 항상 실행하고 있는 서버 프로그램이다, smb는 systemd로 관리하며 systemctl로 제어할 수 있다.  smb,  nmb 가  있으며,   smb 만으로도 서비스 가능하다.

~]# systemctl  enable  smb  nmb
~]# systemctl  start  smb  nmb

3. SAMBA  사용자 계정 설정
samba 사용자는 시스템 사용자를 이용하며,  smbpasswd -a 명령으로  samba 접속 계정으로 설정할 수 있다.

~]#  useradd  ID
~]#  passwd   ID     ----->   리눅스 사용자 생성
~]#  smbpasswd  -a   ID    ----->   samba 계정 적용
New SMB password:
Retype new SMB password:
Added user ID.

4. SAMBA 설정
samba 설정 파일의 위치는 /etc/samba/smb.conf 이다.

[root@localhost samba]# more smb.conf 
# See smb.conf.example for a more detailed config file or 
# read the smb.conf manpage. 
# Run 'testparm' to verify the config is correct after 
# you modified it. 

[global]     
  //  전역 설정 부분, 여기 아래에 옵션을 넣게 되면 모든 Samba 정보에 설정된다.

workgroup = SAMBA 
  //  윈도우의 workgroup과 일치 시키거나 NT 도메인 이름으로 설정한다. 

server string = Samba Server Version %v 
  //  윈도우 컴퓨터 설명과 유사, 공유시 폴더명 옆에 설명.
  //   %h 호스트명, %L NetBIOS 이름, %v Samba Version 표시


interfaces = lo eth0 192.168.1.2/24  192.168.2.2/24 
  // 두개의 네트워크에 Samba 가 물려있는 경우로 양쪽 네트워크에 대행 브라우징 및 서비스가 가능하다.

hosts allow = 127.   192.168.1.   192.168.2.  // 접근을 허가할 호스트 네임 혹은 ip 주소를 지정
   
log file = /var/log/samba/log.%m   // 서버에 접속한 호스트마다 개별적인 호그 파일을 생성하도록 설정  
max log size = 50

security = user 
  //   서버의 사용자 계정만 사용할 수 있도록 한다.
  //   user = Samba Server에서 계정 및 패스워드를 통한 인증을 거친 사용자에 한하여 공유를 허가
  //   share = 모든 공유 영역에 권한 없이 접근이 가능하도록 설정
  //   server =  공유 영역에 대한 사용 권한은 다른 호스트(NT 패스워드 서버)의 인증 과정을 거친 사용자에 한하여 허가  

passdb backend = tdbsam 
  //  패스워드에 해한 인증 방식.
  //   tdbsam = samba 내장 TDB SAM 형식
  //  ldapsam = LDAP 사용 ( LDAP 라이브러리 필요)
  //  sbmpasswd = smbpasswd 텍스트 파일 인증 형식 

printing = cups 
printcap name = cups 
load printers = yes 
  //  Samba에서 별도의 프린터 설정을 하지 않고, printcap name 에서 설정한 프린트 설정을 불러온다.
cups options = raw 





[homes]      //   사용자  계정을 통해서 자기 홈 경로를 접근 할 수 있다.
comment = Home Directories       //   폴더에 대한 설명
valid users = %S, %D%w%S       //     
browseable = No    //  이 폴더의  표출여부 설정, yes로 하면 접속 권한이 없어도 네트웍의 모든 PC에서 확인 가능.   
read only = No     //  버전 따라 writable 로 표시되기도 한다. 읽고, 쓰기 권한 설정.
inherit acls = Yes 
create mask = 0664   //  생성되는 파일 권한  
directory mask = 0755    //  생성되는 폴더 권한


[printers] 
comment = All Printers 
path = /var/tmp 
printable = Yes 
create mask = 0600 
browseable = No 

[print$] 
comment = Printer Drivers 
path = /var/lib/samba/drivers 
write list = root 
create mask = 0664 
directory mask = 0775


# 여러 사용자가 함께 사용할 수 있는 공유 폴더 설정하기
# "[ ]"  안에 접속할 경로를 설정한다,  만일 "[share]"로  세팅했을 경우, 윈도우에서의 접속은
# "\\server\share" 로 접속할 수 있다. 

[share]
comment = shared Files
path = /data/samba/share   //  실제 파일이 저장될 공간으로 , 설정이 끝나고 폴더를 생성해 주어야 한다.
browseable = yes  //  공유 내역을 브라우징 리스트에 나타나게 할 것인지에 대한 옵션
read only = no
create mask = 0664
diretory mask = 0755
guest ok = yes  //  Anonymous로 접속 간으하게 하려면 아래 주석을 풀어준다. 이때는 read only을 추천한다.




# 옵션 설명
# vlid users   -->  공유 영역에 접근 가능한 사용자 혹은 그룹 지정사용자를 여러명 지정할 경우 공백으로 구분하여 지정
#                          그룹명일 경우 @ 그룹명 으로  그룹임을 명시한다.
#  write list  -->  공유 영역에 대한 쓰기 가능한  사용자 혹은 그룹 지정사용자를 여러 명 지정할 경우 공백으로 구분.
#                          그룹명일 경우 @ 그룹명 으로 그룹임을 명시한다.


5. 방화벽 설정
Samba는   tcp 139, 445 포트를 사용한다.

(참고)  삼바서버 포트 번호
netbios-ns         137/udp                       # NETBIOS Name Service 
netbios-dgm     138/udp                       # NETBIOS Datagram Service 
netbios-ssn       139/tcp                         # NETBIOS session service 
microsoft-ds     445/tcp 


6. 삼바 서버  접속 클라이언트
위도우즈에서 다음과 같은 방법으로 접속할 수 있다.

   1) 윈도우즈에서 접속하기

시작 → 실행   ,  \\IP(또는 호스트명)           ,     아이디/비번으로 접속할 수 있다.

   2)  리눅스에서 접속하기

GUI 환경의  리눅스에서는  "파일브라우저" 를  실행하여  "네트워크 찾아보기" 에서  
smb://컴퓨터명/공유이름   
형식으로  접근 할수 있다.

   3) MC(Midnight  Commander)를  이용하여 접속하기  

명령어 창에서 mc를  입력하여 작동한 후 f9 키를 눌러 메뉴에서 "smb 연결"을 선택하여 접근할 수 있다.

  4)  smbclient 를 이용한 smb 서버 접속
samba에서 제공하는 smbclient 명령어를 이용하여  SMB에 접속할 수 있다.
접속한 후  ftp 처럼 동작하며, help 명령어로 사용할 수 있는 명령어를 확인할 수 있다.
 get, put 등의 명령어로 파일을 다운로드 업로드 할 수 있다.

~]# smbclient   //컴퓨터이름/공유명  -U  사용자명
Enter user_id's  password :  패스워드
smb: \> ls 

   5)  linux   SMB   마우트 하기.

~]# mount   -t   cifs    //아이피/공유명     /smb_dir    -o  user=사용자,password=패스워드


RPM 기반 시스템용  패키지  "설치/삭제/업데이트"  도구

기능
명령어
패키지 설치
yum  install  패키지명
패키지 삭제
yum remove  패키지명
패키지 업데이트
yum update   패키지명
패키지 정보확인
yum info  패키지명
패키지 검색
yum  search  패키지명
 패키지 목록보기
(설치된 항목 +  설치가능 항목)
yum  list
설치된 패키지 목록 보기
yum  list  installed

1. 패키지  설치 확인

방법 1.   rpm 

rpm  -q  패키지명
rpm  -qa  | grep  패키지명

방법 2.   yum

yum  list   installed   패키지명
yum  list   installed   |  grep  패키지명

2. YUM  저장소 - repository

base 설정이 있어 바꿀 필요는 없으나, 전송속도 또는  특별한 패키지를 설치하기위해 변경, 추가 할 수 있다.

[root@localhost log]# yum repolist 
Loaded plugins: fastestmirror, langpacks 
Loading mirror speeds from cached hostfile 
 * base: centos.mirror.cdnetworks.com 
 * epel: mirror.premi.st 
 * extras: centos.mirror.cdnetworks.com 
 * ius: mirrors.kernel.org 
 * updates: centos.mirror.cdnetworks.com 
repo id                                    repo name                                                                                   status 
!base/7/x86_64                     CentOS-7 - Base                                                                           9,363 
!epel/x86_64                         Extra Packages for Enterprise Linux 7 - x86_64                       11,904 
!extras/7/x86_64                  CentOS-7 - Extras                                                                            447 
!ius/x86_64                            IUS Community Packages for Enterprise Linux 7 - x86_64          380 
!mariadb                                MariaDB                                                                                            16 
!nginx/x86_64                       nginx repo                                                                                        78 
!updates/7/x86_64               CentOS-7 - Updates                                                                    2,090 
repolist: 24,278

3. yum   epel   저장소 추가

yum  epel (Extra  Packages  Enterprise Linux ) 저장소 추가
엔터프라이즈 리눅스를 위한 추가 패키지

[확인]
 [root@localhost log]# yum repolist
  ~~  repo id 리스트 중   epel  정보 유무 확인.

[설치]
[root@localhost log]# yum install epel-release
~~
Updated: 
  epel-release.noarch 0:7-10                                                                                           

Complete!


/etc/fstab

UUID=6b0513a6-e094-42d4-a327-3ae7d73cf37f       /                     ext4        defaults                    1 1 
UUID=71e8b455-201c-4f3c-a39b-7e5ec6bb3118      /home              ext4        defaults                    1 2 
UUID=ccb8a9af-0685-4486-bc94-f48b0bbce3de       /var                 ext4        defaults                    1 2 
UUID=57f1587d-624a-450d-86ef-d8ce30919ec0       swap               swap       defaults                     0 0 
tmpfs                                                             /dev/shm          tmpfs      defaults                     0 0 
devpts                                                            /dev/pts           devpts     gid=5,mode=620         0 0 
sysfs                                                               /sys                sysfs        defaults                      0 0 
proc                                                               /proc               proc        defaults                      0 0

○ 디바이스명(레이블명) -->  디바이스명 연결 권장. ( 레이블의 경우 usb 장비 연결 후 리부팅시 꼬임)
○ 마운트 포인트  --> 장비와 연결하여 사용할 위치, 디렉토리명
○ 파일시스템 타입 --> file system Type
○ 파일시스템 속성 --> 속성 적용, quota 설정 적용 등...
○ dump 속성 설정 --> 0 또는 1  (0 : dump 명령으로 덤프되자 않는 파일시스템,  1: dump 가능)
○ fsck 속성 설정 -->  0, 1, 2  (0: 부팅 시 fsck 실행 안됨, 1: 루트 파일시스템,  2: 루트 이외의 시스템)


+ Recent posts