^M 삭제방법 or /bin/bash^M: bad interpreter: 그런 파일이나 디렉터리가 없습니다

Posted by 주원이^^
2014. 11. 11. 09:55 리눅스/리눅스설정방법
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

1. 해당 파일을 열때 옵션을 준다.

   vi -b [파일이름] (vi을 binary 편집 모드로 실행함)


2. vi 명령 줄에 %s/^M//g 입력, 하면, 파일안에 있는 ^M 이 문자가 다 삭제됨


ex ) :%s/(ctrl+v)(ctrl+m)^M//g


%s 바꿀명령어

(ctrl+v)(ctrl+m)^M 찾을줄

변경줄

/g                        적용



3. 저장 & 아웃

'리눅스 > 리눅스설정방법' 카테고리의 다른 글

yum download only  (0) 2014.08.11
iscsi 명령어 모음집  (6222) 2014.07.12
httpd rpm build  (0) 2014.07.07
사설 ssl 키 생성  (0) 2014.07.04
centos 6.x selinux 해제  (0) 2014.06.11

yum download only

Posted by 주원이^^
2014. 8. 11. 09:26 리눅스/리눅스설정방법
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

리눅스 yum을 활용한 rpm 다운 받기


openssl 취약점 문제로 인해서 서버에 패치 할 일이 생겼습니다.

그래서 하는 패치 or 업데이트를 하는 방법을 알아보겠습니다.


서버가 리눅스계열이고, 인터넷만 된다면 yum update openssl 명령을 수행하면 

간단히 openssl에 대해서 패치가 가능합니다.


하지만 인터넷이 안되면?!!! 


방법

yum 을 이용하여 업데이트 된 rpm을 다운 받아 설치하면 됩니다.


1. 인터넷 되는 서버에서 yum plugin을 설치

 - # yum install yum-downloadonly





2. 사용방법

패키지명 다운로드받기 다운로드 받을경로

# yum update oepnssl -y --downloadonly --downloaddir=/tmp

해당경로에 파일이 다운로드됨


openssl 을 미리 yum으로 설치 해서 파일이 다운로드가 ㅠㅠ


취약점 업데이트된 파일리스트 보면

openssl 32bit와 64bit 그리고 개발버전 32bit,64bit가 있네요. RPM으로



4. RPM 설치

- 받은 rpm으로 설치 하면됩니다.

#rpm -Uvh openssl-*.rpm


How To Download a RPM Package Using yum Command Without Installing On Linux

http://www.cyberciti.biz/faq/yum-downloadonly-plugin/

iscsi 명령어 모음집

Posted by 주원이^^
2014. 7. 12. 11:00 리눅스/리눅스설정방법
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

<<ISCSI Server설정>>
yum install scsi-target-utils-0.0-6.20091205snap.el5_5.3.i386 -y
service tgtd start

1.Target 설정(도메인 및 디스크볼륨명은 임의지정)
tgtadm --lld iscsi --op new --mode target --tid 1 --targetname iqn.2011-04.도메인명:drbd.quorumdisk
tgtadm --lld iscsi --op new --mode target --tid 2 --targetname iqn.2011-04.도메인명:drbd.datadisk

2.Target 이름이 제대로 지정되어 있는지 확인
tgtadm --lld iscsi --op show --mode target
[root@node2 ~]# tgtadm --lld iscsi --op show --mode target
Target 1: iqn.2011-04.도메인명:drbd.quorumdisk
    System information:
        Driver: iscsi
        State: ready
    I_T nexus information:
    LUN information:
        LUN: 0
            Type: controller
            SCSI ID: IET     00010000
            SCSI SN: beaf10
            Size: 0 MB
            Online: Yes
            Removable media: No
            Backing store type: rdwr
            Backing store path: None
    Account information:
    ACL information:
Target 2: iqn.2011-04.도메인명:drbd.datadisk
    System information:
        Driver: iscsi
        State: ready
    I_T nexus information:
    LUN information:
        LUN: 0
            Type: controller
            SCSI ID: IET     00020000
            SCSI SN: beaf20
            Size: 0 MB
            Online: Yes
            Removable media: No
            Backing store type: rdwr
            Backing store path: None
    Account information:
    ACL information:
3.설정한 iSCSI Target 이름에 시스템의 볼륨을 등록해 줍니다.
$ tgtadm --lld iscsi --op new --mode logicalunit --tid 1 --lun 1 -b /dev/drbd0
위 명령은 tid 1에 lun 1번으로 /dev/drbd0을 등록
(앞서 Target 이름 생성시 LUN0는 이미 존재하므로 1로 지정하였습니다)

같은 방식으로 tid 2에 lun 1번으로 /dev/drbd1을 등록
$ tgtadm --lld iscsi --op new --mode logicalunit --tid 2 --lun 1 -b /dev/drbd1


4.볼륨의 등록이 정상적으로 되어있는지 아래 명령으로 확인 가능합니다.
$ tgtadm --lld iscsi --op show --mode target
실행결과에 LUN 1로 /dev/drbd0이 보이는지 확인하면 됩니다.
[root@node2 ~]# tgtadm --lld iscsi --op show --mode target
Target 1: iqn.2011-04.도메인명:drbd.quorumdisk
    System information:
        Driver: iscsi
        State: ready
    I_T nexus information:
    LUN information:
        LUN: 0
            Type: controller
            SCSI ID: IET     00010000
            SCSI SN: beaf10
            Size: 0 MB
            Online: Yes
            Removable media: No
            Backing store type: rdwr
            Backing store path: None
        LUN: 1
            Type: disk
            SCSI ID: IET     00010001
            SCSI SN: beaf11
            Size: 501 MB
            Online: Yes
            Removable media: No
            Backing store type: rdwr
            Backing store path: /dev/drbd0
    Account information:
    ACL information:
