검색 엔진의 방문이 늘어나고 있군...

Posted
Filed under 프로그램과 명령어/네트워크와 보안
참조 원문: Linux Terminal: speedtest_cli checks your real bandwidth speed.

인터넷 속도를 측정하는 사이트 중 SpeedTest 라는 웹 서비스(웹 브라우저, 모바일 애플리케이션 모두 존재)가 있는데 speedtest_cli라는 파이선 스크립트를 통해 커맨드 라인에서도 해당 서비스를 이용할 수 있습니다. 따라서 브라우저나 GUI가 없는 서버에서도 속도를 테스트할 수 있죠.

설치
speedtest_cli는 파이선 스크립트기 때문에 설치와 사용이 용이합니다. 설치 방법은 아래 몇 가지 방법 중 하나를 이용하면 됩니다.

1) pip / easy_install
터미널을 열어 아래 두 명령어 중 하나를 사용합니다.
pip install speedtest-cli
또는
easy_install speedtest-cli

2) Github

github로부터 직접 설치하는 방법입니다.
pip install git+https://github.com/sivel/speedtest-cli.git
또는
git clone https://github.com/sivel/speedtest-cli.git
python speedtest-cli/setup.py install

3) Ubuntu/Debian 또는 Mint 패키지

getdeb 저장소를 이용하는 방법으로 먼저 아래 방법으로 저장소를 추가해야 합니다.
getdeb 패키지 설치
또는
- 저장소 수동 설정
System -> Administration -> Software Sources -> Third-Party Software 탭에서 아래 라인을 추가합니다.
deb http://archive.getdeb.net/ubuntu trusty-getdeb apps
저장소 GPG키를 추가하기 위해 터미널 창을 열어서 아래 내용을 실행합니다.
wget -q -O- http://archive.getdeb.net/getdeb-archive.key | sudo apt-key add -
아래 명령어로 speedtest-cli 패키지를 설치합니다.
sudo apt-get update
sudo apt-get install python-speedtest-cli

4) 그냥 다운로드

마지막 방법으로 원하는 곳에서 파이선 스크립트를 다운로드하여 실행하는 방법입니다.
wget -O speedtest-cli https://raw.github.com/sivel/speedtest-cli/master/speedtest_cli.py
chmod +x speedtest-cli
또는
curl -o speedtest-cli https://raw.github.com/sivel/speedtest-cli/master/speedtest_cli.py
chmod +x speedtest-cli

기본 사용법
  옵션 없이 그냥 speedtest_cli.py 를 실행해도 대역폭 속도를 확인할 수 있습니다. 아래는 제가 직접 테스트한 결과입니다.
[root@localhost speedtest-cli]# ./speedtest_cli.py
Retrieving speedtest.net configuration...
Retrieving speedtest.net server list...
Testing from Korea Telecom (210.223.38.159)...
Selecting best server based on latency...
Hosted by China Unicom (Qingdao) [611.01 km]: 50.13 ms
Testing download speed........................................
Download: 8.23 Mbit/s
Testing upload speed..................................................
Upload: 38.19 Mbit/s
  어째서인지 중국 서버를 잡아 테스트했네요. 분명 서울에 있는 서버도 있는데...어쨌든 기본 사용법은 이렇습니다. 결과를 그림 파일로 만들고 싶다면 --share 옵션을 추가하면 됩니다. 그러면 speedtest 사이트에 업로드되고 그 링크가 출력됩니다.
[root@localhost speedtest-cli]# ./speedtest_cli.py
Retrieving speedtest.net configuration...
Retrieving speedtest.net server list...
Testing from Korea Telecom (210.223.38.159)...
Selecting best server based on latency...
Hosted by China Unicom (Qingdao) [611.01 km]: 50.13 ms
Testing download speed........................................
Download: 8.23 Mbit/s
Testing upload speed..................................................
Upload: 38.19 Mbit/s
[root@localhost speedtest-cli]# ./speedtest_cli.py --share
Retrieving speedtest.net configuration...
Retrieving speedtest.net server list...
Testing from Korea Telecom (210.223.38.159)...
Selecting best server based on latency...
Hosted by China Unicom,Changchun Branch (Changchun) [712.22 km]: 56.195 ms
Testing download speed........................................
Download: 7.77 Mbit/s
Testing upload speed..................................................
Upload: 31.63 Mbit/s
Share results: https://www.speedtest.net/result/4455322670.png
  결과는 아래와 같은 형식의 그림 파일입니다.
  또 다른 중요한 옵션은 --list 입니다. 거리순으로 speedtest.net 서버를 출력합니다. 서버명 앞에 ID가 출력되는데 --server 옵션과 ID 값을 사용하면 나열된 서버 중 원하는 서버를 이용할 수 있습니다.
[root@localhost speedtest-cli]# ./speedtest_cli.py --list|more
Retrieving speedtest.net configuration...
Retrieving speedtest.net server list...
5017) China Unicom,Liaoning Branch (Shenyang, China) [530.54 km]
5710) China Unicom (Qingdao, China) [611.01 km]
1185) China Unicom,Changchun Branch (Changchun, China) [712.22 km]
3133) Rostelecom (Vladivostok, Russian Federation) [744.06 km]
6457) Extreme-VL.ru (Vladivostok, Russian Federation) [744.06 km]
4024) Vladlink (Vladivostok, Russian Federation) [744.06 km]
5652) MegaFon (Vladivostok, Russian Federation) [744.06 km]
6316) Podryad (Vladivostok, Russian Federation) [744.06 km]
이하 생략

[root@localhost speedtest-cli]# ./speedtest_cli.py --server 3133
Retrieving speedtest.net configuration...
Retrieving speedtest.net server list...
Testing from Korea Telecom (210.223.38.159)...
Hosted by Rostelecom (Vladivostok) [744.06 km]: 335.484 ms
Testing download speed........................................
Download: 19.15 Mbit/s
Testing upload speed..................................................
Upload: 15.48 Mbit/s
  다만 웹이나 모바일에서 할 때는 서울 서버가 나오는데 이 방법으로는 이상하게 서울 서버가 나오지 않아서 효용성이 떨어지는 것 같아 아쉽네요.


2015/06/24 15:07 2015/06/24 15:07
Posted
Filed under 프로그램과 명령어/네트워크와 보안
참조 원문: How to manage a WiFi connection from the command line

  GUI 없이 WiFi 접속을 다루는 내용입니다. 일반적으로 서버에서 무선을 쓰는 일은 없고 일반 PC에서 GUI를 안 쓰는 일도 거의 없으므로 실제로 사용할 일이 별로 없는 내용이지만 기초라는 건 언제나 중요한 법이죠. 그에 따라 사용하는 프로그램도 최대한 배포판에 상관 없이 기본 패키지에 포함되어 설치되는 것을 위주로 사용하여 설명합니다.

  먼저 사용하는 무선 LAN카드(NIC)를 위한 적절한 드라이버가 로드되어 있다고 가정한 상태에서 진행합니다. 드라이버가 없으면 아무것도 할 수 없죠. 적절한 드라이버가 있는 상태에서 아래 명령어를 통해 무선 접속을 지원하는 인터페이스를 확인할 수 있습니다.
$ iwconfig

출처: http://xmodulo.com/manage-wifi-connection-command-line.html

  보통 무선 인터페이스의 이름은 위의 모습처럼 wlan0이 됩니다. 인터페이스가 up 상태인지 확인하려면 아래 명령어를 사용합니다.
$ sudo ip link set wlan0 up
  인터페이스가 작동한다면 주변의 무선 네트워크를 스캔할 수 있어야 합니다.
$ sudo iw dev wlan0 scan | less

출처: http://xmodulo.com/manage-wifi-connection-command-line.html

  출력 결과를 통해 네트워크 이름(SSID), 신호 강도, 보안 타입(WEP, WPA/WPA2 등)을 알 수 있습니다. 여기서 다음 단계의 난이도가 나눠집니다. 만약 접속하려는 네트워크가 암호화를 사용하지 않는다면 아래 명령어를 통해 바로 접속이 가능합니다.
$ sudo iw dev wlan0 connect 네트워크_SSID
  WEP 암호화를 사용할 경우도 비슷한 방법으로 접속할 수 있습니다.
