Linux LAN Card Speed 설정

LAN Card Speed (10M,100M) 및 duplex 모드 설정 (Half Duplex, Full Duplex)
. 현재 로드된 모듈 확인 : lsmod

. #cat /etc/modules.conf

. 랜카드 전송모드 설정하기
modprobe 랜카드모듈명 speed_duplex=설정번호
여기서 "랜카드모듈명"은 lsmod 했을대 적재된 모듈명을 사용하시면 되고 "설정번호"는
0,1,2,3,4로 설정할 수 있으며 그 의미는 각각 다음과 같습니다.

-speed_duplex=0 : aouto detection 모드로 설정
-speed_duplex=1 : 10M , half deplex로 설정
-speed_duplex=2 : 10M , duplex로 설정
-speed_duplex=3 : 100M , half duplex로 설정
-speed_duplex=4 : 100M , full duplex로 설정

설정예 1: Auto 모드

# modprobe eepro100 speed_duplex=0

linux Route

route


route add default gw 게이트웨어 IP주소 dev 네트워인터페이스 장치명
#route add default gw 192.168.0.1 dev eth0

route add -net 192.168.0.1 netmask 255.255.255.0 dev eth0

* #route 현재 설정 라우팅 경로 확인 가능

. netstat
- a 옵션 : --all과 같으며 listen되는 소켓정보와 listen되지 않은 소켓정보
모두를 보여줌
- n 옵션 : --numeric과 같으며 10진수의 수치정보로 결과를 출력해줌
- r 옵션 : --route과 같으며 실행된 라우팅 정보를 출력해줌
- p 옵션 : --program과 같으며 실행되고 있는 각 프로그램과 PID 정보를 출력함
- i 옵션 : --interface=iface과 같으며 모든 네트웍인터페이스 정보를 출력함
또는 특정 네트웍인터페이스를 지정할 수도 있음
- c 옵션 : --continuous과 같으며 netstat결과를 연속적으로 출력함
- ㅣ옵션 : --listening과 같으며 현재 listen되고 있는 소켓정보를 출력함
- s 옵션 : --statistics과 같으며 각 프로토콜에 대한 통계정보를 출력함

netstat -an 명령결과 확인 가능한 연결상태표시
- LISTEN : 연결이 가능하도록 관련 데몬이 떠있으며 연결이 가능함을 나타냄
- SYS-SENT : 연결을 요청한 상태
- SYN_RECEIVED :연결요구에 의한 응답을 준 후에 확인메시지를 기다리고 있는 상태
- ESTABLISHED : 앞의 3단계 연결과정이 모두 종료된 후에 연결이 완료된 상태
- FIN-WAIT1,CLOSE-WAIT,FIN-WAIT2 : 연결종료를 위해 종료 요청을 받은후의
종료과정임
- CLOSING : 전송된 메시지가 유실된 상태를 나타냄
- TIME-WAIT : 연결종료 후에 한동안 유지하고 있는 상태
- CLOSE : 연결이 완전히 종료됨


7. 랜카드 속도(10M,100M) 및 duplex 모드 설정 (Half Duplex, Full Duplex)

. 현재 로드된 모듈 확인 : lsmod

linux 기본 명령어

리눅스 서버의 라우팅 테이블 확인
netstat -nr

2. 리눅스 서버의 인터페이스 확인
ifconfig -a

.MTU(Maximum Transfer Unit) : 1500
.RX packets(부팅 후 현재까지 받은 패킷수) :
.TX packets(부팅 후 현재까지 보내어진 패킷수) :
.Collisions : 0
.Interrupt 주소 : 21번
.현재 UP(사용가능)되어 있음도 알 수 있음

3. 리눅스에서 네트워크 설정 파일
. Default Gatewya 설정 파일
#cat /etc/sysconfig/network

NETWORKING=yes
HOSTNAME=clubcm
GATEYAYDEV : eth0
GATEWAY=211.220.193.254