Target 2: iqn.2011-04.도메인명:drbd.datadisk
    System information:
        Driver: iscsi
        State: ready
    I_T nexus information:
    LUN information:
        LUN: 0
            Type: controller
            SCSI ID: IET     00020000
            SCSI SN: beaf20
            Size: 0 MB
            Online: Yes
            Removable media: No
            Backing store type: rdwr
            Backing store path: None
        LUN: 1
            Type: disk
            SCSI ID: IET     00020001
            SCSI SN: beaf21
            Size: 573 MB
            Online: Yes
            Removable media: No
            Backing store type: rdwr
            Backing store path: /dev/drbd1
    Account information:
    ACL information:

5.iSCSI Target에 접근할 수 있도록 bind 작업
$ tgtadm --lld iscsi --op bind --mode target --tid 1 --initiator-address ALL
$ tgtadm --lld iscsi --op bind --mode target --tid 2 --initiator-address ALL

위 명령은 tid 1의 Target을 bind 해주는 명령입니다.
--initiator-address(또는 -I) 옵션은 ACL (initiator의 접근권한)을 설정하는 것으로
본 문서의 예제에는 모든 시스템에서 접근 가능하도록 하였습니다

제대로 bind 되어 있는지 확인
[root@node2 ~]# netstat -atnp | grep 3260
tcp        0      0 0.0.0.0:3260                0.0.0.0:*                   LISTEN      3390/tgtd
tcp        0      0 :::3260                     :::*                        LISTEN      3390/tgtd

6.설정한 tgt 정보를 설정파일로 등록하기
$ tgt-admin --dump >> /etc/tgt/targets.conf
만약 기존에 등록된 정보가 있다면 > 대신 >>을 이용하여 추가해 주시면 됩니다.


<<ISCSI Client설정>>
yum install iscsi-initiator-utils.i386 -y
service iscsi start
service iscsid start

1.ISCSI Target 시스템 찾기
[root@centos gfs2]# iscsiadm --mode discovery --type sendtargets --portal  TGTD서버IP
TGTD서버IP:3260,1 iqn.2011-04.도메인명:drbd.quorumdisk
TGTD서버IP:3260,1 iqn.2011-04.도메인명:drbd.datadisk
IP주소에는 Target 시스템의 IP주소를 입력합니다.

2.Target 시스템에 로그인
$ iscsiadm --mode node --targetname iqn.2011-04.도메인명:drbd.datadisk --portal TGTD서버IP --login

3.Target 시스템 로그인 확인
targetname은 Target 시스템에 등록된 iqn 값을 지정하면 됩니다.
즉, 타겟시스템에 여러 Target 장치가 존재할 때 구분하기 위함입니다.

[root@centos gfs2]# fdisk -l

Disk /dev/hda: 17.1 GB, 17179803648 bytes
255 heads, 63 sectors/track, 2088 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/hda1   *           1          13      104391   83  Linux
/dev/hda2              14        2088    16667437+  8e  Linux LVM

Disk /dev/sda: 572 MB, 572809216 bytes
18 heads, 61 sectors/track, 1018 cylinders
Units = cylinders of 1098 * 512 = 562176 bytes

Disk /dev/sda doesn't contain a valid partition table
기존에 없던 디스크 장치가 추가되어있음을 확인할 수 있습니다.
 

[root@centos gfs2]# cat /proc/scsi/scsi
Attached devices:
Host: scsi0 Channel: 00 Id: 00 Lun: 00
  Vendor: IET      Model: Controller       Rev: 0001
  Type:   RAID                             ANSI SCSI revision: 05
Host: scsi0 Channel: 00 Id: 00 Lun: 01
  Vendor: IET      Model: VIRTUAL-DISK     Rev: 0001
  Type:   Direct-Access                    ANSI SCSI revision: 05
위 SCSI정보를 확인하면 아래와 같이 VIRTAUL-DISK가 보이는지 확인하시면 됩니다.
/var/log/messages에도 디스크가 새로 인식되었음이 기록되니 참고하시면 됩니다.


4.등록된 볼륨에 대해서 일반 디스크처럼 파티셔닝 후 포맷이 가능합니다.
$ fdisk /dev/sda

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

iscsi ( Server : tgtadm )

### 타겟을 만들어 준다.

#tgtadm --lld iscsi --op new --mode target --tid 1 -T iqn.2008-11-18.xen.test.co.kr:storage.disk1### 타겟의 내역을 확인 한다.

#tgtadm --lld iscsi --op show --mode target### iscsi lun 할당

#tgtadm --lld iscsi --op new --mode logicalunit --tid=1 --lun=1 -b /dev/xen_vg/gfs_data
#tgtadm --lld iscsi --op new --mode logicalunit --tid=1 --lun=2 -b /dev/gfs/qdisk
#tgtadm --lld iscsi --op new --mode logicalunit --tid=1 --lun=1 -b /dev/gfs/gfsdata3### iscsi target binding

#tgtadm --lld iscsi --op bind --mode target --tid 1 -I ALL### iscsi target 에 binding 된 리스트 확인

#tgtadm --lld iscsi --op show --mode target### tid1 에 타겟된 리스트 보기

#tgtadm --lld iscsi --op show --mode target --tid 1iscsi ( Client : iscsiadm )

### target scan

#iscsiadm -m discovery -t st -p 192.168.40.200### target mapping

#iscsiadm -m node --loginall all 또는 iscsiadm -m node -l
or
#iscsiadm -m node --targetname iqn_name -l### mapping 된 내역 확인

