퍼미션을 아무리 제대로 설정해 주어도, CentOS ( 가상환경 포함 ) 에서 XE 는 잘 되는데

그누보드는 짜증스럽게 설치가 되지 않는 경우가 있습니다.

707 퍼미션 문제를 자주 뱉는데, 실제로 퍼미션을 아무리 잘 바꿔주어도, 마찬가지의 결과가 나오지요.

사실 퍼미션 문제가 정말 퍼미션 문제가 아닐 경우, 워낙 광범위한 문제입니다.

 

 

해결방법은 몇 가지로 요약해 볼 수 있겠습니다.

 

1. 보안문맥 해제

= 흔한 db 서버 ( MYSQL 이 별도 머신에 존재 등의 이유로 로드밸런싱이 이루어져 있을 경우 ) 의 연결불통

selinux 보안문맥 확인
getsebool -a | grep httpd

보안문맥의 일부 off 옵션을 on 으로 설정
setsebool -P httpd_can_network_connect=on
setsebool -P httpd_can_network_connect_db=on

 

= 귀찮으면 그냥 전체 SElinux 해제

( #Setenforce 0 ) 또는 /etc/selinux/config 파일에서 Enforce 설정을 Permissive 로 변경.

 

 

= 또는 chcon 사용하여 경로문맥 수정....

 

흔히 자신의 계정이 아닌 root 라던지의 경로에 웹 실행관련 파일들을 심어놨을 경우, 보안문맥에 의해

가로막혀서 퍼미션 에러가 뜨게 된다 ( ls -Z 등으로 보안문맥을 봤을 때 admin_home 구문의 경로에 mysql이나 phpmyadmin 경로를 설정했을 때  등등... )

chcon -R -t httpd_user_content_t [ 상위 경로 ]

( 잘못 설정했을 경우 restorecon 명령으로 초기화 가능 )

 

 

2. 위 방법과 무관한 퍼미션 문제라면 httpd 데몬을 업데이트 후 재시작.

반드시 php 도 최신버젼으로 업데이트 하십시오 ( yum -y install php , httpd )

 

 

3. 그누보드 질문과 답변 란 참조.

그누보드의 숏태그 on/off  문제

사실 제가 이 문제에서 3시간 고민했습니다 (...)

그누보드 질답란에서 찾는데만도 시간 좀 걸렸네요.

 

/etc/php.ini 를 수정.

short_open_tag = On 으로 변경.

 

http://sir.co.kr/bbs/board.php?bo_table=g4_qa&wr_id=260057&sca=&sfl=wr_subject%7C%7Cwr_content&stx=centos

 

 

 

블로그 이미지

늙은M군

개인 저장공간입니다. 해당 일부 과정들을 공인 인터넷 환경에서 악성적으로 응용할 시 피해가 발생할 수 있으며, 그에 대해 책임은 사용자에게 있습니다!! 주의해주세요.

,

Mysql 기본 Charset 변경

ETC 2013. 5. 13. 02:26

/etc/my.cnf 수정

 

아래의 줄들을 추가

 

service mysqld restart 후 관리자 로그인

 

mysql>status 확인

 

mysql> show variables like 'c%' 확인

블로그 이미지

늙은M군

개인 저장공간입니다. 해당 일부 과정들을 공인 인터넷 환경에서 악성적으로 응용할 시 피해가 발생할 수 있으며, 그에 대해 책임은 사용자에게 있습니다!! 주의해주세요.

,

 

[ Apache ]

- 공개형 웹 서버 프로그램이지만, 매우 강력하고, 다양한 대부분의 플랫폼을 지원.
- 모듈 추가로, 확장기능 추가가 용이하다.


웹 서버의 동작 방식

정적 ( html 등... )
- 웹 브라우저(클라이언트)가 http ( 80번 포트. 디폴트 ) 로 연결하여 사용자 index.html 을 요청
해당 웹서버는 클라이언트(브라우저)가 요청한 파일을, 자기 시스템에서 검색하여 읽고, 브라우저에게 제공.
즉, 단순 송수신. 단순 출력

 

동적 ( php, jsp, asp 등.. )
- 웹 브라우저(클라이언트)가 http ( 80번 포트, 디폴트) 로 연결하여 동적인 페이지 index.php 를 요청
해당 웹서버는 php 를 자체 실행 후, 클라이언트가 요청한 변수(매개변수)를 넘겨준다.
그리고 , 그 생성된 변수의 결과를 읽고, 클라이언트의 브라우저에 전송한다.

 

 

[ 아파치 패키지 ]

아파치는 리눅스 서버의 기본 프로그램이다. httpd 데몬으로 동작한다.
실행되지 않을시 기본프로그램에 포함되어 있는지, 설정을 확인한다.

 

ex) /etc/rc.d/init.d/httpd [start/stop/restart/status]

 

 


[ 환경설정 ] - /etc/httpd/conf/httpd.conf

 

- 시작전에 설치cd 의 패키지 디렉토리에서 httpd 관련 모든 패키지를 설치한다.

 


환경설정파일의 기준은 CentOS 6.3(Final) 을 기준으로 설명.

 

1. ServerTokens

 

41 # Don't give away too much information about all the subcomponents
42 # we are running.  Comment out this line if you don't mind remote sites
43 # finding out what major optional modules you are running
44 ServerTokens OS

웹 브라우저에 에러구문, 또는 표기구문에 출력되는 내용이다.
값은 Full / OS / Minor / Min / Major / Prod 를 줄 수 있다. 보통 일반적인 웹 서버는 Full을 사용한다.

Full - 아파치 서버버젼, 운영체제, 모듈 정보 등을 모두 출력.
OS - 운영중인 아파치와 리눅스 서버버젼만을 출력.

 

 

2. Listen

 