. 호스트 설정 파일
#cat /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0
BOOTPROTO=static
BROADCAST=211.220.193.255
IPADDR=211.220.193.248
NETMASK=255.255.255.224
NETWORK=211.220.193.224
ONBOOT=yes

. 기본 DNS 설정 파일
#cat /etc/resolv.conf

nameserver 168.126.63.1

. HOSTNAME 대상파일
/etc/sysconfig/network
/etc/HOSTNAME (이파일은 위의 파일에서 읽어와 저장되는 파일 임)

* HOSTNAME변경후 네트워크 재 실행 스크립트
/etc/rc.d/init.d/network restart

4. ifconfig를 이용한 ip 할당하는 방법
#ifconfig eth0 down

#ifconfig eth0 up

#ifconfig eth0 192.168.0.100 netmask 255.255.255.255.0 broadcast 192.168.0.255 up


5. 네트워설정 파일들을 이용한 서버 IP Address 변경하는 방법
. 네트워크 주소 설정 파일 두개
/etc/sysconfig/network
/etc/sysconfig/network-scripts/ifcfg-eth0

. 위의 두 파일설정 후 네트워크 설정을 위해 사용할 네트워크 스크립트
/etc/rc.d/init.d/network restart

./usr/sbin/netconfig
/usr/sbin/netconfig eth0


6. 리눗스 네트워크 관련 명령어

. ping
-s 옵션 : Ping 테스트시 사용할 패킷 사이즈 크기 설정 옵션
-q 옵션 : 종합결과를 보여줌
- i 옵션 : interval을 설정, 즉 지연 시간을 의미
- b옵션 : Ping 테스트를 하는 서버와 동일한 네트웍에 있는 모든 호스트로 패킷을 보냄
- c옵션 : Ping 테스트시 보낼 패킷 수를 지정해 주는 옵션


. traceroute

리눅스 계정 관리

1. 리눅스 계정 관리

1.1 Default 계정 삭제

리눅스를 설치하면 자동으로 생성되는 계정 가운데 lp, sync, shutdown, halt, news, uucp, operator, games, gopher 등  실제로 사용하지 않는 계정은 모두 없애는 것이 좋다.
ftp, xfs, adm, lp, newes, gopher를 /etc/passwd와 /etc/group 에서 주석처리 또는 userdel uid, groupdel gid를 하면 된다.
#userdel adm
#userdel  lp
#userdel sync
#userdel shutdown
#userdel halt
#userdel news
#userdel uucp

#userdel uuucp
#userdel operator
#userdel games
#userdel gopher
#userdel ftp (anymous FTP server를 운영하지 않으면 삭제 한다.)



1.2 ROOT 권한

/etc/passwd 파일에서 UID가 0인 일반계정의 UID를 100이상으로 수정 필요

>변경 방법 # usermod -u 2222 of (of 계정의 UID를 2222로 변경)



/etc/passwd, /etc/group, 파일의 접근권한을 제한

>변경 방법 # chmod 644 /etc/passwd 

               # chmod 644 /etc/group

               # chmod 400 /etc/shadow



쉘 로그인 필요없는 계정 Shell 제한

>변경 방법 # vi /etc/passwd

daemon : x : 1 : 1  : : / : /bin/false



• Passwd 파일구조
root : x : 0 : 0 : root : /root : /bin/bash

(1)   (2) (3) (4) (5)     (6)       (7)


(1)Login Name : 사용자 계정을 의미한다.
(2)Password : 사용자 암호가 들어갈 자리이나, /etc/shadow 파일에 저장된다.
(3)User ID : 사용자 ID를 의미하며, root의 경우 0이 된다.
(4)User Group ID : 사용자가 속한 그룹 ID를 의미하며, root 그룹의 경우 0 이다.
(5)Comments : 사용자의 코멘트 정보를 적는 곳이다.
(6)Home Directory : 사용자의 홈 디렉토리를 지정한다.
(7)Shell : 사용자가 기본으로 사용하는 쉘 종류가 지정된다.