#iscsiadm -m node### logout

#iscsiadm -m node --targetname iqn.2008-06.com.oracle.kr.sd-iscsi:storage.disk1 --portal 10.0.0.62:3260 --logout
or
#iscsiadm -m node --logout### iqn 삭제

#iscsiadm -m node -o delete iqn.2008-06.xen.test.co.kr.sd-iscsi:storage.disk1
or
#iscsiadm -m node -o deleteiscsi udev ? target mapping 설정 하기

/dev/sda to /dev/iscsiN
#vi /etc/udev/rules.d/75-iscsi.rules

아래 라인 추가
KERNEL=="sd*", PROGRAM=="scsi_id -g -u -s %p", RESULT=="19492039203920390230232", SYMLINK+="iscsi%n"

#scsi_id -g -u -s /block/sda ==> RESULT(출력 결과)

#udevtest
#start_udev

 

httpd rpm build

Posted by 주원이^^
2014. 7. 7. 10:03 리눅스/리눅스설정방법
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
. RPM Rebuild

[root@localhost httpd]# wget http://vault.centos.org/5.8/os/SRPMS/httpd-2.2.3-63.el5.centos.src.rpm

[root@localhost httpd]# rpm -ivh httpd-2.2.3-63.el5.centos.src.rpm

[root@localhost httpd]# cd /usr/src/redhat/SOURCES

[root@localhost httpd]# tar xvfz httpd-2.2.3.tar.gz

[root@localhost httpd]# vim httpd-2.2.3/server/mpm/prefork/prefork.c

77라인에 #define DEFAULT_SERVER_LIMIT 1024 로 수정

[root@localhost httpd]# rm -f httpd-2.2.3.tar.gz

[root@localhost httpd]# tar cvfz httpd-2.2.3.tar.gz httpd-2.2.3/

[root@localhost httpd]# rm -rf httpd-2.2.3/

[root@localhost httpd]# yum -y install rpm-build

[root@localhost httpd]# cd /usr/src/redhat/SPECS/

[root@localhost httpd]# rpmbuild -ba httpd.spec

[root@localhost httpd]# cd /usr/src/redhat/RPMS/x86_64

참고) rpm2cpio httpd-2.2.3-63.el5.centos.src.rpm | cpio -id

2. 예외사항 처리

[root@localhost httpd]# rpmbuild -ba httpd.spec
오류: Failed build dependencies:
autoconf is needed by httpd-2.2.3-45.x86_64
xmlto >= 0.0.11 is needed by httpd-2.2.3-45.x86_64
db4-devel is needed by httpd-2.2.3-45.x86_64
expat-devel is needed by httpd-2.2.3-45.x86_64
zlib-devel is needed by httpd-2.2.3-45.x86_64
apr-devel >= 1.2.0 is needed by httpd-2.2.3-45.x86_64
apr-util-devel >= 1.2.0 is needed by httpd-2.2.3-45.x86_64
pcre-devel >= 5.0 is needed by httpd-2.2.3-45.x86_64
openssl-devel >= 0.9.8e-12.el5_4.4 is needed by httpd-2.2.3-45.x86_64
distcache-devel is needed by httpd-2.2.3-45.x86_64

[root@localhost httpd]# yum install autoconf xmlto db4-devel expat-devel zlib-devel

[root@localhost httpd]# yum install apr-devel apr-util-devel pcre-devel openssl-devel distcache-devel


3. SRC RPM Rebuild

[root@localhost httpd]# rpmbuild --rebuild httpd-2.2.3-45.el5.centos.src.rpm

 

'리눅스 > 리눅스설정방법' 카테고리의 다른 글

yum download only  (0) 2014.08.11
iscsi 명령어 모음집  (6222) 2014.07.12
사설 ssl 키 생성  (0) 2014.07.04
centos 6.x selinux 해제  (0) 2014.06.11
웹분산  (0) 2014.06.11

사설 ssl 키 생성

Posted by 주원이^^
2014. 7. 4. 13:16 리눅스/리눅스설정방법
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
How to create a self-signed SSL Certificate
리눅스 개인 서명 SSL 인증서 생성, 사설 SSL 인증서 만들기
리눅스 OpenSSL 자체서명 인증서 설치
리눅스 OpenSSL 인증서 설치

목차

[숨기기]

개요

여기서는 개인 인증기관을 만들고 인증서를 발급받아 보자. 웹브라우저에서는 신뢰할 수 없는 사이트라고 나오기는 하지만, SSL 보안 기능[1]을 이용할 수 있다.[2]

확인

리눅스를 설치했다면 아마도 openssl 패키지가 설치되어 있을 것이다.[3]

[root@jmnote ~]# rpm -qa openssl
openssl-1.0.0-20.el6_2.5.x86_64

개인키 생성

[root@jmnote ~]# 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:
→ 서버 개인키인 server.key 파일이 생성된다.

인증요청서 생성