128 # Listen: Allows you to bind Apache to specific IP addresses and/or
129 # ports, in addition to the default. See also the <VirtualHost>
130 # directive.
131 #
132 # Change this to Listen on specific IP addresses as shown below to
133 # prevent Apache from glomming onto all bound IP addresses (0.0.0.0)
134 #
135 #Listen 12.34.56.78:80
136 Listen 80

Listen 80 -> 80번 포트로 들어오는 모든 소리에 귀를 기울인다.
포트 포워딩의 개념이다.

웹 사이트를 리뉴얼 하거나, 공사중에 테스트로 가동시키고, 일반인은 접근하지 못하게 하고 싶을 때,
해당 포트만 열어두면 된다. ( 둘 중 하나는 주석처리하고 하나만 열어야 한다 )

ex)기본 접속( 80포트로 접속이 불가하고 8080 포트만 테스트용으로 열기 )

Listen 192.168.132.129:8080
#Listen 80

 

 


3. DocumentRoot

 

#
# DocumentRoot: The directory out of which you will serve your
# documents. By default, all requests are taken from this directory, but
# symbolic links and aliases may be used to point to other locations.
#
DocumentRoot "/var/www/html"


아주 중요한 , 해당 사이트의 index.html 가 위치하는 장소. 즉 해당 유저의 웹 서비스 개시 홈디렉토리 경로.
root의 웹서버 기본 경로는 /var/www/html 로 지정되어 있다. 추가 사용자를 주기 전에 해당 메인(서버)도 웹설정된
경로가 지정되어 있어야 한다.

웹 서비스는 홈디렉토리 내부에 반드시 기본설정으로 public_html 디렉토리가 있어야 한다. ( 그 안에 index.html )

 

 


4. UserDir ( co.kr/~user1/ )

 

<IfModule mod_userdir.c>
    #
    # UserDir is disabled by default since it can confirm the presence
    # of a username on the system (depending on home directory
    # permissions).
    #
    UserDir disabled

    #
    # To enable requests to /~user/ to serve the user's public_html
    # directory, remove the "UserDir disabled" line above, and uncomment
    # the following line instead:
    #
    #UserDir public_html

</IfModule>

UserDIR = 개별유저의 홈디렉토리를 사용할 것인가( 디폴트 : NO )
Userdir public_html = 개별유저를 사용할 시 index.html(웹 브라우저에 개시될 최초의 메인화면) 디렉토리 위치

ex) root 웹서버를 사용하지 않고 user1 이라는 사용자를 웹 서비스로 출력하고싶다.

위의 두 주석을 바꿔준다.

#UserDir disabled
UserDir public_html

DocumentRoot "/home/user1/public_html" - user1 의 홈 디렉토리


이렇게 하면 index.html 가 보이지 않고 Fobbiden 에러가 난다면 정상.
문제점을 찾아보도록 한다.

( 유저 홈디렉토리의 권한이 700으로 되어있다. )

현재 이 방법은 거의 사용하지 않는다.

 

 

5. Alias ( 별칭 )

 

~계정명 을 사용하지 않고 순수한 디렉토리명 ( www.myungin.co.kr/user1/ ) 을 사용하고 싶을 때 사용

#위의 UserDir 두 부분을 모두 주석처리 한다.
그 사이에 다음을 입력한다.

 

Alias /user1/ "/home/user1/public_html/"

후방의 디렉토리 표시 "/" 와 , 매개변수의 "/" 마무리를 반드시 매칭시켜줘야 한다.
그렇지 않으면 퍼미션 에러가 날 것이다.

 

Alias 의 / / 는 디렉토리의 경로가 아닌 "문자" 대체 인식의 성격이 강하다.

 

도메인의 메인 디렉토리에 사용하기보다는, 다른 용도에 주로 쓰이고 있다.

 

 

6. Virture Host ( 가상 호스트 도메인 )

 

위의 방법은 해당 도메인의 특정 계정만을 이용하는 방법이다.
가상호스트는 한 도메인으로 여러 사용자를 계정단위로 운용할 수 있다.

 

같은 아이피라도, 호스트의 명칭이나 포트에 따라
www.myungin.co.kr 로 접속하면 루트사용자의 홈디렉토리 index.html가
user1.myungin.co.kr 로 접속하면 user1의 홈디렉토리 index.html가 출력될 것이다.


ex ) kin.naver.com //  mail.naver.com 같은 호스트(www) 부분을 대체하는 디렉토리명을 말한다.
현재 가장 널리 쓰이고 있다. 우리는 해당 부분이 단순 홈디렉토리가 아닌 "계정" 그 자체를 의미한다는 것을
이제 이해해야 한다. 계정이 아닌 디렉토리라고 한다면, 해당 디렉토리에 어떤 사용자 권한을 지정하는 순간,
해당 사용자는 해당 디렉토리 전체를 손댈 수 있기 떄문에 보안에 매우 취약해진다.
계정단위로 관리하는 것이 훨씬 합리적이다.


가상호스트 구성하면 위에서 했던 모든 설정보다 우선시되어 실행된다.

(위의 설정들은 기본으로 돌려놓자)

 

(1) 네임서버 조회 - 에러출력 - 정상


(2) 가장 아랫 부분 Virture Host 의 모든 주석을 제거하고 해당 부분만 남긴다. (복사해서 써라! 백업 )
(가장 기본 구성)

#<VirtualHost *:80>
#    ServerAdmin webmaster@dummy-host.example.com
#    DocumentRoot /www/docs/dummy-host.example.com
#    ServerName dummy-host.example.com
#    ErrorLog logs/dummy-host.example.com-error_log
#    CustomLog logs/dummy-host.example.com-access_log common
#</VirtualHost>

<VirtualHost *:80>
    DocumentRoot /www/docs/dummy-host.example.com
    ServerName dummy-host.example.com
</VirtualHost>