• shadow 파일구조

Root : $1$Fz4q1GjE$G/EskZPyPdMo9.cNhRKSY.:14806: 0 : 99999 : 7 : : :
(1)                      (2)                                        (3)   (4) (5)     (6) (7) (8) (9)

각 필드의 구분자는 콜론(:)이며, 각 필드는 아래의 의미를 가지고 있다.

(1)Login Name : 사용자 계정
(2)Encrypted : 패스워드를 암호화시킨 값
(3)Last Changed : 1970년부터 1월 1일부터 패스워드가 수정된 날짜의 일수를 계산
(4)Minimum : 패스워드가 변경되기 전 최소사용기간(일수)
(5)Maximum : 패스워드 변경 전 최대사용기간(일수)
(6)Warn : 패스워드 사용 만기일 전에 경고 메시지를 제공하는 일수
(7)Inactive : 로그인 접속차단 일 수
(8)Expire : 로그인 사용을 금지하는 일 수 (월/일/연도)
(9)Reserved : 사용되지 않음



1.3 패스워드 규칙 설정

/etc/login.defs는 'useradd' 명령이 수행될 수 있도록 하는 기본 설정 파일이다.

> 패스워드 길이는 8자이상                        PASS_MIN_LEN   8

> 패스워드 최대 사용기간을 60일 이하         PASS_MAX_DAYS 60

> 패스워드 최소 기간을 1일 이상으로 설정     pASS_MIN_DAYS    1


 MAIL_DIR/var/spool/mail
 메일 스풀 디렉토리 지정

PASS_MAX_DAYS 99
 패스워드의 변경 없이 사용할 수 있는 최대일자

PASS_MIN_DAYS 0
 패스워드의 변경 없이 사용할 수 있는 최소일자

PASS_MIN_LEN 10
 패스워드 최소바이트 수

UID_MIN 500
 새로 생성되는 사용자의 UID 시작번호

UID_MAX 600
 최대로 생성될 수 있는 UID개수

GID_MIN 500
 새로 생성되는 그룹의 GID 시작번호

GID_MAX 600
 최대로 생성될 수 있는 GID개수

CREATE_HOME yes
 홈디렉토리를 자동으로 생성할 것인가의 여부






1.4 SU 제한


 1) /etc/pam.d/su 파일 수정

auth        sufficient   /lib/security/pam_rootok.so
auth       required   /lib/security/pam_wheel.so debug group=wheel

2) wheel group 생성

# Groupadd wheel

3) wheel 그룹에 SU사용할 사용자 추가


# usermod -G wheel 계정명

OpenSSH 5.0 버전 설치

OpenSSH 5.0 버전 설치 과정에 대해 알아보자.

OpenSSH의 공식 홈페이지는 (http://www.openssh.org/)  이며, OpenBSD를 중심으로 개발이 진행되고 있어서, OpenBSD 이외의 플랫폼일 경우에는 파일명의 버전 뒤에 p자를 붙이고 있다.

따라서 설치할 시스템이 OpenBSD이외의 시스템인 경우 버전명 뒤에 p가 붙은 파일을 다운로드하면 된다.

# tar xvzf openssh-5.0p1.tar.gz
# cd openssh-5.0p1
압축 해제가 완료된후 configure를 실행하게 되는데, 사용자 환경에 따라 몇가지 옵션을 추가할 수 있다.

--prefix : 설치 디렉토리 (디폴트 디렉토리는 /usr/local 이다.)
--sysconfdir : 환경설정 파일의 위치
--with-pam : 비밀번호 인증방식에 PAM 방식 추가.
--with-md5-passwords : 최근의 리눅스는 md5 패스워드 방식을 사용하고 있기 때문에 반드시 지정해주어야 함. 추가하지 않는 경우, md5 형태의의 비밀번호 사용자는 인증할 수 없음. (단 --with-pam을 지정했을 경우에는 필요 없다.)

# ./--prefix=/usr --syscconfigure onfdir=/etc/ssh --with-pam
# make
# make install
# chkconfig --list | grep sshd
# chkconfig --add sshd



설치가 완료되면 config를 이용하여 xinetd 데몬에 등록한다

Bash 패치

Bash 패치


For RHEL 5.x:

rpm -Uvh bash-3.2-33.el5_11.4.x86_64.rpm
rpm -Uvh bash-debuginfo-3.2-33.el5_11.4.x86_64.rpm

--------------------------------------------------------------------------------

For RHEL 6.x:

rpm -Uvh bash-4.1.2-15.el6_5.2.x86_64.rpm
rpm -Uvh bash-debuginfo-4.1.2-15.el6_5.2.x86_64.rpm
rpm -Uvh bash-doc-4.1.2-15.el6_5.2.x86_64.rpm






RHEL 4
1. mkdir -p /root/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS} 