인증요청서 문서를 참고하십시오.
[root@jmnote ~]# 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) []:Seoul
Locality Name (eg, city) [Default City]:Yeongdeungpo
Organization Name (eg, company) [Default Company Ltd]:Jmnote
Organizational Unit Name (eg, section) []:Jmnote
Common Name (eg, your name or your server's hostname) []:jmnote.com
Email Address []:web@jmnote.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 파일이 생성되었다.

개인키에서 패스워드 제거

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

[root@jmnote ~]# cp server.key server.key.org
[root@jmnote ~]# openssl rsa -in server.key.org -out server.key
Enter pass phrase for server.key.org:
→ 개인키 패스워드를 입력
writing RSA key
→ 패스워드가 제거된 개인키 파일 server.key 이 생성된다.
[root@jmnote ~]# ll server*
-rw-r--r--. 1 root root 1054 Sep 20 07:53 server.csr
-rw-r--r--. 1 root root 1679 Sep 20 07:56 server.key
-rw-r--r--. 1 root root 1751 Sep 20 07:55 server.key.org
→ 패스워드가 제거된 파일(server.key)은 원래 파일(server.key.org)에 비해 용량이 조금 줄어들었다.

인증서 생성

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

[root@jmnote ~]# openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
Signature ok
subject=/C=KR/ST=Seoul/L=Yeongdeungpo/O=Jmnote/OU=Jmnote/CN=jmnote.com/emailAddress=web@jmnote.com
Getting Private key
→ 서버 인증서인 server.csr이 생성되었다.

개인키와 인증서 설치

개인키 파일(.key)과 인증서 파일(.crt)을 ssl이라는 파일명으로 httpd.conf 폴더에 복사하자. (httpd.conf 폴더는 설정에 따라 다를 수 있다.)

[root@jmnote ~]# cp server.key /etc/httpd/conf/
[root@jmnote ~]# cp server.crt /etc/httpd/conf/
[root@jmnote ~]# ll /etc/httpd/conf
total 60
-rw-r--r--. 1 root root 34417 Sep 20 07:41 httpd.conf
-rw-r--r--. 1 root root 13139 Feb 14  2012 magic
-rw-r--r--. 1 root root  1298 Sep 20 08:45 server.crt
-rw-r--r--. 1 root root  1679 Sep 20 08:45 server.key

httpd.conf 설정

httpd.conf 파일의 맨 아래에 다음 내용 추가[4]. 단, DocumentRoot는 본인의 상황에 맞게 지정.

NameVirtualHost *:443
<VirtualHost *:443>
SSLEngine on
SSLCertificateFile /etc/httpd/conf/server.crt
SSLCertificateKeyFile /etc/httpd/conf/server.key
SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown
CustomLog logs/ssl_request_log "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
DocumentRoot 폴더위치
</VirtualHost>
→ SSL 접속용 DocumentRoot를 별도로 지정해주자. (예: /var/www/https[5])

아파치 재시작

명령어
service httpd restart
실행예시 (성공)
[root@jmnote ~]# service httpd restart
Stopping httpd:                                            [  OK  ]
Starting httpd:                                            [  OK  ]
실행예시 (실패)
[root@jmnote ~]# service httpd restart
Stopping httpd:                                            [  OK  ]
Starting httpd: Syntax error on line 1072 of /etc/httpd/conf/httpd.conf:
Invalid command 'SSLEngine', perhaps misspelled or defined by a module not included in the server configuration
                                                           [FAILED]
→ mod_ssl 패키지가 없어서 그렇다. Invalid command 'SSLEngine' 참조.

웹브라우저 테스트

이 웹 사이트의 보안 인증서에 문제가 있습니다. 
 
이 웹 사이트에서 제시한 보안 인증서는 신뢰할 만한 인증 기관에서 발급한 것이 아닙니다.
이 웹 사이트에서 제시한 보안 인증서는 다른 웹 사이트 주소에 대해 발급되었습니다.
 
문제가 있는 인증서를 통해 사용자를 속이거나 사용자가 서버로 보내는 데이터를 가로챌 수도 있습니다.  
 
이 웹 페이지를 닫고 이 웹 사이트를 계속 탐색하지 않는 것이 좋습니다.  
... (생략)
→ 개인서명이라 신뢰할 수 없다고 하지만[6], 보안 접속은 잘 된다.

같이 보기

주석

  1. SSL 기반 암호화 송수신
  2. 사용자(웹 접속자)는 경고 메시지를 보게 된다.
  3. 리눅스는 SSH 접속을 기본 제공하는데, 거기에도 openssl이 필요하다. CentOS 6 최소 설치 패키지 목록에도 포함되어 있다.
  4. httpd.conf 기본값일 때는 그냥 하단에 추가만 하면 되지만, 기존에 VirtualHost를 사용중이라면 적절히 수정해야 한다.
  5. /var/www/html 와 비슷하게 예시 폴더를 지정해보았다. 지정한 폴더가 서버에 실제로 있어야 httpd 시작시 오류가 나지 않는다
  6. IE8의 경우, 주소표시줄이 붉게 표시되고 '인증서 오류'라는 말이 계속 따라다닌다. ㅠ_ㅠ

참고 자료

'리눅스 > 리눅스설정방법' 카테고리의 다른 글

iscsi 명령어 모음집  (6222) 2014.07.12
httpd rpm build  (0) 2014.07.07
centos 6.x selinux 해제  (0) 2014.06.11
웹분산  (0) 2014.06.11
openssl update  (0) 2014.06.11

centos 6.x selinux 해제

Posted by 주원이^^
2014. 6. 11. 11:13 리눅스/리눅스설정방법
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

SELinux 기능 끄기와 켜기


1) 설정파일

/etc/sysconfig/selinux 파일에 설정이 있으며


SELINUX 지시어의 값을 변경하면 된다.

켜기 : # SELINUX=enforcing

끄기 : # SELINUX=disabled


# vi /etc/selinux/config

# This file controls the state of SELinux on the system.

# SELINUX= can take one of these three values:

# enforcing - SELinux security policy is enforced.

# permissive - SELinux prints warnings instead of enforcing.

# disabled - SELinux is fully disabled.

SELINUX=disabled

# SELINUXTYPE= type of policy in use. Possible values are:

# targeted - Only targeted network daemons are protected.

# strict - Full SELinux protection.

SELINUXTYPE=targeted

 


# 참고


SELINUX 지시어는 enforcing,permissive,disabled 세가지가 있으며