로 다른 부분 지우고, 두 개를 만든다.

( 이유는 www 호스트와 user1 호스트 두 개를 동시에 운용하기 때문이다. )

다음과 같이 구성한다. ( root 계정은 사용할 수 없다 )

<VirtualHost 192.168.132.129:80>   // 메인 네임서버의 아이피를 입력 
    DocumentRoot /home/main/html/public_html // 해당 호스트(계정)의 메인경로
    ServerName www.myungin.co.kr // 해당 호스트의 메인 주소.
</VirtualHost>


<VirtualHost 192.168.132.129:80>
    DocumentRoot /home/user1/public_html // 중요.
    ServerName user1.myungin.co.kr // 중요.
</VirtualHost>

실제로 실습시엔 위에 // 주석 금지입니다. 에러남 ;;

 

여기까지 한다면, www는 보이지만 user1은 여전히 안 되는 사실을 알 수 있다.
(퍼미션 문제는 더 이상 생략)

설정 저장 후, /var/named 의 네임서버 환경설정 파일을 연다.
(기존 구성했던 네임서버명.zone , 아이피.zone )

추가 도메인을 입력한다.

myungin.co.kr.zone

www     IN      A       192.168.132.129
user1   IN      A       192.168.132.129

하단에 www외에 user1이라는 호스트 정방향도 추가해준다.

192.168.132.zone 파일도 설정해 주어야 한다.

 

아주 최소한의 구동가능한 버추어 호스트 세팅 완료.

 

'ETC' 카테고리의 다른 글

CentOS 에서 그누보드 설치시 퍼미션 오류 문제  (0) 2013.05.13
Mysql 기본 Charset 변경  (0) 2013.05.13
[ Basic ] Run Level과 Process 확인하기  (0) 2013.04.23
[ Basic ] Mount 와 Fdisk  (1) 2013.04.22
[ Basic ] Package 와 Tar  (0) 2013.04.22
블로그 이미지

늙은M군

개인 저장공간입니다. 해당 일부 과정들을 공인 인터넷 환경에서 악성적으로 응용할 시 피해가 발생할 수 있으며, 그에 대해 책임은 사용자에게 있습니다!! 주의해주세요.

,

 

※ Run Level ( /etc/inittab )

 

init = system 그 자체.

# Default runlevel. The runlevels used are:
#   0 - halt (Do NOT set initdefault to this)
#   1 - Single user mode
#   2 - Multiuser, without NFS (The same as 3, if you do not have networking)
#   3 - Full multiuser mode
#   4 - unused
#   5 - X11
#   6 - reboot (Do NOT set initdefault to this)


init 0 = 시스템 종료
init 6 = 시스템 리부팅

 

1 = no network. single 모드 ( 구시대 싱글 )
2 = NFS 를 지원하지 않는 다중 사용자 모드 ( 당신이 네트워크를 사용하지 않는다면 3과 같다 )
3 = 다중사용자 및 모든 기능 사용 모드
4 = 보통모드 ( X )
5 = X-Windows GUI 모드 ( 리눅스는 서버이므로 기본적으로 그래픽환경보단 커맨드(CUI), 텔넷모드(TUI)에 익숙해져야 한다 )

 

[ 프로세스 확인 ]

- 윈도우즈의 taskmgr 의 사례와 유사하다.

 

ps -ef

# ps -ef

UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 13:11 ?        00:00:01 /sbin/init
root         2     0  0 13:11 ?        00:00:00 [kthreadd]
    .
    .
    .
root      9461  3089  0 13:59 pts/1    00:00:00 su -
root      9462  9461  0 13:59 pts/1    00:00:00 -ksh
root      9635     1  0 14:01 ?        00:00:00 /usr/sbin/anacron -s
named    13082     1  0 14:23 ?        00:00:00 /usr/sbin/named-sdb -u named -t

 

UID = User ID
PID = 실행중인 Process의 넘버
PPID = 해당 프로세스의 상위 부모 Process ( Parent ID )
C = CPU ratio
STIME = 해당 프로세스의 시작 시간
TTY = 해당 프로세스의 터미널
TIME = 해당 프로세스의 실행 명령어가 입력된 시각
CMD = 해당 프로세스를 실행한 명령어

 

 

 

 

#kill [PID/PPID] 로 순서를 추적하여 해당 프로세스를 강종 가능.
잘못 종료시, 시스템이 사용 불가에 빠질수도 있으니, PID < - > PPID 의 상관관계를 잘 파악하여야 한다.

killall [데몬명/프로세스] 로 일괄적으로 전체를 종료시킬 수도 있다.

 

-9 옵션을 사용하는 점도 파악.

pstree -p 로 트리 형식으로 볼 수도 있다.

 

#skill - 관리자가 자신의 서버에 접속한 특정 계정 유저를 정지, 추방시키는 명령어
- 불필요한 접속자나 , 서버 공격자 등을 발견하고 추방할 때 사용.

ex) user1이라는 계정명을 가진 유저를 자신의 서버에서 추방
skill -KILL user1

ex) 특정 터미널 pts/0 에 접속해있는 모든 사용자를 추방
skill -KILL pts/0

ex) 특정 사용자(user1)의 서버접속 상태를 정지시킴
skill -STOP user1

 

 


 

블로그 이미지

늙은M군

개인 저장공간입니다. 해당 일부 과정들을 공인 인터넷 환경에서 악성적으로 응용할 시 피해가 발생할 수 있으며, 그에 대해 책임은 사용자에게 있습니다!! 주의해주세요.

,

[ Basic ] Mount 와 Fdisk

ETC 2013. 4. 22. 14:34

[ 뻘 ]

GNU is not Unix.

http://www.gnu.org/gnu/gnu-history.html