2. echo "%_topdir /root/rpmbuild/" > /root/.rpmmacros


4. cd /root/rpmbuild/SOURcd CES/


6. bash30-017 파일 내용 중 3.0.16 3.0 으로 수정

7. cd /root/rpmbuild/SPECS/

8. bash.spec 파일 내용을 다음과 같이 수정

Release: 27%{?dist} -> Release: 27.2%{?dist}

Patch17: bash30-017 추가

#%patch16 -p0 -b .016 주석 해제
%patch17 -p0 -b .017 추가

9. rpmbuild -ba bash.spec

10. rpm -Fvh /root/rpmbuild/RPMS/i386/bash-3.0-27.2.i386.rpm



TEST 환경 : OpenSUSE 11.3 64bit, Ubuntu 14.04 32bit

1. bash 보안 취약점 확인 방법.
: 터미널에서 다음과 같이 입력하도록 합니다.

# env x='() { :;}; echo vulnerable' bash -c "echo this is a test"

결과 값으로 다음과 같이 확인이 가능합니다.

# this is a test -> 정상




# vulnerable
# this is a test -> 업그레이드 필요.

2. upgrade 방법

- CentOS 계열 : # yum update bash
- Ubuntu/Debian 계열 : # apt-get install bash

이밖의 리눅스 계열이나, 혹시 정상적으로 업그레이드가 되지 않은 경우. 다음과 같이 메뉴얼로 업데이트 할 수 있도록 합니다.

# cd /tmp
# tar zxf bash-master.tar.gz
# cd bash-master/
# ./configure
# make
# ./bash --version
# sudo mv /bin/bash /bin/bash.old
# sudo chmod a-x /bin/bash.old
# sudo cp -an bash /bin

# sudo make install

linux RPM 명령어



Rpm 명령어


# 설치모드 -i
rpm -ivh bash-3.2-33.el5_11.4.x86_64.rpm

강제설치 -V

# 업그레이드 모드 -U
rpm -Uvh bash-3.2-33.el5_11.4.x86_64.rpm

# 삭제모드 -e

# ex #1
rpm -e bash

# ex #2
# 의존성 문제로 삭제가 안될때 쓰는 옵션입니다.
rpm -e --nodeps bash

# 질의 모드 -q
# 설치된 패키지 전체목록을 페이지당 출력.

# ex #1
rpm -qa | less

# ex #2
# 패키지 이름중 bash가 들어간 패키지이름을 모두 출력합니다.
rpm -qa | grep bash

# 현제의 패키지가 의존하는 패키지, 라이브러리 목록을 출력합니다.
rpm -qR 패키지명

# rpm 패키지 관리 데이터베이스를 다시 생성합니다.
rpm --rebuilddb

# 패키지에 대한 정보를 표시합니다.
rpm -qi 패키지명

# 현재 패키지에 포함된 모든 파일명을 출력합니다.
rpm -ql 패키지명

# 검증옵션. rpm 데이터베이스와 원본 패키지의 내용을 비교합니다.