enforcing : 보안정책을 적용시킨다는 뜻이다

permissive : enforcing시 발생하는 경고메세지를 출력하는 모드이다

disabled : 보안정책을 사용하지 않는다는 뜻이다


SELINUXTYPE 지시어는 정책 적용방싱르 나타네며 targeted, strict 두가지가 있다

targeted : 네트웍 데몬에 대해서 보안정책을 적용하는 것

strict : 시스템전체에대해 보안정책을 적용하는 것이다



2) 명령어

setenforce 라는 명령를 이용하여 SELinux를 켜고 끈다

setenforce의 경우 boolean 값을 갖는다.

켜기 : # setenforce 1

끄기 : # setenforce 0


3) 부팅옵션에 추가

grub.conf에 부팅옵셩을 줘서 설정할수 있다

켜기 : selinux=1

끄기 : selinux=0

'리눅스 > 리눅스설정방법' 카테고리의 다른 글

httpd rpm build  (0) 2014.07.07
사설 ssl 키 생성  (0) 2014.07.04
웹분산  (0) 2014.06.11
openssl update  (0) 2014.06.11
centos 6.x openvpn 설치하기.  (0) 2014.05.08

웹분산

Posted by 주원이^^
2014. 6. 11. 10:37 리눅스/리눅스설정방법
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

이글은 제가 phpschool에 쓴 팁텍입니다.
이곳에서도 보실 수 있도록 옮긴 것입니다.^^

웹서버가 그렇게 성능(Xeon 2.4, 스카시HDD, 1G RAM)이 떨어지는 것도 아닌데... 60만명이 넘는 회원을 가진 다음카페 회원들한테 메일한번 쏜 이후로 엄청난 접속에 거의 서버가 멎을 뻔 하였던 경험을 하였습니다.
그래서 생각한 것이 로드밸런싱인데... 허접한 제 실력에 로드밸런싱이란 것은 하기 힘든 작업이었죠.^^
그래도 어디서 들어본 것은 있는지 문득 생각난 것이 rsync와 Round-Robin이였습니다.^^
하지만 들어보기만 했지 직접 해 본적은 없어서... 어떻게 해야 할 지 난감하더군요..^^
어째든 맨땅에 헤딩은 그렇게 시작이 되었습니다.^^
여기서 많은 분들께 질문도 하고... 여기 저기 문서도 많이 찾아 봤습니다.^^

아직 완벽하지는 않은 듯 하니... 참고로 보시고..
물론 더 뛰어난 실력을 갖추신 분들은 더 좋은 로드밸런싱을 사용하시기 바랍니다. (skip... ^^)

그럼 하나 하나 제가 한 방법을 적어보도록 하겠습니다. 이하 존댓말 생략입니다.^^;


기존의 웹서버 A와 새롭게 추가하고자 하는 웹서버 B가 있다고 보자.

A서버의 아이피 : 192.168.1.1
B서버의 아이피 : 192.168.1.2

우선은 두 서버가 하나의 서버로 인식하기 위해서는 두 서버 모두 하나의 도메인을 가지고 있어야 한다. 따라서 DNS의 설정은 필수적이다.


1. DNS 설정(Round-Robin)

$TTL 86400
@ IN SOA ns.localhost.com. root.localhost.com. (
2003052901
21600
1800
1209600
86400)
IN NS ns.localhost.com.
IN A 192.168.1.1
www IN A 192.168.1.1
www IN A 192.168.1.2
www1 IN A 192.168.1.1
www2 IN A 192.168.1.2


위와 같이 zone 파일을 설정한다. 물론 named는 restart 해야 한다. 그러면 www.localhost.com이란 도메인은 192.168.1.1과 192.168.1.2 두개의 아이피를 가지게 된다. 이 상태에서 nslookup www.localhost.com이라고 하면... 다음과 같이 나온다.


Server: 168.126.63.1 --> 질의한 서버 아이피
Address: 168.126.63.1#53

Name: www.localhost.com
Address: 192.168.1.1 --> 결과값1
Name: www.localhost.com
Address: 192.168.1.2 --> 결과값2

이와 같이 나온다면 네임서버는 잘 설정한 것이다.^^


2. 웹서버의 설정

우선 두대 모두다 apache의 httpd.conf파일에 www.localhost.com 도메인을 설정해 두어야 한다. 만일 이미 다른 것으로 사용하고 있다면 apache의 가성서버 설정을 이용해야 한다.(물론 여기서 가상호스트 설정까지 살펴보지는 않겠다.^^) 기본적으로 두 서버의 DocumentRoot가 틀려도 되지만, 손 쉬운 관리를 위해서 경로를 같게 두는 것이 좋을 것이다.

ex)
A서버의 DocumentRoot - /usr/local/localhostSource
B서버의 DocumentRoot - /usr/local/localhostSource


3. rsync의 설정

이제 두대의 서버가 갖춰지고 두대 모두 동일한 도메인을 가지게 되었다면 두 서버의 소스가 동일하도록 할 차례이다. 이러한 것을 위해서 바로 rsync가 필요하다. rsync와 관련된 많은 참고문헌들을 뒤졌는데 결론적으로 '질주본능'님의 조언으로 성공하게 되었다. 이 자리를 빌어 감사하다는 말씀을 전한다. '질주본능'님이 쓰신 rsync 관련 내용을 보시고 싶으신 분은

를 참고하기 바란다.