※ GRUB Boot Loader ( Booting 시 정보가 기록된 MBR 을 관리하는 툴/환경 ) - 리눅스 부팅시 e 키를 눌러 접속할 수 있다.

 

 

 

[ File system = 파티션과 Disk Management ( mount ) ]

리눅스의 물리적 장치 장착 후 mount 해주어야 한다.
리눅스의 마운트는 장치를 / 의 디렉토리처럼 보이게 하여, 관리하는 방식을 취하고 있다.

 

[ FDISK ]

FDISK 는 파티션을 관리하는 역할이므로 "하드디스크 장치" 를 대상으로 한다.
파티션을 재분할할 때 이외에는 통상적이다.

Primary ( 주 영역 ) 파티션과 Extend ( 확장 영역 ). Logical ( 논리 영역 ) 으로 구분한다.

 


Extend 는 실제로 사용되는 파티션이 아닌, 그 하위에 생성될 Logical 영역 전체를 감싸는, 일종의
논리 영역 전체를 총괄하는 껍질. 네이밍적 성격이 강하다.

즉 Extend 영역의 생성 없이는 하위의 Logical 파티션 생성이 불가능하다.

통상적으로 Primary 파티션은 한 하드디스크에 총 4개까지 ( 1,2,3,4 ) 생성할 수 있다.

한 하드디스크에 5개 이상의 파티션을 구성해야 할 경우에는 3개까지 Primary 로 잡고, 4번째에
extend 영역을 생성 후 5,6 순으로 Logical 파티션을 생성할 수 있다.

Primary 를 하나만 생성 후, extend 를 생성하여 나머지를 logical 파티션으로 채워도

logical 의 순번은 5번부터 시작한다는 점을 잊으면 안 된다

 ( 만들어지던, 만들지 않던간에 파티션 넘버 1,2,3,4는 Primary 의 영역에 할당되어 있다. )

 

 

# fdisk -l(전체) , fdisk -l [특정 디바이스명](특정 장치만 살펴보기)

Disk /dev/sda: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 dbytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00041de5

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          26      204800   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2              26         791     6144000   83  Linux
Partition 2 does not end on cylinder boundary.
/dev/sda3             791        1313     4194304   82  Linux swap / Solaris
/dev/sda4            1313        2611    10427392    5  Extended
/dev/sda5            1313        1568     2048000   83  Linux
/dev/sda6            1568        1594      204800   83  Linux
/dev/sda7            1594        2611     8171520   83  Linux

 

리눅스 초기 설치시에 세팅했던 부분이 그대로 나와 있다.

※ primary 파티션을 1,2,3,4 전부 생성했을 경우, 그 하드디스크는 더 이상 어떠한 논리 영역 확장이 불가하다.

( 그래서 보통 1,2,3까지 만들고 4를 extend 확장 후 5,6,7 ... 을 logical 파티션을 만든다 )

※ 고로 당연히 extend 파티션은 어떠한 상황에서도 한 개 이상 존재할 수 없다.

하드디스크는 과거 E-IDE 타입과 현재의 SCSI 타입이 있으며, 이는 정보에서 hda1, hda2 ... 또는 sda1, sda2... 처럼 구분할 수 있다.

hdc 는 CDROM 의 강제 영역이므로 임의설정이 불가하다.

 

 

[ 실습하기 - 물리적 보조 하드를 장착 후, 리눅스 안에서 사용하기 ]

 

 

1. 물리적으로 하드를 장착한다 ( VM 가상머신 HALT 후, 옵션에서 HDD 를 1.0기가 SCSI 타입을 만들어 연결한다 )

 

2. 부팅 후 fdisk -l 로 새 하드디스크가 인식되어 있는지 확인한다. 장착된 보조 하드디스크의 디바이스명을 확인한다.

 