$ sudo iw dev wlan0 connect 네트워크_SSID key 0:키값
  하지만 WPA나 WPA2를 사용하는 네트워크라면 방법이 좀 복잡합니다. 이 경우에는 wpa_supplicant라는 유틸리티를 사용해야 하며 이 유틸리티는 배포판에 따라 기본으로 설치되지 않을 수도 있습니다. 이 유틸리티를 사용하려면 먼저 /etc/wpa_supplicant/wpa_supplicant.conf 파일에 있는 내용들을 주석처리하고 아래 내용을 추가합니다. 참고로 SSID 대신 AP의 이름을 넣는 것도 가능하며 그 경우 wpa_supplicant가 그에 해당하는 SSID로 변경합니다.
network={
    ssid="네트워크_SSID"
    psk="패스프레이즈"
    priority=1
}
  설정을 끝내면 아래 명령어를 사용하여 wpa_supplicant를 백그라운드로 돌립니다.
$ sudo wpa_supplicant -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf
  이제 IP를 받기 위해 DHCP를 사용합니다.
$ sudo dhcpcd wlan0
  이제 DHCP를 통해 로컬 IP를 받으며 프로세스가 백그라운드에서 fork 됩니다. 접속여부를 확인하고 싶다면 iwconfig 명령어를 사용합니다.
$ iwconfig

출처: http://xmodulo.com/manage-wifi-connection-command-line.html

2015/03/05 17:35 2015/03/05 17:35
Posted
Filed under 프로그램과 명령어/네트워크와 보안
참조 원문: Unix: Gaining network insights with tcpdump

  tcpdump는 들어온 패킷(더 정확히는 "프레임")을 잡아 내용을 볼 수 있는 "스니퍼"입니다. 기본적으로 로컬 머신에 들어온 모든 트래픽을 볼 수 있는 promiscuous mode로 동작하는데 이 상태에서는 목적지가 로컬 머신이 아닌 트래픽도 모두 잡아서 볼 수 있습니다. 이 기능을 꺼서 자신이 적절한 목적지인 트래픽만 보고 싶다면 -p 옵션을 주면 됩니다. 여담으로 -p가 "promiscuous를 켜라"가 아니라 "promiscuous를 꺼라"라는 의미라서 좀 햇갈리죠.

  만약 tcpdump를 실행했을 때 "No suitable driver found"라는 메시지와 함께 종료된다면 root 권한이 없어서 그런 겁니다. 안타깝게도 이 프로그램을 사용하려면 root 권한이 필요하죠.

  일단 실행에 성공하면 엄청난 내용들이 화면에 가득하게 됩니다. 심지어 트래픽이 거의 없는 네트워크라도 말이죠. 그래서 옵션이 중요합니다. 먼저 알아볼 옵션은 원하는 개수의 패킷(정확히는 "프레임")만 출력하고 종료하는 겁니다. -c (숫자) 옵션을 주면 수집할 프레임의 개수를 정할 수 있습니다.
# tcpdump -c 2
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
13:40:11.368233 IP xyz-boson-1.particles.com.ssh > 10.2.230.115.58774: P 3706680
062:3706680258(196) ack 474521172 win 71
13:40:11.368501 IP 10.20.30.115.58774 > xyz-boson-1.particles.com.ssh: . ack 196
 win 255
2 packets captured
5 packets received by filter
0 packets dropped by kernel
  출력된 프레임의 내용 중 첫 번째 항목은 시간입니다. 위에서 13:40:11.507360에 해당하는 부분이죠. 그 뒤에는 출발지(>의 왼쪽)와 목적지(>의 오른쪽) 및 패킷의 내용이 있습니다.

  패킷을 파일로 캡쳐해서 나중에 다시 볼 수도 있습니다. 아래는 10개의 패킷을 캡쳐해서 /tmp/c10 파일에 저장하는 모습입니다.
# tcpdump -c 10 -w /tmp/c10
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
10 packets captured
12 packets received by filter
0 packets dropped by kernel
  이렇게 만든 파일은 아래의 방법으로 읽을 수 있습니다.
# tcpdump -r /tmp/c10
  이러면 저장했던 내용을 모두 읽습니다.

  -i 옵션을 통해 사용할 인터페이스를 지정할 수 있습니다.
# tcpdump -c 10 -w /tmp/c10 -i bond0
tcpdump: listening on bond0, link-type EN10MB (Ethernet), capture size 96 bytes
10 packets captured
10 packets received by filter
0 packets dropped by kernel
  -D 옵션을 사용하면 패킷을 수집할 수 있는 인터페이스 목록을 보여줍니다.
# tcpdump -D
1.eth0
2.bond0
3.eth1
4.any (모든 인터페이스를 캡쳐하는 가상 장치)
5.lo
  수집할 패킷의 출발지나 목적지(또는 둘 다)를 지정하는 것도 가능합니다. 다만 출발지를 10.20.30.40로 지정하고 목적지를 10.20.30.50으로 지정했다면 10.20.30.50이 10.20.30.40에게 응답하는 패킷을 볼 수 없습니다. 서로의 역할이 뒤바꼈기 때문이죠. 특정 시스템으로 향하거나 그곳으로부터 오는 것을 모두 볼 때는 "host"라는 단어를 사용할 수도 있습니다.
# tcpdump -c 100 src fermion.particles.org
# tcpdump host boson.particles.org -w /tmp/boson$$
  비슷한 명령어를 통해 출발 포트나 목적 포트를 지정하는 것도 가능합니다. 아래의 예는 로컬 웹 서버로 가는 트래픽을 수집합니다.
# tcpdump -i bond0 dst port 80
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on bond0, link-type EN10MB (Ethernet), capture size 96 bytes
14:38:13.301801 IP nagios.particles.com.59344 > www.particles.org.http: S 3558234
391:3558234391(0) win 5840 <mss 1460,sackOK,timestamp 3398452148 0,nop,wscale 7>
14:38:13.301900 IP nagios.particles.com.59344 > www.particles.org.http: . ack 231
4423727 win 46 <nop,nop,timestamp 3398452148 2437740292>
  수집하는 패킷을 어떤 모습으로 출력시킬지도 선택할 수 있습니다. 아래는 수집한 패킷을 헥스와 ASCII 형태로 모두 출력하고 있습니다.