우선 rsync 는 ssh를 이용한 방법과 873 포트를 이용한 방법이 있다. ssh를 이용한 방법이 조금더 안정성 면에서 좋을 것이라는 생각에 시도하였지만 번번히 실패하게 되었고 결국에는 873포트를 이용한 rsync를 성공하게 되었다. ssh를 이용한 rsync에는 비밀번호를 물어보게 되는데 파일을 이용하여 비밀번호를 자동으로 입력할 수 있다고 하는데 잘 되지 않았다.(성공한 분은 비결좀 알려주시길...^^)


그럼 873포트를 이용한 rsync 설정 방법을 알아보도록 하자.

우선은 xinetd를 이용하여 rsync가 구동되므로 다음과 같이 설정을 해 줘야 한다.

#vi /etc/xinetd.d/rsync

# default: off
# description: The rsync server is a good addition to an ftp server, as it
# allows crc checksumming etc.
service rsync
{
disable = no
socket_type = stream
wait = no
user = root
server = /usr/bin/rsync
server_args = --daemon
log_on_failure += USERID
}


그 다음 rsync의 설정파일을 수정해 줘야 한다. rsync의 설정 파일은 rsyncd.conf 파일이다. 물론 이 파일은 원래 존재하지 않는다.(원래 존재하는데 필자만 없었을 수도 있다.) 한가지 주의할 것은 설정파일 이름이 rsync.conf가 아니라 rsyncd.conf란 것이다. 일부 tip에서 rsync.conf라고 하는데 이렇게 할 경우에는 rsync가 되지 않았다.

#vi /etc/rsyncd.conf

[www]
path = /usr/local/localSource
comment = webservice-dir
uid = root
gid = root
use chroot = yes
read only = yes
hosts allow = 192.168.1.2
max connections = 1
timeout = 300

여기서 [www] 은 닉네임이다. 즉 아래 설정 내용을 한번에 호칭하기 위해 사용하는 것이다. path는 rsync를 받고자 하는 소스가 존재하는 디렉토리를 정해주면 된다.
uid와 gid는 root로 하는 것이 좋다. nobody로 할 경우에는 일부 기능을 사용하지 못하는 경우가 발생했다.^^(정확한 이유는 모르겠다.^^)
hosts allow는 어느 아이피에서 rsync 서버에 붙어 소스를 가져가도록 허락할 것인지 설정해 주는 것이다.


rsync의 설정을 모두 마쳤다면 xinetd 데몬을 재 시작한다.

/etc/rc.d/init.d/xinetd restart


설정을 마치고 xinetd도 재시작했다면 873 포트가 열려 있는지 테스트 해보자.

#telnet localhost 873
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
@RSYNCD: 26
Localhost rsync server
sysadmin = root@localhost.com

위와 같이 나온다면 정상적으로 설정이 된 것이다. 물론 2번째로 소스를 받아갈 B서버에서도 테스트를 해 봐야 한다.


#telnet 192.168.1.1 873
Trying 192.168.1.1...
Connected to 192.168.1.1.
Escape character is '^]'.
@RSYNCD: 26
Localhost rsync server
sysadmin = root@localhost.com


이렇게 되었다면 이제 rsync는 완전히 성공한 거나 다름 없다.
다음과 같이 테스트 해보자...^^

rsync -avzrt --delete 192.168.1.1::www /usr/local/localSource/


-a는 아카이브 모드. 심볼릭 링크, 속성, 퍼미션, 소유권 등 보존
-v 전송 상태를 보여줌
-z 전송시 압축을 함.
-r recursive (하위 디렉토리까지 포함)
-t 변경시간 전송 (이것이 없으면 전송한 시간으로 바뀜)

--delete A서버에는 없는데 B서버에 있다면 지우라는 명령

::는 873포트를 이용한 rsync에서 사용하며 ssh나 rsh를 사용할 경우에는 : 라고 써야 한다. 우리는 873 포트를 이용하므로 :: 라고 써야 한다.
www는 rsync 서버의 /etc/rsyncd.conf 파일에서 준 닉 이다. 바로 그 곳에서 설정한 path의 소스들을 /usr/local/localSource/ 디렉토리 밑으로 가져온다는 의미이다.

이해를 다 하셨다면 'Enter'를 힘차게 눌러보자.. 화면이 주르륵 하면서 소스를 가져오는 것이 보일 것이다.(안보이면 대략 낭패..-.-;)
처음에는 모든 파일을 다 가져오기에 조금 시간이 걸릴 것이다. 하지만 그 다음부터는 변경된 파일만 가져올 것이므로 그다지 부하는 걸리지 않을 것이다.^^ (예상하건데...)

이 명령어를 수동으로 매번 타이핑할 수 없으므로 /etc/cron.hourly/ 밑에 shell script 파일 하나를 만들자.

#vi rsync.sh

rsync -avzrt --delete 192.168.1.1::www /usr/local/localSource/

그리고 나서 chmod 700 rsync.sh 하면...^^ rsync 완료...


4. nfs의 설정

사이트에 소스만 있다면 이것으로 끝날 수 있다. 하지만 어찌 소스만 있으랴... nobody 권한으로 생성되는 각종 파일들(로그기록, 그림파일, 업로드 되는 파일들... 기타 등등)을 어떻게 두 서버에서 공유할 수 있단 말인가?
사용자가 운좋게 Round-Robin에서 잘 걸려서 A서버로 붙은 후 파일을 업로드 했다면 rsync로 샥~~ 파일을 가져오면 되는데... B서버에 붙어서 파일을 올렸다면 어찌 해 볼 도리가 없다. 그렇다고 B서버에 rsync 서버를 설치하고 거꾸로 다시 가져오는 것도 바보같은 짓이다.^^(설마 이렇게 하는 분들은 안계시겠죠?)