3. 해당 장치명으로 파티션을 분할한다. ( ex : #fdisk /dev/sdb )

 

4.

Disk /dev/sdb: 1073 MB, 1073741824 bytes
255 heads, 63 sectors/track, 130 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x3198bd27


Command (m for help):

 

FDISK 파티션 수정모드이다. <P> 는 해당 장치(하드디스크)의 파티션 정보 확인. <N> 은 새 파티션 만들기. <D> 는 파티션 삭제하기의 기본 명령어로 구성되어 있다.

파티션을 변화시키는 작업 후에 <W>를 눌러 저장해야 한다. 단 저장할 경우 기존 정보를 절대 되돌릴 수 없으므로 신중을 기해야 한다.
저장하지 않고 그냥 종료하려면 <Q>를 누르면 된다.

 

5. 파티션을 생성한다. 예는 프라이머리 3개, 로지컬 2개. 총 5개의 파티션을 만들 것이다. ( 용량은 각기 300 200 200 100 200 )

 

6. 파티션 작업은 순차적으로 한다.

- <P>입력하여, 빈 하드디스크임을 확인한다. ( 다른 주 하드디스크를 착각하여 건드리지 않도록 한다 )


Command action
   e   extended
   p   primary partition (1-4)

- 첫 파티션은 Primary 이므로, p 를 선택

 


Partition number (1-4): 1

- 프라이머리로 시작했으므로, os 는 파티션의 넘버를 1-4 사이로 물어볼 것이다. 첫 파티션 분할이므로 1을 선택하자.


First cylinder (1-130, default 1): 1

- 하드디스크의 용량을 결정하는 실린더의 위치를 결정한다. 커스텀으로 따로 세팅할 필요는 없고 순차적으로 디폴터 1.
 

Last cylinder, +cylinders or +size{K,M,G} (1-130, default 130):

- 파티션의 마지막 실린더 위치를 결정한다. 첫 실린더가 1이므로 130을 지정할 경우 하드디스크 용량 전체를 해당 파티션에 지정하는 것이 된다.
하지만 우리는 파티션 용량을 정확하게 300메가를 사용할 것이므로 size{K,M,G} 의 M... +300M 이라고 입력해준다. ( +와 대문자를 지켜야 한다. )

- 정상이라면 커맨드모드로 돌아온다. P 를 눌러서 생성된 파티션을 반드시 확인해 본다.

Command (m for help): p

Disk /dev/sdb: 1073 MB, 1073741824 bytes
255 heads, 63 sectors/track, 130 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x3198bd27

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1          39      313236   83  Linux

 


같은 방법으로 200, 100의 프라이머리 파티션을 마찬가지로 생성한다.

-

Command (m for help): N
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 2
First cylinder (40-130, default 40):
Using default value 40
Last cylinder, +cylinders or +size{K,M,G} (40-130, default 130): +200M

Command (m for help): P

Disk /dev/sdb: 1073 MB, 1073741824 bytes
255 heads, 63 sectors/track, 130 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x3198bd27

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1          39      313236   83  Linux
/dev/sdb2              40          65      208844+  83  Linux

-


Command (m for help): p

Disk /dev/sdb: 1073 MB, 1073741824 bytes
255 heads, 63 sectors/track, 130 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x3198bd27

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1          39      313236   83  Linux
/dev/sdb2              40          65      208845   83  Linux
/dev/sdb3              66          91      208845   83  Linux


-

 

6. 이제 Logical 파티션을 2개 만들어야 하는데, 위에서도 설명했듯이 로지컬은 반드시 Extend 라는 껍질 파티션이 있어야 한다.
Extend 확장 파티션의 크기는, 앞으로 만들 모든 로지컬 파티션의 총 합 용량이다. ( 하드디스크의 크기나, 만들어질 로지컬 파티션의 총합을 초과할 수 없다. )

 

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
e
Selected partition 4
First cylinder (92-130, default 92):
Using default value 92
Last cylinder, +cylinders or +size{K,M,G} (92-130, default 130): 130

Command (m for help): p

Disk /dev/sdb: 1073 MB, 1073741824 bytes
255 heads, 63 sectors/track, 130 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x3198bd27

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1          39      313236   83  Linux
/dev/sdb2              40          65      208845   83  Linux
/dev/sdb3              66          91      208845   83  Linux
/dev/sdb4              92         130      313267+   5  Extended

 


7. N 로 새 파티션 만들기를 선택한 후 이제 로지컬 파티션을 위와 같이 만든다. ( 선택의 여지가 없으므로 타입 로지컬을 묻는 메세지가 출력되지 않을 것이다 )


※ 마지막 파티션의 실린더 지정은 보통 하지 않고, 남은 용량 전체를 사용하므로, 엔터(디폴트)로 남은 용량 전체를 잡아준다. ( 임의로 지정했다가 용량이 초과할 경우 Value out of range 에러가 뜰 것이다 )
파티션 정보로 인해 가령, 300M 으로 지정했더라도 실제로는 그 이상을 초과 사용해서, 생성하게 되므로, 마지막 파티션에서 용량을 따로 지정할 경우 에러 메세지가 출력될 수 있다.

Command (m for help): n
First cylinder (92-130, default 92):
Using default value 92
Last cylinder, +cylinders or +size{K,M,G} (92-130, default 130): +100M

Command (m for help): n
First cylinder (106-130, default 106):
Using default value 106
Last cylinder, +cylinders or +size{K,M,G} (106-130, default 130):
Using default value 130

 

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1          39      313236   83  Linux
/dev/sdb2              40          65      208845   83  Linux
/dev/sdb3              66          91      208845   83  Linux
/dev/sdb4              92         130      313267+   5  Extended
/dev/sdb5              92         105      112423+  83  Linux
/dev/sdb6             106         130      200781   83  Linux

Logical 파티션은 무조건 5번부터 시작됨을 알 수 있다. ( 해당 경우는 순차적이라 맞아떨어졌을 뿐, 프라이머리가 1번 하나만 있었어도 1,2(extend),5,6 이렇게 출력된다. )

 

 

8. 파티션 정보를 여러 번 변경했을 경우, W를 눌러 작업을 저장하고 빠져나올 때 Syncing DISK 메세지가 뜨지 않고, 재부팅을 요구할 수도 있다. 그럴 경우에는 서버를 재부팅해주어야 반영된다.

(정상 저장 메세지)

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

 

 


9. 파티션을 분할했다면, 마찬가지로 파일을 자유롭게 오고갈 수 있도록, 파일 시스템 포맷을 해 주어야 한다.
포맷 명령어는 mkfs ( Make File System ) 명령어이다

mkfs.ext4 [포맷할 파티션 장치명]
mkfs -t ext4 [포맷할 파티션 장치명]

둘 중 편한 것을 사용하도록 한다. 리눅스 데이터 하드디스크의 기본적 파일패치도 형식은 ext4 이다.

# mkfs.ext4 /dev/sdb1
.
.
.
.

Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done


해당의 Done 메세지가 3개 떠야 정상적으로 포맷이 된 것이다. 포맷 후 재부팅을 요구하는 메세지가 나올 경우에는 재부팅을 해야 포맷이 반영된다.

extend 파티션은 실제 사용하는 영역이 아니므로 포맷되지 않는다.


이제 물리 보조 하드디스크를 장착후, 파티션을 나누었고, 포맷까지 완료하여 사용준비가 되었다. 하지만 우리는 이것을 어떻게 실제로 사용 가능하게 불러올 것인지 배우지 않았다.
그것이 바로 mount 라는 개념이 된다.

 

 

 


[ Mount ]

 

윈도우즈의 장치 장착 후 자동으로 알아서 검색해주고, 관련 소프트를 설치해주는 PnP ( Plug and Play ) 기능이, 리눅스 서버에서는 어렵다. 그래서 물리적 하드 디스크를 장착했다면
해당 디스크를 사용하기 위해서는 os 와의 사이에서 해당 형식을 알려주는 중간 "드라이버" 역할을 하는 무언가 있어야 한다. 그것이 바로 Mount 이다.
리눅스의 마운트 형식은 / 디렉토리 형식으로, 임의의 디렉토리를 마운트 지점으로 삼아(= 마운트 포인트) 그 위에 장치를 덮어씌워 해당 마운트 포인트를 그 장치로 삼는 방법이다.

 

 

[ 마운트 기본 상태 확인 명령어 ]

#mount

- 마운트되어 있는 현재 장치들의 기본적인 타입과, 속성을 보여준다.

#df -h

- 마운트되어 있는 장치와 포인트를 좀 더 보기 간결하게 보여준다. ( 가장 자주 쓴다 )

# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda7             7.7G  328M  7.0G   5% /
tmpfs                1012M  100K 1012M   1% /dev/shm
/dev/sda1             194M   30M  155M  17% /boot
/dev/sda6             194M  5.6M  179M   4% /home
/dev/sda2             5.8G  2.7G  2.9G  48% /usr
/dev/sda5             2.0G  190M  1.7G  11% /var
/dev/sr0              3.5G  3.5G     0 100% /media/CentOS_6.3_Final


/dev/sr0 장치는 cdrom 을 지칭하는 장치이다.
여러 파티션들이 Mounted on(마운트 포인트) 의 디렉토리를 자신의 숙주로 삼아, 해당 위치에 자리함을 볼 수 있다.
따라서 전체의 한 덩어리 하드디스크처럼 보여도, 실제로는 어떤 부분이 문제가 생겨도 해당 파티션 부분만 처리할 수 있는 장점이 있다.

이곳에 앞에서 만든 /dev/sdb1 ( 300M ) 을 사용할 수 있도록 마운트해야 한다.

 

 

10. mount [장치명] [마운트 포인트]

 

 

- 임의의 마운트 포인트 지점을 만든다. ex) mkdir /sdb1/
- 장치를 마운트한다. 