rpm -Va

NetworkManager Disable


NetworkManager is crap. Disable it. Use /etc/init.d/network only. 

service NetworkManager stop
chkconfig NetworkManager off
service network restart
chkconfig network on
What do you mean by "real ip address"? Is it set up for DHCP or Static IP?

Try these commands to help assess your problem:

show current ip config:
Code:
ip a
route -n
show ethernet devices known to kernel:
Code:
ls /sys/class/netshow physical connection on eth0 device:
Code:
ethtool eth0|grep Linkshow contents of eth0 ip configuration file:
Code:
cat /etc/sysconfig/network-scripts/ifcfg-eth0

XenServer 설치 가이드

XenServer 설치 가이드


- 설치순서 (텍스트설명)
XenServer CD를 넣고 부팅 합니다.
01. Select Keymap : [qwerty] US 선택
02. Welcome to XenServer Setup : OK 선택
03. End User License Agreement : Accept EULA 선택
04. Select Primary Disk : OS를 설치할 하드디스크 지정 후 OK 선택
05. Virtual Machine Storage : 스토리지는 설치 이후 설정할 수 있습니다. 체크되어있는 디스크를 모두 해제하고 OK 선택
06. Warning : Continue 선택
07. Select Installation Source : Local media 지정 후 OK 선택
08. Supplemental Packs : 추가 패키지가 없으므로 NO 선택
09. Verify Installation Source : 굳이 검증할 필요 없으므로 시간 단축을 위해 Skip verification 지정 후 OK 선택
10. Set Password : 패스워드 입력 후 OK 선택
11. Networking : XenServer관리용으로 사용할 포트(예:eth0) 지정 후 OK 선택
12. Networking : DHCP 또는 Static 선택 및 필요한 정보 입력 후 OK 선택
13. Hostname and DNS Configuration : 호스트네임 및 DNS서버(예:168.126.63.1) 입력 후 OK 선택
14. Select Time Zone : Asia 지정 후 OK 선택
15. Select Time Zone : Seoul 지정 후 OK 선택
16. System Time : NTP와 Manual 중 원하는 것으로 지정하고 OK 선택 (여기서는 Manual)
17. Confirm Installation : Install XenServer 선택
18. Set local time : 현재 시간 지정 후 OK 선택
19. Installation Complete : OK 선택 하면 재부팅, 설치완료

- 설치순서 (텍스트+이미지설명)
XenServer CD를 넣고 부팅 합니다.
01. Select Keymap : [qwerty] US 선택
 02. Welcome to XenServer Setup : OK 선택
03. End User License Agreement : Accept EULA 선택
04. Select Primary Disk : OS를 설치할 하드디스크 지정 후 OK 선택
05. Virtual Machine Storage : 스토리지는 설치 이후 설정할 수 있습니다. 체크되어있는 디스크를 모두 해제하고 OK 선택
06. Warning : Continue 선택
07. Select Installation Source : Local media 지정 후 OK 선택
08. Supplemental Packs : 추가 패키지가 없으므로 NO 선택
09. Verify Installation Source : 굳이 검증할 필요 없으므로 시간 단축을 위해 Skip verification 지정 후 OK 선택
10. Set Password : 패스워드 입력 후 OK 선택
11. Networking : XenServer관리용으로 사용할 포트(예:eth0) 지정 후 OK 선택
12. Networking : DHCP 또는 Static 선택 및 필요한 정보 입력 후 OK 선택
13. Hostname and DNS Configuration : 호스트네임 및 DNS서버(예:168.126.63.1) 입력 후 OK 선택
14. Select Time Zone : Asia 지정 후 OK 선택
15. Select Time Zone : Seoul 지정 후 OK 선택
16. System Time : NTP와 Manual 중 원하는 것으로 지정하고 OK 선택 (여기서는 Manual)
17. Confirm Installation : Install XenServer 선택
18. Set local time : 현재 시간 지정 후 OK 선택
19. Installation Complete : OK 선택 하면 재부팅, 설치완료