그래서 나온 것이 nfs이다. Network File System의 약자로 원격지에 있는 하드디스크를 마치 자신의 하드디스크인양 mount 해서 쓸 수 있는 것이다.
따라서 A서버에 있는 디렉토리를 B서버에서 마운트 한다면 어느 서버에서 파일을 올리던 한곳에 파일이 기록되게 되는 것이다. 물론 파일서버를 하나 더 두고 A, B 서버 모두 마운트 해서 사용해도 될 것이다(이렇게는 해 보지 않았다^^)

한가지 주의할 사항은 파일이 쌓이는 곳이 DocumentRoot 밖에 있어야 한다는 것이다. 그래야지만 rsync와 상관없이 실시간으로 파일을 공유할 수 있기 때문이다.

필자는 /localData 란 디렉토리를 하나 만들고 이곳에 nobody 권한으로 생기는 모든 파일을 잘 정리해서 사용하고 있었다.
그럼 nfs의 설정을 하나하나 살펴보도록 하자.


우선은 rsync와 마찬가지로 어느 디렉토리를 어떤 아이피와 공유할 것인지를 설정해야 한다. 따라서 A서버에서 다음과 같이 설정해 줘야 한다.

#vi /etc/exports

/localData 192.168.1.2(rw,no_root_squash)


여기서 /localData란 마운트 당할(?) 디렉토리명... 192.168.1.2는 접근 허용할 아이피, rw는 일고 쓰기 가능토록 권한을 주는 것..., no_root_squash는 B서버의 root도 해당 디렉토리에서 A서버의 루트 권한을 주는 것(맞나?)이다. 참고로 아이피는 도메인으로 설정해 줘도 되는데... 우리는 A서버와 B서버의 도메인이 같으므로 아이피로 하도록 한다.
이렇게 설정을 한 다음... nfs 데몬을 재시작 한다.

#/etc/rc.d/init.d/nfs restart

이렇게 하면 5개인가의 데몬이 주르륵 재시작된다.(stop, start 합치면 10개의 ok 사인이 떨어진다.^^)

이상태에서 바로 B 서버에서 mount를 하면 대략 난감이다. ^^(이거때문에 몇일을 헤메었는지 모른다.^^;;)
이렇게 다 했다면 가장 중요한 데몬 하나를 죽여줘야 한다.^^

#/etc/rc.d/init.d/nfslock stop

이놈이 뭐하는 놈인지 모르겠는데, 이 데몬이 살아 있다면 죽어도 B서버에서 A서버의 /localData를 mount 하지 못할 것이다.(하는 분이 나타난다면... 안되는데..^^;;)
어째든 여기까지 했다면 거의 다 성공한 것이다.

하지만 B서버에서도 설정해 줘야 할 것이 몇개 있다.^^

다음과 같이 dns에 질의하지 않고 바로 연결할 수 있도록 hosts파일을 편집해 줘야 한다.(성능상 좋다고 한다^^, hosts파일의 역할을 모르시는 분은 검색..^^)

#vi /etc/hosts

192.168.1.1 localhost.com localhost.com


그다음 마운트!!!

#mount -t nfs localhost.com:/localData /localData/

한번 마운트가 잘 되었는지 확인해 보자...^^

#cd /localData
#ls -al
drwxr-xr-x 8 nobody nobody 4096 2월 23 17:57 .
drwxr-xr-x 20 nobody nobody 4096 2월 24 13:10 ..
drwxr-xr-x 2 nobody nobody 4096 2월 25 10:44 adminCharge
drwxr-xr-x 2 nobody nobody 4096 2월 26 16:48 cafeConn
drwxr-xr-x 38 nobody nobody 4096 2월 11 13:23 history
drwxr-xr-x 38 nobody nobody 4096 7월 22 2003 ipLog
drwxr-xr-x 2 nobody nobody 8192 2월 27 2004 joinWord
drwxr-xr-x 2 nobody nobody 4096 1월 2 00:06 userAgent

이 다음 B서버에서 접속한 경우 nobody 권한으로 기록되는 파일들이 /localData에 제대로 기록되는지 테스트만 해 보면 된다.


마침...

현재 이런 셋팅에서 테스트 해본 결과 잘 되고 있습니. 다만 로드밸런싱을 하는 프로그램이 따로 없고 네임서버를 이용한 Round-Robin을 이용하다 보니 A, B 서버의 사양에 상관없이 균등하게 배분이 되며 한번 A서버에 붙은 사람은 B 서버로 잘 옮겨오지 못하는 경우가 발생합니다.
그렇게 큰 문제는 아니라고 생각되지만, 불편하신 분들은 더 좋은 로드밸런싱 프로그램을 사용하길 바랍니다. 아마도 돈을 조금 지불해야 되지 않을까 십네요^^
그리고 더 좋은 무료 로드밸런싱 제품이 있다면 저한테도 좀 알려주시기 바랍니다.^^


참고로 이 글은 제가 직접 쓴 글이므로(물론 많은 분들의 도움이 있었지만..^^) 옮겨가실 때에는 출처를 밝혀 주시고... 이대로 따라 하시다가 서버가 맛이 간다거나 해도 저의 책임이 없음을 미리 밝히는 바입니다.^^;

그럼 즐프하시고...
좋은 시간 되세요.

'리눅스 > 리눅스설정방법' 카테고리의 다른 글

사설 ssl 키 생성  (0) 2014.07.04
centos 6.x selinux 해제  (0) 2014.06.11
openssl update  (0) 2014.06.11
centos 6.x openvpn 설치하기.  (0) 2014.05.08
리눅스 랜카드 잡기  (22) 2014.04.26

openssl update

Posted by 주원이^^
2014. 6. 11. 09:26 리눅스/리눅스설정방법
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

///////////백업 하기 ///////////////////

 