[root@localhost ~]# mkdir /sdb1
[root@localhost ~]# mount /dev/sdb1 /sdb1
[root@localhost ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda7             7.7G  328M  7.0G   5% /
tmpfs                1012M  100K 1012M   1% /dev/shm
/dev/sda1             194M   30M  155M  17% /boot
/dev/sda6             194M  5.6M  179M   4% /home
/dev/sda2             5.8G  2.7G  2.9G  48% /usr
/dev/sda5             2.0G  190M  1.7G  11% /var
/dev/sr0              3.5G  3.5G     0 100% /media/CentOS_6.3_Final
/dev/sdb1             297M   11M  271M   4% /sdb1

/sdb1 이라는 디렉토리에 /dev/sdb1 의 파티션이 마운트되었음을 확인할 수 있다.
해당 /sdb1 디렉토리는 마운트 된 시점부터 /sdb1 의 디렉토리 영역이 아니며, /dev/sdb1 의 보조 하드 디스크의 파티션 영역이 된다. ( 마운트를 해지하면, 기존 디렉토리 정보가 돌아온다 )

 

 

11. umount [장치명]

 

 

- 마운트를 해지할 수 있다.

[root@localhost ~]# umount /dev/sdb1
[root@localhost ~]# df -h

Filesystem            Size  Used Avail Use% Mounted on
/dev/sda7             7.7G  328M  7.0G   5% /
tmpfs                1012M  100K 1012M   1% /dev/shm
/dev/sda1             194M   30M  155M  17% /boot
/dev/sda6             194M  5.6M  179M   4% /home
/dev/sda2             5.8G  2.7G  2.9G  48% /usr
/dev/sda5             2.0G  190M  1.7G  11% /var
/dev/sr0              3.5G  3.5G     0 100% /media/CentOS_6.3_Final

- 해지하기 전에 반드시 해당 마운트 포인트 지점에서 위치를 벗어나야 한다. ( ex : cd / ) 그렇지 않다면 해지되지 않는다.

ex)
# pwd
/sdb1
[root@localhost sdb1]# umount /dev/sdb1
umount: /sdb1: device is busy.
        (In some cases useful info about processes that use
         the device is found by lsof(8) or fuser(1))

 

이하의 방법으로 보조 하드디스크의 영역을 디렉토리화(마운트 포인트) 시켜 사용할 수 있게 된다.

※ 마운트 포인트는 파티션당 원칙적으로 반드시 1:1이어야 한다. ro(read only)의 파티션(예 : cdrom ) 일 경우에는 여러개여도
상관이 없지만, 물리 하드디스크 파티션의 마운트 포인트가 여러개일 경우, 다중 사용자들의 동시쓰기 및 권한 혼선을 유발할 수 있다.
서버에 여러 사용자들을 생성하는 것은, 해당 유저 데이터 장치(파티션)에 쓰기 권한을 일방적으로 주는 것이 아닌, 허용된 그 자신만의 일부 공간만을 허락하는 것이다.

 

 


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

[ 오토마운트 ]

 

어떤 회사 서버에 보조하드를 장착했는데, 오토마운트를 지정하지 않으면, 재부팅시 마운트가 자동으로 빠지는 경우가 생긴다. 그런 것을 방지하기 위해 재부팅해도, 항상 기본으로 마운트 된
상태를 유지하는 것을 오토마운트라 한다.

오토마운트는 /etc/fstab 파일을 수정해야 한다.
오토마운트로 지정한 장치가 없어지거나, 틀릴 경우, 부팅 자체가 안되는 치명적 현상이 발생한다. 이 때에는 시스템 응급복구 모드를 사용해야 하므로, 각별히 유의한다.

 


#vi /etc/fstab