Linux NTP 설정


Linux NTP 설정


[root@ ~]# rdate -s time.bora.net
rdate: time.bora.net: Temporary failure in name resolution (dns 서버 등록이 안되어 있을경우 발생 reslov.conf에 nameserver를 등록하고 재시도 해보자...)
[root@ ~]# clock -w (시간 동기화)


NTP 설정하기

[root@ ~]# vi /etc/ntp.conf을 열어 맞출 서버 정보들을 넣어준다
server time.bora.net
server ntp1.epidc.co.kr
server ntp2.epidc.co.kr
server 58.73.137.250 (kr.pool.ntp.org)

[root@ ~]# service ntpd restart (/etc/rc.d/init.d/ntpd restart)
ntpd를 종료 중 : [  OK  ]
ntpd (을)를 시작 중 : [ OK  ]

NTP 설정 및 동기화 확인 (server 정보앞에 *가 붙어있어야 동기화 중 동기화 시간이 조금 걸림)

[root@ ~]# ntpq -p
     remote                  refid      st t when poll reach   delay   offset  jitter
==============================================================================

 *server time.bora.net   .INIT.          16 u    -   64    0    0.000    0.000   0.000

SELinux 설정 후 kernel panic 발생

SELinux 설정 후 Kernel panic


최근 서버 구축 후 이것 저것 설정 하고 재부팅 했더니 kernel panic 메세지 나타 나며 
부팅 실패 하였습니다. 

처음에는 Dell R730 서버와 Cent OS 문제 호환성 문제 인가 생각하고 몇번 재 설치 했습니다. 

설치 후 바로 재부팅은 전혀 문제 없었고 이상 없음을 확인하고 다시 셋팅 하여 재부팅 했더니 

다시  kernel panic  ㅜㅜ 

몇번 반복 후 알게된 나의 실수 
SELinux 설정시 /etc/selinux/config 파일을 수정 합니다.  이 파일에는 SELINUX, SELINUXTYPE 설정 파라메터가 2개있습니다.
1
2  # This file controls the state of SELinux on the system.
3  # SELINUX= can take one of these three values:
4  #     enforcing - SELinux security policy is enforced.
5  #     permissive - SELinux prints warnings instead of enforcing.
6  #     disabled - No SELinux policy is loaded.
SELINUX=enforcing
8  # SELINUXTYPE= can take one of these two values:
9  #     targeted - Targeted processes are protected,
10 #     mls - Multi Level Security protection.
11 SELINUXTYPE=targeted

SELINUX를 disabled 변경하려다가 11번째 라인의 SELINUXTYPE에 disabled 를 수정 후 재부팅 하게 되면 부팅시 커널 패닉 에러가 발생합니다.  

복구 방법
  1. 싱글 모드로 부팅 
  2. GRUB 메뉴에서 e 키를 누릅니다.
  3. kernel 행을 선택하여 키보드의 e키를 누릅니다.
  4. 수정 모드가 표시되면 마지막 부분에 한칸 띄우고 enforcing=0 라고 입력하여 추가합니다. 
  5. b키를 눌러 OS를 부팅합니다.
  1. 부팅후 /etc/selinux/config파일 SELINUX을 desabled로 설정 하고 재부팅합니다.

Centos em0 -> eth0 변경 방법

Centos em0 -> eth0 변경 방법


Cent os 6 기준
Vi /etc/grub.conf  ->  추가  biosdevname=0   
/etc/sysconfig/network-scripts/ 에서 네트워크 이름 변경 em1 -> eth0

vi ifcfg-eth0 파일을 열어서 DEVICE=em0 부분을 eth0로 수정 합니다. 
/etc/udev/rules.d/70-persistent-net.rules 삭제

모든 설정 완료 후 service network restart 또는 재부팅 해주시고 

ifconfig를 실행 정상 적용 확인 합니다.