etc/pki/tls/openssl.cnf

 

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

 

./config --prefix=/usr/local --openssldir=/usr/local/openssl

 

///////source ////////////

http://www.openssl.org/source/

'리눅스 > 리눅스설정방법' 카테고리의 다른 글

centos 6.x selinux 해제  (0) 2014.06.11
웹분산  (0) 2014.06.11
centos 6.x openvpn 설치하기.  (0) 2014.05.08
리눅스 랜카드 잡기  (22) 2014.04.26
리눅스 CVS 설치 구축  (2394) 2012.11.14

centos 6.x openvpn 설치하기.

Posted by 주원이^^
2014. 5. 8. 13:30 리눅스/리눅스설정방법
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

cd /opt

wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

 

또는

 

epel-release-6-8.noarch.rpm


rpm -Uvh epel-release-6-8.noarch.rpm

 

$ cd /etc/yum.repos.d
$ wget http://repos.openvpn.net/repos/yum/conf/repos.openvpn.net-CentOS6-snapshots.repo

 

해줘야 설치가능

'리눅스 > 리눅스설정방법' 카테고리의 다른 글

웹분산  (0) 2014.06.11
openssl update  (0) 2014.06.11
리눅스 랜카드 잡기  (22) 2014.04.26
리눅스 CVS 설치 구축  (2394) 2012.11.14
대한민국 ip 만 열어주고 외국ip 차단  (1160) 2012.04.16

리눅스 랜카드 잡기

Posted by 주원이^^
2014. 4. 26. 14:25 리눅스/리눅스설정방법
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

CentOS 5.6 에 Atheros AR8151 랜카드 설치

메인보드 : ASRoCK H61DE/S3
랜카드 : Gigabit LAN 10/100/1000Mb/s Atheros AR8151

 

1.증상

CentOS 5.6을 설치하였지만 랜카드를 인식하지 못함.

# ip link show
화면에 나타난 장치명중에서 eth0, eth1 등이 있어야 함

# ifconfig
eth0 나 eth1 등의 내용은 없음.


# lspci | grep Ethernet
04:00.0 Ethernet contoller: Atheros Communications Inc.
AR8151 v2.0 Gigabit Ethernet (rev c0)
랜카드가 인식이 되므로 리눅스에서 랜카드가 있음은 감지되고 있다.

 

2.시스템의 환경

랜카드를 설치하기전에 centOS 버젼을 확인한다.
# vi /etc/redhat-release
CentOS release 5.8 (Final)

커널버젼을 확인한다.
# uname -r
2.6.18-308.24.1.el5xen

 

 

3.드라이버 다운로드

다운로드 사이트
http://elrepo.org/linux/elrepo/

위링크에서 centOS 버젼이 5인 경우는 el5, 6인 경우는 el6디렉토리를 찾는다.
32비트 버젼은 i386, 64비트 버젼은 i686디렉토리이다.


http://elrepo.org/linux/elrepo/el5/i386/RPMS/

아래의 파일을 다운 받는다.
kmod-atl1e-1.0.1.14-1.el5.elrepo.i686.rpm 28-Jun-2011 10:18 55K

단, 커널이 xen 버젼이면 아래 파일응 다운로드 받는다.
kmod-atl1e-xen-1.0.1.14-1.el5.elrepo.i686.rpm 28-Jun-2011 10:18 56K

 

 

4.드라이버 설치

자료를 다운로드한 디렉토리로 이동한다.
현재 이 컴퓨터로는 인터넷이 안되므로 다른 컴퓨터에서 다운로드한 자료를 usb로 옮겨 사용한다.
# cd /media/disk/lan

다운로드 받은 파일을 설치한다.
# rpm -ivh kmod-atl1e-xen-1.0.1.14-1.el5.elrepo.i686.rpm

모듈을 커널에 적재한다.
# modprobe atl1e

모듈적재 상태 확인
# lsmod |grep atl1e
atl1e 74528 0

 


5.작동 진행상태 확인

랜카드를 확인해 본다.
[root@localhost lan]# ifconfig eth0
eth0 Link encap:Ethernet HWaddr BC:5F:F4:1A:7E:61
BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
Interrupt:18

eth0가 설정되지 않았으므로
[root@localhost lan]# vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=dhcp
onBOOT=yes
위 내용을 저장한다.


# service network restart
인터페이스 eth0 (을)를 종료 중: [ OK ]
loopback 인터페이스를 종료 중: [ OK ]
loopback 인터페이스를 활성화 중: [ OK ]
eth0 인터페이스 활성화 중:
eth0에 관한 IP 정보를 얻고 있음... 완료. [ OK ]

 

 

6.최종확인과 인터넷 연결

[root@localhost lan]# ifconfig
eth0 Link encap:Ethernet HWaddr BC:5F:F4:1A:7E:61
inet addr:192.168.0.2 Bcast:192.168.0.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:590 errors:0 dropped:0 overruns:0 frame:0
TX packets:18 errors:0 dropped:0 overruns:0 carrier:1
collisions:0 txqueuelen:1000
RX bytes:37773 (36.8 KiB) TX bytes:3990 (3.8 KiB)
Interrupt:18

이제부터는 정상적으로 네트워크 연결이나 인터넷이 작동된다.

 

'리눅스 > 리눅스설정방법' 카테고리의 다른 글

openssl update  (0) 2014.06.11
centos 6.x openvpn 설치하기.  (0) 2014.05.08
리눅스 CVS 설치 구축  (2394) 2012.11.14
대한민국 ip 만 열어주고 외국ip 차단  (1160) 2012.04.16
리눅스 랜카드 새로 잡기  (134) 2012.04.14