#
# /etc/fstab
# Created by anaconda on Wed Jan 16 07:22:40 2013
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=c1c9282a-b1ab-4a52-af92-01119082d042 /                       ext4    defaults        1 1
UUID=8d5f4027-7137-4b5d-9455-d2394e64b63d /boot                   ext4    defaults        1 2
UUID=bc01ae3b-2707-4ecf-bef5-e7c907db0ef1 /home                   ext4    defaults        1 2
UUID=3172ab7d-f9e7-4cca-a5b6-905143ebd319 /usr                    ext4    defaults        1 2
UUID=e1152695-c64a-4138-a53e-7e81ab2301e8 /var                    ext4    defaults        1 2
UUID=bcf03cfc-baa4-42cd-9e55-2bb4f4d6e1b2 swap                    swap    defaults        0 0
/dev/sdb1                  /sdb1     ext4    defaults        1 2


= 이 부분... 오토마운트될 정보를 기입해 준다. 실수할시 부팅 자체가 안 되므로 주의!
반드시 존재하는 마운트여야 한다. ( 수동으로 마운트할수 있는 정상 파티션 )

UUID 를 제대로 입력해 주고 싶은 깐돌이가 있다면, 영문 설명대로 /dev/disk 의 안쪽 리스트를

출력해 보도록 한다. 자신의 마운트마다 UUID 가 기입되어 있다.

 

 


재부팅 후 df -h 로 오토마운트 되었는지 확인.
(되지 않았다면 마운트 포인트라던지, 오타 등 원인분석을 하여야 한다)