# tcpdump -i bond0 -c 1 -XX
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on bond0, link-type EN10MB (Ethernet), capture size 96 bytes
17:38:31.570524 IP xyz-boson-1.particles.com.ssh > 10.20.30.115.54669: P 3162608
328:3162608524(196) ack 830478067 win 80
        0x0000:  0000 0c07 ac01 782b cb5f a949 0800 4510  ......x+._.I..E.
        0x0010:  00ec 3cc6 4000 4006 0025 0a01 029b 0a02  ..<.@.@..%......
        0x0020:  e673 0016 d58d bc81 92c8 3180 16f3 5018  .s........1...P.
        0x0030:  0050 33c4 0000 8775 514e a605 e7f7 505c  .P3....uQN....P\
        0x0040:  f6e6 559e 3bc7 2317 f28d 9a29 8798 cf04  ..U.;.#....)....
        0x0050:  b4a7 36f0 30e9 89d1 1da0 0860 3bb7 cfed  ..6.0......`;...
2015/03/03 15:12 2015/03/03 15:12
Posted
Filed under 프로그램과 명령어/관리와 유지보수
참조 원문: RHEL 7 / CentOS 7 : Single User Mode / Recovering / Reset Root Password

기존 RHEL/CentOS 5~6까진 '싱글 유저 모드'라는 상태에서 패스워드를 복구했지만 RHEL/CentOS 7부터는 그것이 '복구 모드(Rescue Mode)' 또는 '비상 모드(Emergency Mode)'라는 이름으로 바꼈습니다. 아래는 root 패스워드를 다시 설정하는 방법입니다.

  1. 부팅해서 GRUB 2 부트 스크린이 나왔을 때 e 키를 눌러 수정 모드로 진입
  2. 'linux' 라인(UEFI의 경우 'linuxefi' 라인)의 끝에 아래의 파라미터를 추가(VMware, KVM, VirtualBox에서는 아래 대신 'rb.break'라고 적는다.
    init=/bin/sh
    이러면 리눅스 커널이 시스템 init 데몬 대신 /bin/sh를 실행할 것이다. 그러므로 일부 기능의 사용이 제한되거나 불가할 수 있다.
    중요: 부팅 메시지를 보려면 'rhgb'와 'quiet' 파라미터가 없어야 한다.
  3. Ctrl+x를 눌러 지정한 파라미터로 부팅을 한다. 쉘 프롬프트가 나타날 것이다.
  4. 파일 시스템은 읽기 전용으로 마운트 된다. 파일시스템에 쓰기를 할 수 없다면 패스워드를 바꿀 수 없으므로 아래 명령어를 통해 다시 마운트한다.
    # mount -o remount,rw /
  5. 'passwd' 명령어를 실행하여 패스워드를 변경한다. 참고로 쓰기가 불가능한 상태라면 명령어 사용 시 아래의 에러를 보게 된다.
    Authentication token manipulation error
  6. 변경된 파일의 SELinux 컨텍스트가 부팅 후 적절히 복구될 수 있도록 아래 명령어를 실행한다.
    # touch /.autorelabel
  7. 'exec /sbin/init' 명령어를 실행하여 시스템 부팅을 재개한다. exec 명령어로 다른 명령어를 실행하면 새로운 프로세스를 생성하고 쉘을 그 프로세스로 교체하는데 이 경우 쉘이 init으로 교체가 된다. 또 다른 방법으로는 'exec /sbin/reboot' 명령어를 실행하여 시스템을 리부팅하는 방법이 있다.
2014/11/17 17:10 2014/11/17 17:10
Posted
Filed under 프로그램과 명령어/서버와 서비스
참조 원문: How to set up a secure FTP service with vsftpd on Linux

  FTP 자체는 안전한 프로토콜로서 설계된 것이 아니라서 일반 FTP 서비스는 Man in the Middle이나 Brute Force 같은 일반적인 공격에 취약합니다. 그래서 많은 FTP 서버들이 보안 기능을 추가로 사용합니다. 예를 들어 FTPS(FTP Secure)는 SSL/TLS 인증서를 이용해 종단간에 데이터를 암호화합니다. FTPS는 설정에 따라 암호화 연결과 비암호화 연결 중 하나만을 지원하거나 둘 다 지원할 수 있습니다. SFTP(SSH FTP)는 또 다른 보안 방식으로 SSH를 이용하는 형태로 만들어졌으며 다른 보안 프로토콜과 함께 사용할 수 있습니다.

  이 글에서는 SSL/TLS를 활성화한 vsftpd를 이용해 FTP 서비스를 운영하는 법을 설명합니다.

  기본적으로 알고 있어야 하는 것으로 일반적인 FTP 서버는 데이터 전송을 위해 TCP 20번 포트를 열고 있으며 명령어 전송을 위해 21번 포트(컨트롤 포트라고도 부름)를 열고 있습니다. 접속 처리와 명령어 파라미터의 교환은 21번 포트를 통해 이뤄집니다. FTP 접속에는 2가지 방식이 있는데 하나는 액티브 모드이며 다른 하나는 패시브 모드입니다. 액티브 모드로 접속 중일 때는 서버가 자신의 20번 포트(데이터)로부터 클라이언트를 향해 접속을 시도합니다. 패시브 모드로 접속 중일 때는 각 클라이언트 세션을 위한 랜덤 포트를 열어서 그 포트를 클라이언트에게 통보합니다. 그러면 통보를 받은 클라이언트는 서버의 해당 랜덤 포트를 향해 접속을 시도합니다.

  RFC 1635에 따르면 FTP는 패스워드가 필요 없는 anonymous라는 공용 계정, 그리고 ftp라는 패스워드를 가진 ftp라는 공용 계정을 둘 중 하나만 지원할 수도 있고 둘 다 지원할 수도 있습니다. 거기에 더하여 vsftpd는 로컬 계정을 이용한 로그인도 지원합니다. 서버에 등록된 계정으로 접속하면 해당 계정의 홈 디렉토리에 접근할 수 있습니다.

리눅스에 vsftpd 설치
  우분투, 데비안, 리눅스 민트 등에 vsftpd를 설치할 때는 apt-get 명령어를 사용합니다. vsftpd 서비스는 부팅 시 자동으로 실행됩니다.
$ sudo apt-get install vsftpd
  센트OS, 페도라, RHEL 등에 vsftpd를 설치할 때는 yum 명령어를 사용합니다. 서비스 시작과 부팅 시 실행은 아래와 같이 따로 설정해야 합니다.
# yum install vsftpd
# service vsftpd start
# chkconfig vsftpd on
  vsftpd를 사용한 FTP 서비스의 가장 기본적인 준비는 이것으로 끝입니다. 브라우저에서 ftp://[서버이름/IP] 라는 형태로 접속할 수도 있고 FileZilla 같은 FTP 클라이언트를 이용해서 패스워드 없이 anonymous라는 계정명을 사용하거나 계정명과 패스워드 모두 ftp를 사용하여 접속할 수도 있습니다.

  vsftpd가 설치되면 홈 디렉토리가 /var/ftp인 ftp라는 시스템 계정이 시스템에 추가됩니다. 공용 FTP 접속이 형성될 때마다 접속자는 /var/ftp로 보내집니다. 따라서 우리는 이 디렉토리를 FTP 공용 계정의 홈 디렉토리로 사용할 수 있습니다. /var/ftp 디렉토리에 있는 모든 파일과 디렉토리는 ftp://[서버이름/IP]로 접속하여 접근할 수 있습니다.

  vsftpd 설정 파일의 위치는 아래와 같습니다.
  • 우분투, 데비안, 리눅스 민트 등: /etc/vsftpd.conf
  • 센트OS, 페도라, RHEL: /etc/vsftpd/vsftpd.conf

FTP 계정 튜닝
  공용 계정을 비활성화하려면 vsftpd.conf 파일에서 anonymous 계정을 명시적으로 비활성화시켜야 합니다. 디폴트 값이 활성화이기 때문에 주석처리하는 것은 소용이 없습니다.
anonymous_enable=NO
  그리고 서비스를 다시 시작합니다.
# service vsfptd restart
  이러면 이미 시스템에 존재하는 계정을 통해서만 접속할 수 있습니다.

  로컬 계정을 활성화하거나 비활성화하려면 vsftpd.conf 파일을 수정해야 합니다. 로컬 계정을 비활성화할 거면anonymous 계정으로 접속할 수 있도록 만들어놔야 합니다.
local_enable=YES/NO
  적용하려면 마찬가지로 서비스를 다시 시작합니다.
# service vsfptd restart
  특정 계정으로 접속하려면 URI를 ftp://계정명@[서버명/IP]로 사용하면 됩니다. 특정 계정으로 접속하면 해당 계정의 홈 디렉토리에 접근할 수 있습니다.

계정의 홈 디렉토리 밖으로 못 나오게 만들기
  FTP로 접속을 하면 사용자는 권한에 문제가 없는 한 시스템 전체를 돌아다닐 수 있습니다. 이는 모든 사용자가 /etc, /var, /usr 등 모든 시스템 파일들을 읽을 수 있게 해주기 때문에 문제가 있습니다.

  사용자가 FTP로 접속하고 있는 동안 자신의 홈 디렉토리 밖으로 못 나가게 만들려면 파라미터를 아래처럼 수정합니다.
chroot_local_user=YES
  마찬가지로 서비스를 다시 시작합니다.
# service vsftpd restart

SSL/TLS 암호화 적용
  FTP는 평문을 전송하는 프로토콜이기 때문에 클라이언트와 FTP 서버 사이의 파일 전송 트래픽을 누구나 쉽게 훔쳐볼 수 있습니다. 그런 FTP 통신을 암호화하기 위해 SSL/TLS를 활성화할 수 있습니다.

  첫 번째 할 일은 SSL/TLS 인증서와 그에 따른 비밀 키를 만드는 겁니다. 아래 명령어를 통해 인증서와 키를 생성해 한 파일에 저장합니다.

데비안/우분투
$ sudo openssl req -x509 -days 365 -newkey rsa:2048 -nodes -keyout /etc/vsftpd.pem -out /etc/vsftpd.pem
센트OS/페도라/RHEL
$ sudo openssl req -x509 -days 365 -newkey rsa:2048 -nodes -keyout /etc/vsftpd/vsftpd.pem -out /etc/vsftpd/vsftpd.pem
  그리고 나서 아래의 내용을 vsftpd.conf 파일에 적용합니다.
# TLS/SSL 활성화
ssl_enable=YES

# 로그인할 때 클라이언트가 반드시 TLS를 사용하도록 만들기
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
require_ssl_reuse=NO
ssl_ciphers=HIGH

# SSL 인증서/비밀 키의 위치 지정(Debian/Ubuntu)
# CentOS/Fedora/RHEL는 /etc/vsftpd/vsftpd.pem로 수정
rsa_cert_file=/etc/vsftpd.pem
rsa_private_key_file=/etc/vsftpd.pem

# 패시브 모드 접속을 위한 포트 범위 설정
pasv_max_port=65535
pasv_min_port=64000
  이제 vsftpd를 서비스를 다시 시작합니다.
# service vsftpd restart

접속과 대역폭 제어
  vsftpd는 접속과 사용자 대역폭을 제어할 수 있는 방법을 몇 가지 제공하는데 아래는 그 중 일부의 예입니다.
## anonymous 세션별 대역폭을 대략 30 KB/s로 설정
anon_max_rate=30000

## 각 로컬 계정의 대역폭을 대략 30 KB/s로 설정
local_max_rate=30000

## 클라이언트 세션이 300초 동안 활동이 없을 경우 세션을 끊어버림
idle_session_timeout=300

## 소스 IP 당 최고 접속 수. DoS와 DDoS 공격 방어에 유용
max_per_ip=50

방화벽 튜닝
  iptables 방화벽을 사용하고 있다면 FTP 트래픽을 허용하도록 방화벽 규칙을 조정해야 합니다.
# iptables -I INPUT -p tcp --dport 20 -j ACCEPT
# iptables -I INPUT -p tcp --dport 21 -j ACCEPT
# iptables -I INPUT -p tcp --dport 64000:65535 -j ACCEPT
  처음 2개는 FTP 데이터/제어 포트의 트래픽을 허용하는 규칙입니다. 마지막은 앞서 vsftpd.conf 파일에서 정의한 패시브 모드용 포트들의 트래픽을 허용하는 규칙입니다.

로그 활성화
  이 글을 따라하던 중 무슨 문제가 있을 경우에 대비하여 vsftpd.conf 파일에서 아래의 파라미터를 조정하여 로그를 활성화할 수 있습니다.
xferlog_enable=YES
xferlog_std_format=NO
xferlog_file=/var/log/vsftpd.log
log_ftp_protocol=YES
debug_ssl=YES
# service vsftpd restart

FileZilla를 이용하여 FTP 서버에 접속하기
  SSL/TLS를 지원하는 FTP 클라이언트 중 FileZilla를 사용해보겠습니다. SSL/TLS를 사용하는 FTP 서버에 접속할 땐 아래처럼 설정을 합니다.

출처: http://xmodulo.com/secure-ftp-service-vsftpd-linux.html

  SSL/TLS를 사용하는 서버에 접속할 때 그 서버에 처음 접속하는 거라면 그 서버의 인증서가 표시됩니다. 인증서를 확인하고 로그인을 진행합니다.

출처: http://xmodulo.com/secure-ftp-service-vsftpd-linux.html


sftpd 트러블슈팅
1. FTP 서버에 접속할 때 아래와 같은 에러가 발생한다면 FTP 트래픽이 방화벽에 막히고 있을 가능성이 높습니다. 위에서 설명한 것처럼 필요한 포트를 방화벽에서 열어야 합니다.
ftp: connect: No route to host
2. 센트OS/RHEL에서 실행 중인 chroot 상태의 FTP 서버에 접속할 때 아래와 같은 에러가 발생할 경우 SELinux를 비활성화하거나 SELinux의 설정 값을 변경해야 합니다.
500 OOPS: cannot change directory:/home/dev
Login failed.
  SELinux의 설정 값을 변경하여 해결하려면 아래의 명령어를 사용합니다.
$ sudo setsebool -P ftp_home_dir on
3. FileZilla로 SSL/TLS를 사용하는 서버에 접속할 때 아래와 같은 에러가 발생한다면 vsftpd.conf 파일에 "ssl_ciphers=HIGH"를 추가합니다. vsftpd의 디폴트 암호화 방식(DES-CBC3-SHA)을 FileZilla가 지원하지 않아서 생기는 문제입니다.
Trace:    GnuTLS alert 40: Handshake failed
Error:    GnuTLS error -12: A TLS fatal alert has been received.
"SSL_accept failed: error:1408A0C1:SSL routines:SSL3_GET_CLIENT_HELLO:no shared cipher"


2014/10/28 16:06 2014/10/28 16:06
Posted
Filed under 프로그램과 명령어/네트워크와 보안
참조 원문: 10 examples of Linux ss command to monitor network connections

ss - socket statistics
  ss 명령어는 deprecated 된 netstat 명령어를 대체하는 명령어입니다. netstat 보다 많은 정보를 출력할 수 있으며 더 빠릅니다. netstat 명령어가 정보를 수집하기 위해 다양한 /proc 파일들을 읽는데 이러한 방식은 표시할 연결이 많을 경우 속도를 느리게 만듭니다. 이와 달리 ss 명령어는 정보를 커널 스페이스에서 직접 가져옵니다. ss 명령어에 사용하는 옵션은 netstat과 매우 비슷하기 때문에 쉽게 대체 사용이 가능합니다.

1. 모든 연결 출력
$ ss | less
Netid  State      Recv-Q Send-Q   Local Address:Port       Peer Address:Port  
u_str  ESTAB      0      0                    * 15545                 * 15544 
u_str  ESTAB      0      0                    * 12240                 * 12241 
u_str  ESTAB      0      0      @/tmp/dbus-2hQdRvvg49 12726                 * 12159 
u_str  ESTAB      0      0                    * 11808                 * 11256 
u_str  ESTAB      0      0                    * 15204                 * 15205 
.....

2. TCP, UDP, UNIX 연결 필터링
  TCP는 t, UDP는 u, UNIX는 x 옵션 사용
$ ss -t 또는 ss -A tcp
State      Recv-Q Send-Q    Local Address:Port        Peer Address:Port  
ESTAB      0      0           192.168.1.2:43839     108.160.162.37:http   
ESTAB      0      0           192.168.1.2:43622     199.59.149.201:https  
ESTAB      0      0           192.168.1.2:33141      83.170.73.249:ircd   
ESTAB      0      0           192.168.1.2:54028     74.125.135.125:xmpp-client
  기본적으로 t 옵션은 "established"나 "CONNECTED" 상태인 연결만 출력합니다. 즉, "LISTENING" 상태인 것들은 출력하지 않습니다. 그것들까지 출력하려면 -a 옵션을 t 옵션과 함께 사용하면 됩니다.
$ ss -ua 또는 ss -a -A udp
State      Recv-Q Send-Q    Local Address:Port        Peer Address:Port  
UNCONN     0      0           192.168.1.2:48268                  *:*      
UNCONN     0      0           192.168.1.2:56575                  *:*      
UNCONN     0      0                     *:40309                  *:*      
UNCONN     0      0           192.168.1.2:56879                  *:*      
UNCONN     0      0                     *:49014                  *:*      
UNCONN     0      0           192.168.1.2:53124                  *:*      
UNCONN     0      0             127.0.1.1:domain                 *:*
  a 옵션은 "CONNECTED"와 "LISTENING" 상태의 소켓을 출력합니다. UDP는 연결이 없는 프로토콜이기 때문에 대부분의 경우 "ss -u" 명령어로는 아무 내용도 출력되지 않으므로 모든 UDP 연결을 출력하려면 a 옵션을 사용해야 합니다.

3. 호스트네임 해석 방지
  빠른 출력을 위해 n 옵션을 사용하여 IP 주소를 호스트네임으로 해석하는 것을 막을 수 있습니다. 다만 포트 번호도 해석하지 않게 됩니다.
$ ss -nt
State      Recv-Q Send-Q      Local Address:Port        Peer Address:Port
ESTAB      0      0             192.168.1.2:43839     108.160.162.37:80   
ESTAB      0      0             192.168.1.2:51350      74.125.200.84:443  
ESTAB      0      0             192.168.1.2:33141      83.170.73.249:6667 
ESTAB      0      0             192.168.1.2:54028     74.125.135.125:5222 
ESTAB      0      0             192.168.1.2:48156      66.196.120.44:5050

4. LISTENING 소켓만 출력
$ ss -ltn
State      Recv-Q Send-Q        Local Address:Port          Peer Address:Port
LISTEN     0      5                 127.0.1.1:53                       *:*    
LISTEN     0      128               127.0.0.1:631                      *:*    
LISTEN     0      128                     ::1:631                     :::*
  위 명령어는 모든 "listening" "tcp" 연결을 출력합니다. n 옵션은 IP 주소를 호스트네임으로 번역하는 것을 막아 출력을 더 빠르게 해줍니다.

  모든 listening udp 연결을 출력시키려면 t를 u로 바꿉니다.
$ ss -lun
State      Recv-Q Send-Q        Local Address:Port          Peer Address:Port
UNCONN     0      0                 127.0.1.1:53                       *:*    
UNCONN     0      0                         *:68                       *:*    
UNCONN     0      0               192.168.1.2:123                      *:*    
UNCONN     0      0                 127.0.0.1:123                      *:*    
UNCONN     0      0                         *:123                      *:*    
UNCONN     0      0                         *:5353                     *:*    
UNCONN     0      0                         *:47799                    *:*    
UNCONN     0      0                         *:25322                    *:*    
UNCONN     0      0                        :::54310                   :::*    
.....

5. 프로세스 이름과 PID 출력
  연결을 소유한 프로세스 이름/PID를 출력할 때는 p 옵션을 사용합니다.
$ ss -ltp
State      Recv-Q Send-Q    Local Address:Port        Peer Address:Port  
LISTEN     0      100           127.0.0.1:smtp                   *:*      
LISTEN     0      128           127.0.0.1:9050                   *:*      
LISTEN     0      128                   *:90                     *:*      
LISTEN     0      128                   *:db-lsp                 *:*        users:(("dropbox",3566,32))
LISTEN     0      5             127.0.0.1:6600                   *:*      
LISTEN     0      128           127.0.0.1:9000                   *:*        users:(("php5-fpm",1620,0),("php5-fpm",1619,0))
  root 권한으로 실행하면 더 많은 출력 결과가 나옵니다.
s -ltp
[sudo] password for enlightened:
State      Recv-Q Send-Q    Local Address:Port        Peer Address:Port  
LISTEN     0      100           127.0.0.1:smtp                   *:*        users:(("master",2051,12))
LISTEN     0      128                   *:90                     *:*        users:(("nginx",1701,6),("nginx",1700,6),("nginx",1699,6),("nginx",1697,6),("nginx",1696,6))
LISTEN     0      5             127.0.0.1:6600                   *:*        users:(("mpd",2392,5))
LISTEN     0      128           127.0.0.1:9000                   *:*        users:(("php5-fpm",1620,0),("php5-fpm",1619,0),("php5-fpm",1616,7))
LISTEN     0      16                    *:2633                   *:*        users:(("oned",1853,16))
LISTEN     0      50            127.0.0.1:mysql                  *:*        users:(("mysqld",1095,10))
LISTEN     0      5             127.0.1.1:domain                 *:*        users:(("dnsmasq",1347,5))
LISTEN     0      32                    *:ftp                    *:*        users:(("vsftpd",1051,3))
LISTEN     0      128                   *:ssh                    *:*        users:(("sshd",1015,3))
LISTEN     0      128           127.0.0.1:ipp                    *:*        users:(("cupsd",688,11))
LISTEN     0      128                  :::http                  :::*        users:(("apache2",5322,4),("apache2",5321,4),("apache2",5317,4),("apache2",5316,4),("apache2",5313,4),("apache2",2505,4))
LISTEN     0      128                  :::ssh                   :::*        users:(("sshd",1015,4))
LISTEN     0      128                 ::1:ipp                   :::*        users:(("cupsd",688,10))

6. 통계 현황 출력
$ ss -s
Total: 526 (kernel 0)
TCP:   10 (estab 7, closed 0, orphaned 0, synrecv 0, timewait 0/0), ports 0

Transport Total     IP        IPv6
*      0         -         -       
RAW      0         0         0       
UDP      15        9         6       
TCP      10        9         1       
INET      25        18        7       
FRAG      0         0         0

7. 연결 유지 시간 출력
$ ss -tn -o
State      Recv-Q Send-Q      Local Address:Port        Peer Address:Port
ESTAB      0      0             192.168.1.2:43839     108.160.162.37:80   
ESTAB      0      0             192.168.1.2:36335     204.144.140.26:80     timer:(keepalive,26sec,0)
ESTAB      0      0             192.168.1.2:33141      83.170.73.249:6667 
ESTAB      0      0             192.168.1.2:58857      74.121.141.84:80     timer:(keepalive,23sec,0)
ESTAB      0      0             192.168.1.2:42794     173.194.40.239:80     timer:(keepalive,32sec,0)

8. IPv4 또는 IPv6 소켓 연결만 출력
  IPv4 소켓 연결만 출력하려면 '-f inet' 옵션이나 '-4' 옵션을 사용한다.
$ ss -tl -f inet
State      Recv-Q Send-Q    Local Address:Port        Peer Address:Port  
LISTEN     0      100           127.0.0.1:smtp                   *:*      
LISTEN     0      128           127.0.0.1:9050                   *:*      
LISTEN     0      128                   *:90                     *:*      
LISTEN     0      128                   *:db-lsp                 *:*      
LISTEN     0      5             127.0.0.1:6600                   *:*
  IPv6 연결만 출력하려면 '-f inet6' 옵션이나 '-6' 옵션을 사용한다.
$ ss -tl6
State      Recv-Q Send-Q    Local Address:Port        Peer Address:Port  
LISTEN     0      100                 ::1:smtp                  :::*      
LISTEN     0      128                  :::12865                 :::*      
LISTEN     0      128                  :::http                  :::*      
LISTEN     0      128                  :::ssh                   :::*      
LISTEN     0      128                 ::1:ipp                   :::*

9. TCP 상태에 따른 필터링
  특정 연결에 대해서만 출력시킬 수 있다. 필터 표현식은 모든 옵션 뒤에 나열해야 한다. 아래와 같은 형식으로 사용할 수 있다.
$ ss [ OPTIONS ] [ STATE-FILTER ] [ ADDRESS-FILTER ]
  "CONNECTED" 상태인 모든 IPv4 TCP 소켓을 출력하는 방법은 아래와 같다.
$ ss -t4 state established
Recv-Q Send-Q         Local Address:Port             Peer Address:Port  
0      0                192.168.1.2:54436          165.193.246.23:https  
0      0                192.168.1.2:43386          173.194.72.125:xmpp-client
0      0                192.168.1.2:38355           199.59.150.46:https  
0      0                192.168.1.2:56198          108.160.162.37:http
  'TIME-WAIT' 상태인 소켓을 출력하는 방법은 아래와 같다.
$ ss -t4 state time-wait
Recv-Q Send-Q         Local Address:Port             Peer Address:Port  
0      0                192.168.1.2:42261           199.59.150.39:https  
0      0                  127.0.0.1:43541               127.0.0.1:2633
  상태는 아래와 같은 것들이 있다.
1. established
2. syn-sent
3. syn-recv
4. fin-wait-1
5. fin-wait-2
6. time-wait
7. closed
8. close-wait
9. last-ack
10. closing
11. all - 위의 모든 상태 포함
12. connected - listen과 closed를 제외한 모든 상태
13. synchronized - syn-sent를 제외한 모든 connected 상태
14. bucket - 미니소켓으로 유지되고 있는 상태(예: time-wait과 syn-recv)
15. big - bucket과 정반대 상태
  syn-sent, syn-recv를 포함한 많은 상태들은 볼 일이 많지 않다. 그런 상태는 매우 짧은 시간 동안만 존재하기 때문이다. 그런 상태를 실시간으로 감지하려면 watch 명령어를 사용하는 것이 좋다.
$ watch -n 1 "ss -t4 state syn-sent"
  위의 명령어를 실행한 후 브라우저에서 아무 웹사이트나 열어보거나 뭔가를 다운로드 하고 즉시 출력 결과를 살펴보면 짧은 시간 동안 아래처럼 특수한 상태를 확인할 수 있다.
Every 1.0s: ss -t4 state syn-sent                   Tue Apr  1 10:07:33 2014
Recv-Q Send-Q           Local Address:Port               Peer Address:Port
0      1                  192.168.1.2:55089            202.79.210.121:https
0      1                  192.168.1.2:33733             203.84.220.80:https
0      1                  192.168.1.2:36240             106.10.198.33:https

10. 주소와 포트 번호로 출력 걸러내기
  출발지나 목적지 포트가 SSH인 모든 소켓 연결을 출력
$ ss -at '( dport = :ssh or sport = :ssh )'
State      Recv-Q Send-Q    Local Address:Port        Peer Address:Port  
LISTEN     0      128                   *:ssh                    *:*      
LISTEN     0      128                  :::ssh                   :::*
  목적지 포트가 443이나 80인 소켓
$ ss -nt '( dst :443 or dst :80 )'
State      Recv-Q Send-Q      Local Address:Port        Peer Address:Port
ESTAB      0      0             192.168.1.2:58844      199.59.148.82:443  
ESTAB      0      0             192.168.1.2:55320     165.193.246.23:443  
ESTAB      0      0             192.168.1.2:56198     108.160.162.37:80   
ESTAB      0      0             192.168.1.2:54889    192.241.177.148:443  
ESTAB      0      0             192.168.1.2:39893      173.255.230.5:80   
ESTAB      0      0             192.168.1.2:33440      38.127.167.38:443
  아래의 명령어로 위와 같은 효과를 얻을 수 있다.
$ ss -nt dst :443 or dst :80
  기타 예제
# 주소로 걸러내기
$ ss -nt dst 74.125.236.178

# CIDR 표기법도 지원
$ ss -nt dst 74.125.236.178/16

# 주소와 포트 모두 이용
$ ss -nt dst 74.125.236.178:80
  포트는 dport와 sport 옵션을 통해서도 걸러낼 수 있다. 포트 번호 앞에는 ":"을 반드시 붙여야 한다.
$ ss -nt dport = :80
State      Recv-Q Send-Q      Local Address:Port        Peer Address:Port
ESTAB      0      0             192.168.1.2:56198     108.160.162.37:80   
ESTAB      0      0             192.168.1.2:39893      173.255.230.5:80   
ESTAB      0      0             192.168.1.2:55043     74.125.236.178:80
  'ss -nt dst :80' 명령어로 위의 명령어와 같은 효과를 볼 수 있다.

  아래는 필터링에 대한 다른 예제이다.
# 출발지 주소가 127.0.0.1이며 출발지 포트가 5000보다 큰 경우
$ ss -nt src 127.0.0.1 sport gt :5000

# 로컬 SMTP(25번 포트) 소켓
$ sudo ss -ntlp sport eq :smtp

# 포트 번호가 25보다 큰 경우
$ sudo ss -nt sport gt :1024

# 원격지의 포트가 100 미만인 경우
$ sudo ss -nt dport \< :100

# 원격지 포트 80번에 대한 연결
$ sudo ss -nt state connected dport = :80
  아래 연산자는 포트 번호를 비교할 때 사용할 수 있다.
<= or le : 포트 이하
>= or ge : 포트 이상
== or eq : 해당 포트
!= or ne : 해당 포트가 아닌 포트
< or gt : 포트 미만
> or lt : 포트 초과
  필터 문법에 대한 문서는 iproute2-doc 패키지(데비안/우분투 시스템 기준)에 있으며 /usr/share/doc/iproute2-doc/ss.html 파일에 ss 명령어의 필터 문법이 상세히 기록되어 있다.


2014/10/21 15:45 2014/10/21 15:45
Posted
Filed under 프로그램과 명령어/서버와 서비스
참조1: RHEV 평가판 지침서
참조2: RHEV 설치 지침서
참조3: RHEV 매니저 릴리즈 노트
참조4: RHEV 3.0 on VMware Workstation 9

본 문서는 가상 머신에 RHEV 솔루션을 설치하고 연동하는 방법을 설명합니다.

1. 가입 및 평가판 신청
  1. 사이트에 가입하여 로그인 후 Evaluations & Demos 클릭. Red Hat Enterprise Virtualization Evaluation 클릭.
  2. 체험판 양식을 입력하면 메일로 섭스크립션 메일이 도착. 상단에 Subscriptions -> Your Subscriptions -> Active Subscriptions에서도 확인 가능.
  3. RHEV 외에 RHEL 자체도 필요하므로 다시 위 주소로 가서 Evaluations & Demos에서 Red Hat Enterprise Linux 30-Day Evaluation 클릭. 같은 방법으로 양식을 입력하여 30일 평가판 섭스크립션 받음.
2. 이미지 파일 다운로드
  1. 상단에 Products -> Our Products -> Red Hat Enterprise Virtualization -> Evaluations 클릭.
  2. 아래 '1. Download Red Hat Enterprise Linux 6 Server'에 있는 버튼을 클릭. Binary DVD를 다운받음.
  3. 다시 되돌아와 '2. Download Red Hat Enterprise Virtualization Hypervisor'에 RHEV-H Image를 다운받음.
3. RHEL 설치 및 네트워크 설정
  • Red Hat Enterprise Virtualization Manager를 설치하기 위해 먼저 가상 머신에 Red Hat Enterprise Linux를 설치한다.(RHEVM 혼자 요구하는 최소 램이 4기가이므로 그보다 높아야 한다.)
  • 설치 패키지를 선택하는 단계에서 기본 옵션인 Basic Server를 선택한다.
  • 기본 네트워크 설정은 system-config-network 명령어로 설정한다. RHEV를 사용하려면 도메인(FQDN)이 반드시 필요한데 hosts 파일을 설정하여 이를 우회할 수 있다.
  • 네트워크를 위와 같이 수동으로 설정했다면 /etc/sysconfig/network-scripts 디렉토리의 인터페이스 설정 파일(if-eth0)에서 onboot을 yes로 바꿔 서비스 시작시 바로 사용할 수 있도록 하자.
  • 설정했던 IP와 사용할 도메인 쌍을 hosts 파일에 추가한다.
4. RHN 등록 및 채널 추가 후 Red Hat Enterprise Virtualization Manager 설치
주의: 공식적으로 레드햇은 RHN 대신 RHSM(Redhat Subscription Manager)을 추천하는 것으로 보이나 RHEV 평가판 지침서에서 RHN을 사용하고 있기 때문에 그냥 RHN으로 처리.
  1. rhn_register 명령어로 RHN 등록을 한다. RHN 계정명과 패스워드를 입력한다.
  2. yum -y update 명령어로 패키지들을 업데이트 후 리붓을 한다.
  3. redhat의 customer portal 홈페이지에서 로그인을 한 후 Subscriptions -> RHN Classic -> Resistered Systems 선택 후 등록했던 시스템 이름을 클릭. Alter Channel Subscriptions 클릭.
  4. Software Channel Subscriptions에서 아래 채널들 선택(Additional Services Channels for Red Hat Enterprise Linux 6 for x86_64 아래 있는 것도 있음):
    - RHEL Server Supplementary (v. 6 64-bit x86_64)
    - Red Hat Enterprise Virtualization Manager (version.number x86_64)
    - Red Hat JBoss EAP (v 6) for 6Server x86_64
  5. yum -y install rhevm 명령어로 Red Hat Enterprise Virtualization Manager를 설치. rhevm-setup 명령어로 인스톨러 실행. 설치 중 중요한 사항은 아래와 같다.
    - 해당 서버의 80, 443 포트는 접근할 수 있는 상태여야 한다.
    - (ISO 도메인을 위한)공유에서 NFS 공유를 설정하도록 했다면 RHEVM이 설치되는 머신에서 공유가 시작된다.
    - 선택한 스토리지 종류가 데이터 센터와 클러스터를 생성할 때 쓰일 것이다. 그 후에 Administration Portal에서 스토리지를 추가할 수 있다.
5. Red Hat Enterprise Virtualization Hypervisor(RHEVH) 설치
  1. VMware에서 새로운 가상 머신을 생성하며 이때 'install the operating system later'를 선택.
  2. 시스템 스펙으로 2 CPU, 8 GB 램, 'LSI Logic SAS' SCSI 컨트롤러(중요), OS는 RHEL을 선택.
  3. 탐색기로 VM 파일이 저장된 곳으로 가서 vmx 파일에 아래의 줄을 추가.
    apic.xapic.enable = "FALSE"
  4. 같은 파일에서 vcpu.hotadd를 TRUE에서 FALSE로 변경.
    vcpu.hotadd = "TRUE" -> vcpu.hotadd = "FALSE"
  5. 가상 머신 설정에서 Processors 선택. 오른쪽의 Virtualization engine에서 밑에 두 가상화 옵션 체크.
  6. 레드햇 홈페이지에서 RHEV Hypervisor를 다운받아 그 이미지로 부팅.
  7. GRUB 창에서 tab을 눌러 부팅 옵션 수정에 들어가 quiet를 제거하고 엔터를 눌러 설치.


  위의 과정을 모두 거치면 일단 웹 관리 포탈에 접속할 수 있습니다. 하지만 스토리지 도메인 설정이 되어 있지 않기 때문에 아직 정상적인 사용은 불가능합니다. 이후 본격적인 내용은 위 참조1의 평가판 지침서를 참조하시기 바랍니다.

2014/02/07 15:00 2014/02/07 15:00
Posted
Filed under 프로그램과 명령어/관리와 유지보수
참조 원문 : 10 basic examples of Linux ps command

  ps 명령어는 시스템에서 실행 중인 프로세스를 보는 가장 기본적인 명령어 중 하나입니다. 유저 id, CPU 사용률, 메모리 사용률, 명령어 이름 등의 정보를 제공하죠. 다만 top이나 htop 명령어와 달리 실시간으로 보여주진 않습니다. 그래도 리눅스 사용자라면 기본적으로 알아야 합니다.

  ps 명령어에는 2가지의 사용법이 있습니다. 바로 BSD 방식과  UNIX 방식이죠. ps를 처음 배울 땐 두 방식이 있다는 것조차 모르는 경우가 많고 알아도 잘못 사용하는 경우가 많습니다. 예를 들어 "ps aux"는 "ps -aux"와 다릅니다. "-u"는 특정 유저의 프로세스를 볼 때 사용하고 "u"는 자세한 정보를 출력시킬 때 사용합니다.

  BSD 방식은 옵션 앞에 "-"를 붙이지 않습니다.
ps aux
  UNIX/LINUX 방식은 옵션 앞에 "-"를 붙입니다.
ps -ef
  리눅스의 경우 두 방식을 동시에 사용하는 것이 가능합니다. 예를 들어 "ps ax -f" 같은 것도 실행할 수 있습니다.


1. 모든 프로세스 출력
  아래의 명령어로 모든 프로세스를 볼 수 있습니다. 파이프로 출력을 "less" 같은 명령어에 넘기면 스크롤하며 볼 수 있습니다.
$ ps ax
$ ps -e
  "u"나 "-f" 옵션을 사용하면 자세한 정보를 볼 수 있습니다.
$ ps aux
$ ps -ef
  참고로 유저명이 8글자를 넘을 경우 공간 때문에 유저명 대신 UID가 USER 칼럼에 표시됩니다.

2. 특정 유저의 프로세스 출력
  특정 유저가 소유한 프로세스만 보고 싶을 경우 "-u" 옵션 뒤에 유저명을 입력하면 됩니다. 콤마로 여러 유저명을 입력할 수 있습니다.
$ ps -f -u www-data
UID        PID  PPID  C STIME TTY          TIME CMD
www-data  1329  1328  0 09:32 ?        00:00:00 nginx: worker process
www-data  1330  1328  0 09:32 ?        00:00:00 nginx: worker process
www-data  1332  1328  0 09:32 ?        00:00:00 nginx: worker process
www-data  1377  1372  0 09:32 ?        00:00:00 php-fpm: pool a.localhost                                              
www-data  1378  1372  0 09:32 ?        00:00:00 php-fpm: pool a.localhost                                              
www-data  4524  2359  0 10:03 ?        00:00:00 /usr/sbin/apache2 -k start
www-data  4527  2359  0 10:03 ?        00:00:00 /usr/sbin/apache2 -k start
www-data  4528  2359  0 10:03 ?        00:00:00 /usr/sbin/apache2 -k start

3. 이름이나 프로세스 id로 출력
  프로세스의 이름이나 실행할 때 사용한 명령어로 프로세스를 찾으려면 "-C" 옵션 뒤에 검색할 단어를 입력합니다.
$ ps -C apache2
  PID TTY          TIME CMD
 2359 ?        00:00:00 apache2
 4524 ?        00:00:00 apache2
 4525 ?        00:00:00 apache2
...
  프로세스 id로 검색하려면 "-p" 옵션 뒤에 (콤마로 나눠서)프로세스 id들을 입력합니다.
$ ps -f  -p 3150,7298,6544
  "-C" 옵션을 사용할 땐 프로세스의 이름을 정확히 적어야 하며 부분적으로 적거나 와일드카드를 사용할 순 없습니다. 그렇기 때문에 일반적으로 프로세스를 검색할 땐 grep 명령어를 사용합니다.
$ ps -ef | grep apache

4. CPU나 메모리 사용률로 정렬
  시스템 관리자라면 메모리나 CPU를 많이 차지하는 프로세스를 찾을 때가 많습니다. 정렬 옵션을 사용하면 특정 필드나 파라미터를 기준으로 프로세스 목록을 정렬할 수 있습니다.

  다수의 필드를 기준으로 삼을 때는 "--sort" 옵션 뒤에 원하는 필드들을 콤마로 구분하여 적으면 됩니다. 또한 각 필드명 앞에 "-"나 "+"를 붙여 각각 내림차순이나 오름차순으로 정렬이 가능합니다.
$ ps aux --sort=-pcpu,+pmem
  아래는 CPU를 가장 많이 소모하고 있는 프로세스 5개를 보는 모습입니다.
$ ps aux --sort=-pcpu | head -5
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  2.6  0.7  51396  7644 ?        Ss   02:02   0:03 /usr/lib/systemd/systemd --switched-root --system --deserialize 23
root      1249  2.6  3.0 355800 30896 tty1     Rsl+ 02:02   0:02 /usr/bin/X -background none :0 vt01 -nolisten tcp
root       508  2.4  1.6 248488 16776 ?        Ss   02:02   0:03 /usr/bin/python /usr/sbin/firewalld --nofork
silver    1525  2.1  2.3 448568 24392 ?        S    02:03   0:01 /usr/bin/python /usr/share/system-config-printer/applet.py

5. 트리 형태로 보기
  프로세스 중 다수는 다른 부모 프로세스로부터 fork된 것이며 이 부모와 자식 관계를 파악하는 것이 중요할 때가 있습니다. 아래는 이름이 apache2인 프로세스를 검색하여 트리 형태로 출력하는 모습입니다.
$ ps -f --forest -C apache2
UID        PID  PPID  C STIME TTY          TIME CMD
root      2359     1  0 09:32 ?        00:00:00 /usr/sbin/apache2 -k start
www-data  4524  2359  0 10:03 ?        00:00:00  \_ /usr/sbin/apache2 -k start
www-data  4525  2359  0 10:03 ?        00:00:00  \_ /usr/sbin/apache2 -k start
www-data  4526  2359  0 10:03 ?        00:00:00  \_ /usr/sbin/apache2 -k start
www-data  4527  2359  0 10:03 ?        00:00:00  \_ /usr/sbin/apache2 -k start
www-data  4528  2359  0 10:03 ?        00:00:00  \_ /usr/sbin/apache2 -k start
  참고로 트리 형태로 출력할 땐 정렬을 사용하지 않아야 합니다.

6. 부모 프로세스의 자식 프로세스 출력
  아래는 apache 프로세스로부터 fork된 모든 프로세스를 찾는 예입니다.
$ ps -o pid,uname,comm -C apache2
  PID USER     COMMAND
 2359 root     apache2
 4524 www-data apache2
 4525 www-data apache2
 4526 www-data apache2
 4527 www-data apache2
 4528 www-data apache2
[term]

The first process that is owned by root is the main apache2 process and all other apache2 processes have been forked out of this main process. The next command lists all child apache2 processes using the pid of the main apache2 process

[term]
$ ps --ppid 2359
  PID TTY          TIME CMD
 4524 ?        00:00:00 apache2
 4525 ?        00:00:00 apache2
 4526 ?        00:00:00 apache2
 4527 ?        00:00:00 apache2
 4528 ?        00:00:00 apache2

7. 프로세스의 쓰레드 출력
  "-L" 옵션을 사용하면 프로세스들의 쓰레드들을 출력할 수 있습니다. 한 프로세스의 모든 쓰레드를 출력할 수도 있고 모든 프로세스의 쓰레드를 출력할 수도 있습니다. 아래는 PID가 3150인 프로세스가 소유한 모든 쓰레드를 보는 명령어입니다.
$ ps -p 3150 -L

8. 출력할 칼럼 지정
  원하는 칼럼들만 출력하게 할 수도 있습니다. 아래 명령어는 PID, 유저명, CPU, 메모리, 명령어 칼럼만 출력시키는 예입니다.
$ ps -e -o pid,uname,pcpu,pmem,comm
  칼럼명을 변경하는 것도 가능합니다.
$ ps -e -o pid,uname=USERNAME,pcpu=CPU_USAGE,pmem,comm
  PID USERNAME CPU_USAGE %MEM COMMAND
    1 root           0.0  0.0 init
    2 root           0.0  0.0 kthreadd
    3 root           0.0  0.0 ksoftirqd/0
    4 root           0.0  0.0 kworker/0:0
    5 root           0.0  0.0 kworker/0:0H
    7 root           0.0  0.0 migration/0
    8 root           0.0  0.0 rcu_bh
    9 root           0.0  0.0 rcuob/0
   10 root           0.0  0.0 rcuob/1

9. 프로세스가 존재한 시간 출력
  프로세스가 실행되고 나서 흐른 시간은 기본 상태에선 출력되지 않으며 "-o" 옵션을 사용해야 합니다.
$ ps -e -o pid,comm,etime

10. ps로 프로세스를 실시간으로 보기
  아래처럼 watch 명령어를 사용하면 실시간으로 프로세스를 관찰할 수 있습니다.
$ watch -n 1 'ps -e -o pid,uname,cmd,pmem,pcpu --sort=-pmem,-pcpu | head -15'
Every 1.0s: ps -e -o pid,uname,cmd,pmem,pcpu --...  Sun Dec  1 18:16:08 2013

  PID USER     CMD                         %MEM %CPU
 3800 1000     /opt/google/chrome/chrome -  4.6  1.4
 7492 1000     /opt/google/chrome/chrome -  2.7  1.4
 3150 1000     /opt/google/chrome/chrome    2.7  2.5
 3824 1000     /opt/google/chrome/chrome -  2.6  0.6
 3936 1000     /opt/google/chrome/chrome -  2.4  1.6
 2936 1000     /usr/bin/plasma-desktop      2.3  0.2
 9666 1000     /opt/google/chrome/chrome -  2.1  0.8
 3842 1000     /opt/google/chrome/chrome -  2.1  0.8
 4739 1000     /opt/google/chrome/chrome -  1.8  1.0
 3930 1000     /opt/google/chrome/chrome -  1.7  1.0
 3911 1000     /opt/google/chrome/chrome -  1.6  0.6
 3645 1000     /opt/google/chrome/chrome -  1.5  0.4
 3677 1000     /opt/google/chrome/chrome -  1.5  0.4
 3639 1000     /opt/google/chrome/chrome -  1.4  0.4
  위 명령어를 사용하면 1초마다 출력이 갱신된다. 단, top은 기본적으로 CPU와 메모리 사용률을 종합적으로 비교하여 정렬하는 반면 위에서는 메모리를 먼저 비교 후 CPU 사용률을 비교하여 정렬했기 때문에 결과는 서로 다를 것이다.
2013/12/05 15:40 2013/12/05 15:40
Posted
Filed under 프로그램과 명령어/모니터링
참조 원문: Monitor disk io on linux server with iotop and cron

  iotop을 그냥 실행하면 프로세스들의 디스크IO 현황을 보여줍니다. 여기서 cron을 사용하여 지속적으로 현황을 기록한 후 분석하는 것이 이 글의 목표입니다. 이 글에서는 cron을 통해 iotop을 백그라운드로 실행하여 디스크IO 현황을 파일로 기록합니다. 아래는 cron에 적용할 명령어와 출력 예제입니다.
$ iotop -botqqqk --iter=60
17:38:13   335 be/3 root        0.00 K/s    7.64 K/s  0.00 %  2.30 % [jbd2/sda6-8]
17:38:13  3296 be/4 enlighte    0.00 K/s   15.28 K/s  0.00 %  0.00 % chrome
17:38:14   335 be/3 root        0.00 K/s    7.62 K/s  0.00 %  3.35 % [jbd2/sda6-8]
17:38:14  3293 be/4 enlighte    0.00 K/s    7.62 K/s  0.00 %  0.02 % chrome
17:38:15  3319 be/4 enlighte    0.00 K/s   19.09 K/s  0.00 %  0.00 % chrome
  iotop을 실행하기 위해선 root 권한이 있어야 하므로 우분투 계열에서 시험해보려면 sudo 명령어가 필요합니다. 위 옵션 중 가장 중요한 것은 "b"로서 배치 모드로 실행하게 만듭니다. 배치 모드일 때는 한 화면에 지속적으로 출력을 갱신시키지 않고 결과를 그대로 출력합니다. 이를 통해 일정 기간 동안의 IO 사용률을 기록할 수 있습니다. "o" 옵션은 실제로 IO가 발생한 프로세스들만 출력시키는 옵션입니다. 이 옵션을 주지 않으면 모든 프로세스가 출력되어 필요하지 않은 내용까지 출력됩니다. "t" 옵션은 출력에 시간을 포함시키는 역할을 합니다. "k" 옵션은 모든 크기 수치를 킬로바이트로 표시하게 합니다.

  출력 내용을 기록하기 위해 간단히 파일로 리다이렉트를 할 겁니다. 위치는 /var/log, 파일명은 iotop로 할 것입니다.
$ iotop -botqqqk --iter=60 >> /var/log/iotop
  이 명령어를 실행하면 1초당 1번씩 총 60번의 iotop 출력 결과가 /var/log/iotop 파일에 기록됩니다. 그러므로 이 명령어는 cron을 통해 매분 실행해야 합니다. root 권한으로 /etc/cron.d/iotop 파일을 생성하여 아래의 내용을 넣습니다.
* * * * * root /usr/sbin/iotop -botqqqk --iter=60 >> /var/log/iotop
  이제 cron이 매분 위 명령어를 실행할 것이며 그때마다 1분 동안 1초마다 샘플을 수집하여 모든 IO 활동을 /var/log/iotop에 기록합니다. 행여나 프로그램의 경로가 위와 다를 수 있으니 which 명령어를 통해 iotop이 있는 위치를 확인합니다.
$ which iotop
/usr/sbin/iotop
  이제 출력 결과 중 디스크IO가 10K/s 이상인 것들만 기록하도록 실행 명령어를 변경해보겠습니다.
$ sudo iotop -botqqqk --iter=60 | grep -P "\d\d\.\d\d K/s"
17:49:02   335 be/3 root        0.00 K/s   41.90 K/s  0.00 %  8.43 % [jbd2/sda6-8]
17:49:02  3307 be/4 enlighte    0.00 K/s  152.36 K/s  0.00 %  0.87 % chrome
17:49:10  3310 be/4 enlighte    0.00 K/s   22.80 K/s  0.00 %  0.10 % chrome
17:49:15  3319 be/4 enlighte    0.00 K/s   26.54 K/s  0.00 %  2.50 % chrome
17:49:16  3310 be/4 enlighte    0.00 K/s   19.02 K/s  0.00 %  0.00 % chrome
  정규식 부분만 바꾸면 원하는 조건으로 쉽게 추출할 수 있습니다. 예를 들어 1M/s 이상만 추출하고 싶다면 정수 부분을 위의 2개에서 4개로만 바꾸면 됩니다.

  위의 명령어를 이전에 생성한 cron 파일에 적용합니다.
* * * * * root /usr/sbin/iotop -botqqqk --iter=60 | grep -P "\d\d\.\d\d K/s"  >> /var/log/iotop
  아래는 그 결과의 예입니다.
13:19:01  1325 be/4 root        0.00 K/s 1897.74 K/s  0.00 %  5.65 % [kjournald]
13:24:22  2836 be/4 mysql       0.00 K/s 1071.07 K/s  0.00 %  0.18 % mysqld
13:32:01  1325 be/4 root        0.00 K/s 1469.17 K/s  0.00 %  7.13 % [kjournald]
13:46:18 10978 be/4 binary   1634.31 K/s    0.00 K/s  0.00 % 23.87 % php-fpm: pool binary
13:47:01  2955 be/4 mysql       0.00 K/s 8738.80 K/s  0.00 %  0.00 % mysqld
14:17:01  1325 be/4 root        0.00 K/s 1354.01 K/s  0.00 %  6.84 % [kjournald]
14:23:02  1325 be/4 root        0.00 K/s 1146.18 K/s  0.00 %  4.69 % [kjournald]
14:25:01  1325 be/4 root        0.00 K/s 1494.21 K/s  0.00 % 11.05 % [kjournald]
14:34:01  9938 be/4 mysql       0.00 K/s 2878.55 K/s  0.00 %  0.00 % mysqld
14:36:01  9424 be/4 mysql       0.00 K/s 2694.21 K/s  0.00 %  0.00 % mysqld
  여기에 추가로 logrotate를 사용하여 매주 로그 파일을 교체해주면 더 좋습니다. /etc/logrotate.d/iotop 파일을 생성하여 아래 내용을 넣기만 하면 됩니다.
/var/log/iotop.log {
weekly
compress
notifempty
missingok
}
2013/10/25 11:20 2013/10/25 11:20