(정상)
[root@localhost ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda7             7.7G  328M  7.0G   5% /
tmpfs                1012M  100K 1012M   1% /dev/shm
/dev/sda1             194M   30M  155M  17% /boot
/dev/sda6             194M  5.6M  179M   4% /home
/dev/sda2             5.8G  2.7G  2.9G  48% /usr
/dev/sda5             2.0G  190M  1.7G  11% /var
/dev/sdb1             297M   11M  271M   4% /sdb1
/dev/sr0              3.5G  3.5G     0 100% /media/CentOS_6.3_Final


= /sdb1 이 자동 마운트되어 있음을 확인할 수 있다.

※ 응급복구 모드시 가끔 마운트 정보를 수정하려 할 때 fstab 파일이 읽기전용이라면서 저장이 되지 않는 경우가 있다.
이럴 때에는, 응급복구 모드의 shell 에서 임시로 / 에 마운트시킨 /mnt/sysimage 를 u마운트하였다가, 재 마운트 하여야 한다.

(chroot 재실행)

※ 오토마운트되어 있는 장치가 물리적으로 해제될 시에는, 반드시 그 전에 정보를 미리 fstab 에서 삭제하여야 한다.
정보가 남아있는 상태에서, 물리 해제후, 재부팅시에는 정상 부팅이 되지 않는다.

 

 

 


※ MBR

Master Boot Record 의 약자.

물리적 하드 디스크가 여러 파티션으로 분할되어 있을 때, 각각의 파티션에 들어있는 파일 위치 정보는, 섹터의 어떤 특정한 부분에 그 큰 인덱스 정보가 기록되어 있고(부트 섹터), 하드디스크의 헤드는, 신호를 받으면 해당 파티션의 부트 섹터로 가서 경로정보를 찾는다. 하위 파티션들의 부트 섹터 정보들은 다시금 어느 메인이 되는 파티션으로 집약되게 되고, 해당 파티션의 부트 섹터를 MBR 이라 한다.


 

 

블로그 이미지

늙은M군

개인 저장공간입니다. 해당 일부 과정들을 공인 인터넷 환경에서 악성적으로 응용할 시 피해가 발생할 수 있으며, 그에 대해 책임은 사용자에게 있습니다!! 주의해주세요.

,

[ Basic ] Package 와 Tar

ETC 2013. 4. 22. 14:14

[ 패키지 ]

 리눅스에는 RPM 과 YUM 이라는 두 가지 방식의 패키지 인스톨러가 존재하는데,

일반적으로 서버 관리자는 자신에게 맞는 패키지만 설치하는 RPM 수동설치가 좋으리라 생각한다.

기초나 , 실습시간에는 대부분 편의적인 YUM을 쓰게 될 것이다.

 


[ RPM ] - Redhat Package Maneger

 

Vim-enhanced-7.0.109-3.i386.rpm 이라는 패키지가 존재한다

 

Vim-enhanced-   :  - - 까지가 패키지명이다. - - 마저 없는 것은 완벽한 대표패키지이다.

 

7 : Major 버젼의 상태. 프로그램이 완전히 한 차원 혁신 또는 뒤집어진다면 이 버젼이 보통 올라간다.
0 : Minor 버젼의 상태. 기능의 추가 정도가 있을 때 , 이 버젼이 보통 올라간다.
109 : patch 버젼의 상태. 보통 버그를 수정했을 때 패키지의 이 버젼이 올라간다.
3 : release 버젼의 상태. 배포하는 곳에서 이 패키지가 몇 번째로 재 배포했는지를 나타낸다.
i386 : 실행환경의 아키텍쳐를 나타낸다. i386 이라 함은 구형 - 최신형까지 전부 호환됨을 나타낸다.
(intel 호환 386 cpu 급 이상을 의미)

 

rpm 패키지 설치에서 여러 옵션이 존재하지만, 주로 실무에서 알아야 할 것은 다음의 옵션이다.

 

1. 패키지 설치 : rpm -ivh [ 패키지의 전체 풀 네임.rpm ]
2. 패키지 삭제 : rpm -e [ 패키지 명 ]
3. 패키지 확인 : rpm -qa | grep [ 패키지 명 ]

 

i : install
h : 설치진행상황을 해쉬 (hash) 마크 ### 로 보여준다
v : 진행상황을 자세히 보여준다. ( verbose )

 


[ 패키지의 의존성 Dependedncies 주의사항 ]

1. 패키지 설치 시 의존성 오류 Failed dependencies 를 절대 무시하면 안된다.
2. 의존성 오류를 제기한 해당 패키지부터 해결한 후 재시도한다.
3. lib ~ so.5 등으로 시작하는 의존성 오류일 경우, 특수한 상황을 제외하고는 무시해도 좋다.
4. 위의 경우 --nodeps 로 강제 설치할 수 있지만, 해결할 수 없는 방법이 전혀 없을 때를 제외하고는 쓰지 않는다.
5. 모든 작업은 보통 대표 패키지명 ( - -가 없는 ) 부터 설치한 후, 리스트를 순차적으로 작업한다.

 

 


[YUM] - Yellowdog Updater Modified

 

 레드핫에서는 처음에 지원하지 않다가 페도라 코어 프로젝트로 건너오면서, 포함되게 되었다.
알아서 해당 패키지명만 입력해도, 인터넷에서 자동검색하여, 자동다운로드 - 자동설치 - 자동 의존성 검사 - 자동업데이트까지 해주는 매우 발전적인 패키지 관리자이다.
과거의 수동방식이던 RPM 에 비하여 초심자들에게 엄청나게 편리한 관리자라고 할 수 있으나, 사용자가 원하지 않는 관련 패키지까지 모두 업데이트하므로, 필요한 커스텀만 사용할 서버관리자에게 있어서는 부적절한 패키지 관리자라 할 수 있다.

 

가령, 시스템이 외부와 공인 통신이 불가능한 상태의 위기에 처했을 때,  YUM 만 알고 해당 관련 RPM 의 설치 경험이 없다면, 그건 이미 실격인 것이다. 평소에 FTP 에 업로드되는 관련 패키지들을 따로 CD나 USB로 모아 두었다가, 중요 패키지의 수동 설치법을 RPM 으로 익혀 두는 것은 서버 관리자의 기본 의무라고 할 수 있겠다.


기본 리스트 보기 - #yum list
업데이트 #yum update
새 패키지 설치 #yum install [패키지 네임] ( 해당 관련 모든것들이 한번에 다운로드-설치된다 )
패키지 삭제 #yum remove [ 패키지 네임 ]

-y 옵션 : 진행시 y/n 를 묻지 않는다.

 


[TAR]

리눅스에서 자주 사용되는 파일 묶음 아키텍쳐 ( 압축도 가능하다 )


[ 압축하기 ]

gzip , bzip 두 종류가 존재한다.

압축하기 : gzip [ 압축할 파일 경로 ]

압축 풀기 : gzip -d [ 압축된 파일 경로 ]

gzip 은 그냥 해당 파일을 바로 압축해버리면서 .gz 로 묶인다.

bzip은 gzip 에 비해 압축 효율이 조금 더 개선된 버젼으로 다른 사항은 동일하다.

 
[ 파일 묶기 ]

tar 를 사용한다.
tar 는 여타 일반 커맨드와는 달리 [대상경로][목적지] 의 형식이 아닌 [목적지][대상경로] 임을 유의.
즉 tar 는 [작업후 묶인 파일명][묶을 파일 경로] 로 입력하여야 한다.

즉, 여러 파일을 tar 로 묶고 압축하고 싶을 경우에는, 먼저 "묶고" , 그 다음에 압축해야 한다.
이를 한 번에 실행하는 옵션을 외우도록 한다.

 


[ TAR + GZIP 을 동시에 ]

 

 

1. tar 파일로 /backup/ 의 모든 파일들을 묶는다
#tar cvf test.tar /backup/

 

2. tar 파일로 묶으면서 동시에 gzip 압축을 행한다
#tar cvfz test.tar.gz /backup/

 

c 옵션 : create. 새 묶음(tar)를 만든다.
v 옵션 : visual. 진행과정을 보여준다.
f 옵션 : file. 묶을 파일명을 개별 입력할 수 있다.
z 옵션 : +gzip ( j 를 쓴다면 bzip 형식으로 압축을 행한다 )

 


3. test.tar.gz 파일을 압축해제하고 묶음을 동시에 푼다.
#tar xvzf test.tar.gz 

x 옵션 : 묶은 파일을 풀어준다.

블로그 이미지

늙은M군

개인 저장공간입니다. 해당 일부 과정들을 공인 인터넷 환경에서 악성적으로 응용할 시 피해가 발생할 수 있으며, 그에 대해 책임은 사용자에게 있습니다!! 주의해주세요.

,

WMware 가상머신으로 Linux 를 운용하다보면

가끔은, 설정과는 다르게 MAC 주소와의 매칭 문제로 인해 내부에서 자기 멋대로 eth0 , wlan0 , at0 등의 인터페이스 번호가 1,2,3 등으로 바뀌어 버리는 경우가 있습니다.

 

 

 

네트워크 환경설정 파일을 수정하거나, 재검색을 해도 꼬이는 경우가 많아서 생각보다 찜찜하지요.

 

그럴 경우에는 아래의 파일을 직접 MAC 주소 등을 매칭시켜 재수정해 주시던지

아니면 깔끔하게 지워버리고 재부팅하시면 해결 됩니다.

 

rm -f /etc/udev/rules.d/70-persistent-net.rules 파일 삭제

 

 

데비안, 우분투, 레드햇(Cent) 에서 확인.

 

또는 바뀐 MAC 주소 등을 바로잡아 주시면 됩니다. ( 그냥 삭제해도 되요 ㅡㅡ; )

 

 

 

블로그 이미지

늙은M군

개인 저장공간입니다. 해당 일부 과정들을 공인 인터넷 환경에서 악성적으로 응용할 시 피해가 발생할 수 있으며, 그에 대해 책임은 사용자에게 있습니다!! 주의해주세요.

,