운영체제

리눅스 디렉터리 구조

2009. 4. 8. 03:41

리눅스 시스템은 다양한 명령들과 설정 파일, 라이브러리들을 보관하기 위해 일반적으로 다음과 같은 디렉터리 구조를 가지고 있다.

/ 루트 디렉토리
/bin 기본적인 사용자 명령어들이 위치한 디렉터리.
/boot 시스템 부팅시 필요한 파일들이 위치한 디렉터리.
/dev 장치 파일들이 위치한 디렉터리.
/etc 시스템 설정 파일들이 위치한 디렉터리.
/home 사용자들의 홈디렉터리. 사용자 로그인을 하면 이 디렉터리의 사용자 이름과 동일한 디렉터리로 들어감.
/lib 각종 시스템 라이브러리가 있으며 커널 모듈이 위치한 디렉터리.
/lost+found 파일 시스템 복구를 위한 디렉터리.
/mnt 마운트될 파일 시스템의 마운트 포인터.
/proc 시스템 관리 목적으로 메모리 상에 존재하는 가상 렉터터리. 디렉터리내의 파일들은 현재 시스템 설정을 나타낸다.
/root 루트 사용자의 홈디렉터리.
/sbin 시스템 관리 명령어들이 위치한 디렉터리.
/tmp 임시파일들이 만들어지고 삭제되는 디렉터리.
/usr 시스템 운영에 필요한 명령어들과 라이브러리들이 위치. 배포판에서 제공되는 명령들이 위치.
/usr/bin 배포판에서 제공하는 사용자 명령어들이 위치.
/usr/etc  설정 파일.
/usr/include C언어 헤더 파일이 위치.
/usr/src 소스 상태로 제공되는 프로그램들. /usr/src/linux 리눅스 커널 소스가 들어 있다.
/usr/man man page 포함.
/var 가변적인 저장 공간. 메일서버 운영시 메일 메시지 보관 등 용도로 사용.

리눅스 소개

2009. 4. 7. 02:31

리눅스는 다중 작업, 다중 사용자 운영체제이고 다중 프로세스 시스템을 지원하는 고성능, 고가용성 운영체제이다. 그리고 이 모든 성능과 기능들은 무료로 제공된다. IEEE POSIX, System V, BSD와 소스 수준에서 많은 유닉스 표준과 거의 호환된다. 그밖에 윈도우 95/98, 윈도우 NT/2000/XP, Max OS, BSD 등과 같은 다양한 운영체제와 멀티 부팅을 통해 한 시스템에서 공존할 수 있다. 멀티 부팅의 경우 리눅스 부트로더 (LILO)와 그루브(GRUB; GRand Unified Bootloader)를 통해 부팅할 운영체제를 선택할 수 있고, 윈도우 2000/XP 등의 부트로더와도 호환된다.

인텔x86, 아이태니움, 스팍/울트라스팍, AMD 64, ARM, PA-RISC, Alpha, PowerPC, MIPS, m68k, IBM 390과 z시리즈 메인프레임 등 다양한 CPU 아키텍처에서 동작한다. 다수의 임베디드 프로세서에 포팅되었으며, 팜파일럿과 컴팩iPAQ와 같은 PDA에도 포팅되어 있다. 더욱이 클러스터를 활용한 수퍼컴퓨터의 영역에서도 사용된다.

다양한 파일시스템 유형을 지원하며, ext2fs와 같은 리눅스 전용 파일시스템외에 NTFS, VFAT, FAT16/32, 매킨토시, OS/2 등 수많은 운영체제의 파일시스템을 지원한다.

리눅스는 완전한 TCP/IP 네트워킹을 구현하고 있으며, 이더넷 카드, PPP, SLIP, PLIP, ADSL 등 장치 드라이버를 포함한다. IPv6 프로토콜 모음과 DHCP, AppleTalk, IrDA, DECnet, 패킷 라디오 통신 프로토콜인 AX.25 등 다양한 프로토콜을 지원한다.

FTP, Telnet, NNTP, SMTP, POP3, IMAP, NFS, Microsoft의 도메인에 참여할 수 있도록 해주는 마이크로소프트 프로토콜 등 완전한 TCP/IP 클라이언트와 서비스를 갖추고 있다.

리눅스는 커널 차원의 방화벽 지원이 있기 때문에 네트워크 패킷의 차단을 구현할 수 있다.

1. 커널 (Kernel)

리눅스 운영체제의 핵심 엔진부이다. 커널은 사용자 프로그램과 하드웨어 장치 간의 인터페이스, 멀티태스킹 구현을 위한 프로세서 스케줄링 등 다양한 시스템 제어를 위한 코드이다. 시스템 메모리를 최적으로 사용하기 위해 가상 메모리가 구현되어 있으며, 스왑 공간을 디스크에 할당할 수 있다.

2. 명령과 쉘(Shell)

쉘은 사용자가 입력한 명령을 실행하는 프로그램이다. 그밖에 작업 제어, 입출력 리다이렉트, 파이프 등을 지원하고 쉘 스크립트 프로그래밍을 위한 명령 언어를 제공한다. 현재 리눅스의 표준 쉘은 BASH (Bourn Again SHell)이며 '배쉬'라고 읽는다.

BASH외에 sh, csh, tcsh, ksh, zsh 등 다양한 유닉스 표준 쉘을 함께 제공하고 있다.

3. 텍스트 프로세싱과 워드 프로세싱

리눅스는 vi와 emacs라는 매우 훌륭한 편집기를 제공하여 다양한 용도로 강력한 텍스트 편집 기능을 제공하며, 오픈오피스를 통해 마이크로소프트 오피스와 거의 호환되는 오피스 프로그램 또한 제공하고 있다.

4. 개발 환경

GNU의 컴파일러인 gcc를 제공하여 C, C++, Object C, 포트란, 자바 등 대부분의 개발 환경을 제공하고 있다.

5. X-Window 시스템

1980년대 MIT에서 다양한 유닉스 시스템을 지원하는 윈도우 시스템인 X를 선보인 이래 리눅스의 윈도우 시스템으로 자리잡아 오고 있다. 현재 리눅스에서 사용가능한 X 버전은 X.org라 부르며 리눅스와 같은 PC 기반의 유닉스 시스템으로 자유롭게 배포 가능한 X11R6으로부터 개발한 것이다.

6. KDE와 GNOME

X 윈도우 시스템은 유연한 설계로 인해 다양한 데스크톱 환경을 가질 수 있으며 대표적인 데스크톰 환경으로 KDE와 GNOME('그놈'이라고 읽는다)을 제공하여 현대적인 윈도우 시스템을 제공하고 있다.

7. 배포판

리눅스 시스템은 커널을 개발하여 공개한 리누스와 수많은 오픈 소스 개발자들의 다양한 개발 커뮤니티들에 의해 만들어진 유틸리티 들의 조립품이며 이 모든 것들을 모아서 하나의 사용가능한 시스템으로 만들어 놓은 것이 배포판이다. 배포판 역시 개인으로부터 기업에 이르는 다양한 배포판 개발팀에 의해 만들어지며 수많은 배포판이 존재한다.

대표적이 배포판으로는 Redhat Enterprise, Fedora, Debian, Ubunto, GenOS, gentoo, SLACKWARE 등이 있다.

Active Directory (AD) 소개

1. AD의 역할, 기능, 역사

액티브 디렉터리(AD; Active Directory)는 업계 표준인 X.500과 LDAP(Lightweight Directory Access Protocol)를 이용하여 디렉터리안의 모든 객체를 손쉽게 검색하고 중앙집중적으로 관리할 수 있게 한다.

▷ 객체(Object) 사용자, 그룹, 컴퓨터, 서버, 도메인, 사이트 등을 의미하며 이러한 객체들을 AD내에서 검색하기 위해 객체의 이름에 기반한다.

▷ 스키마(Schema) 모든 객체 유형과 그 속성들의 정의. 객체 클래스와 속성의 2가지 형태 정의가 저장된다. 스키마는 사용자의 어플리케이션으로 검색될 수 있으며 사용자 정의 객체 클래스와 속성을 사용하도록 허락되도록 변경될 수 있다. 권한 없이 변경되는 것을 막기위해 임의 접근 제어 리스트(DACL; Discretionary Access Control List)를 사용하여 각 객체의 보안을 유지한다. 이러한 DACL은 오직 권한이 있는 사용자만이 스키마에 접근할 수 있다.

▷ 디렉터리 서비스 프로토콜 액티브 디렉터리는 산업 표준인 LDAP를 이용하여 디렉터리 내에서 데이터와 같은 필요한 서비스를 요청하고 데이터를 업데이트 하기 위해 사용한다.

2. AD의 구성

1) 논리적 구성

▷ 도메인 (Domain) 다른 네트워크를 구별짓는 보안 경계(Security boundary)로, 각 도메인은 네트워크를 관리할 관리자 계정들을 가지고 있고, 그 관리자 계정들은 도메인 전역 또는 정해진 도메인 관리를 위한 전체(full control) 권한을 할당 받을 수 있다. 도메인은 자신의 사용자들과 그룹들을 가지고 있으며 이러한 사용자들은 필요시 다른 도메인에서 권한을 부여 받을 수 있다. 도메인은 복제 목적으로도 사용된다. 도메인 안에 있는 도메인 컨트롤러(DC; Domain Controller)는 서로 복제하여 도메인 정보를 공유한다.

▷ 조직 단위 (Organization Unit) 디렉토리 내에서 객체를 구성하기 위해 사용되는 컨테이너 객체(Container Object)이다. OU들은 보통 사용자 객체와 그룹 객체를 포함하고 그밖에 컴퓨터와 다른 OU들을 포함할 수 있다. 권한의 지정은 OU 단계에서 할당되며 특정 사용자들에게 관리자적 권한을 부여하기 위해 할당된다.

▷ 트리 (Tree) 도메인은 트리 구조로 병합되며 첫번째 설치된 도메인을 루트 도메인(Root domain)이라고 한다. 트리내의 모든 도메인은 공통 스키마와 공통 글로벌 카달로그를 공유한다. 트리에서 계층 구조를 구성하는 도메인들은 인터넷 Domain 이름과 같이 사용된다. 예를 들어 "myad.local"이라고 루트 도메인을 만들고 하위에 두번째로 만들어진 "myou"라는 도메인의 전체 이름은 "myou.myad.local"이 된다.

▷ 포리스트 (Forest) 트리의 집합이며 포리스트안의 트리들은 인접 이름 공간(contiguous namespace)를 공유할 필요가 없다. 즉 트리와 같이 계층 구조의 이름을 가질 필요가 없으며 각자 루트 도메인을 유지한채 공통적인 스키마와 글로벌 카달로그를 공유한다. 이때 두 트리는 양방향 트러스트(trust) 관계를 통해 서로 합쳐진다.

▷ 글로벌 카달로그 (GC; Global Catalog) 포리스트 안에 있는 공통적으로 많이 검색되어지는 속성으로 정의된 것들의 부분을 가지고 있다. 글로벌 카달로그는 사용자가 접근 권한을 이용해 포리스트내 자원의 접근을 제어하여 원격지 도메인에 있는 도메인 컨트롤러에 접근하지 못하도록 하여 네트워크 트래픽을 감소시킬 수 있다. 그리고 윈도우 2003 네트워크가 가려지는 논리적인 구조를 만들 수 있도록 한다.

2) 물리적 구성

▷ 도메인 컨트롤러 (DC; Domain Controller) 액티브 디렉토리(AD; Active Directory) 데이터베이스의 복사본을 저장하는 윈도우 2003 네트워크 상에 있는 서버. DC는 데이터에 변화가 있을시 도메인 내의 다른 도메인에게 변경 사항을 복제해주어야 한다. 소규모 네트워크에서는 2개의 DC만 있으면 되고 결함허용 목적으로는 2대이상이 권장된다. 그리고 DC는 사용자가 네트워크에 로그인할 때 인증을 담당한다. 인증을 통해 그룹 멤버쉽(group membership)과 각 사용자에 대한 권한을 가지고 있는 보안 토큰(security token)을 할당한다.

▷ 사이트 (Site) 빠른 속도(보통 10Mbps 이상)의 링크로 연결된 하나 또는 그 이상의 IP 서브넷의 그룹으로 정의 한다. 사이트는 AD 복제 트래픽과 사용자 인증을 최적화하기 위해 네트워크 상에서 사용된다.

3. AD를 이용한 Windows 2003 Server의 관리

▷ 중앙 집중적인 관리 (Centralized management) AD는 중앙집중적으로 데이터를 저장하여 관리자로 하여금 객체 관리를 쉽게 한다. AD는 OU를 통해 객체를 그룹화하고 다중 단계(multiple level)와 상속(inheritance)을 가능하게 한다. 그룹 정책을 통해 특정 도메인 계층에 적용할 수 있으며 하위에 있는 개체들은 그 설정 내용을 상속받아 영향력이 미치게 된다.

▷ 그룹 정책 (Group Policy) 정책의 생성과 어플리케이션을 통해 사용자 환경을 중앙집중적으로 관리하게 한다. 그룹 정책은 AD내에 있는 사이트들과 도메인, 그리고 OU를 포함하는 컨테이너로 동작된다. 그룹 정책은 사용자의 로그온을 통해 적용되며 사용자가 어떤 컴퓨터에 로그인하더라도 네트워크 주변의 사용자를 따라다닌다. 결과적으로 사용자는 항상 같은 환경에서 익숙하게 작업할 수 있게 된다.

▷ 제어 위임 (Delegation of Control) 네트워크 관리자가 업무 분담을 위해 그룹의 멤버 사용자들에게 OU 단계에서 권한을 할당하여 스스로 관리할 수 있도록 한다.

참고 : http://technet.microsoft.com/ko-kr/library/cc753285.aspx

 

1. 사용자 계정을 생성한다.

① 'hosting' 그룹을 만든다.

② 'jeongsam', 'jeong' 등 사용자 계정을 생성한다.

[그림1] 새 사용자 만들기

사용자격리FTP01.png 

'암호 변경할 수 없음'과 '암호 사용 기간 제한 없음'을 지정한다.

 

[그림2] 사용자를 만든다.

사용자격리FTP02.png 

 

2. 전체 사용자 폴더를 저장할 사용자 홈 디렉토리를 만들고 적절히 권한을 설정한다.

[그림3] 폴더 구조 및 권한 설정

사용자격리FTP03.png 

사용자 홈 디렉토리에 예약된 이름인 'LocalUser'(대소문자 구분 없음)를 만들고 하위에 개별 사용자 이름과 동일하게 폴더를 만든다. 개별 사용자만 접속할 수 있도록 권한을 설정한다.

 

3. 인터넷 정보 서비스 관리도구에서 FTP 사이트를 만든다.

[그림4] 사용자 격리 지정

사용자격리FTP04.png 

 

[그림5] 사용자 홈 디렉터리 지정

사용자격리FTP05.png 

 

[그림6] FTP 사이트 액세스 권한 지정

사용자격리FTP06.png 

파일 시스템 권한을 적절하게 지정하고 FTP 권한은 모든 권한을 지정한다. 결론적으로 파일 시스템 권한이 유효하다.

 

[그림7] FTP 사이트 완성된 모습

사용자격리FTP07.png 

 

[그림8] 사용자 계정으로 FTP 사이트에 접속한 결과

사용자격리FTP08.png 

사용자 격리 기능에 의해 현재 사용자의 홈 디렉터리가 '/'로 표시되고 더이상 상위 디렉터리로의 접근이 불가능해진다.

 

이 글은 스프링노트에서 작성되었습니다.

(3) IIS 서비스 설정하기

2009. 3. 28. 13:29

HTTP Status code (상태 코드)

HTTP 상태 코드는 웹 서버가 웹 브라우저의 요청을 수신하여 처리한 결과를 나타내는 3자리로 구성된 코드이다. 다음과 같이 5종류의 상태코드로 분류하고 있다.

[표 1] HTTP 상태 코드 분류

 상태 코드 의미 설명
1xx 정보 제공 메시지 (Informational) 클라이언트의 요청이 접수되어 처리되고 있음을 알려준다.
2xx 성공 (Success) 요청의 처리가 성공하였음을 알려준다.
3xx 리다이렉션 (Redirection) 사용자 요구를 처리하기 위해 추가적인 처리가 필요하다.
4xx 클라이언트 에러 (Client error) 클라언트의 요청이 불완전하여 잘못되었거나, 구문 오류, 기타 클라이언트의 오류가 발생하여 요청 수행을 실패하였다.
5xx 서버 에러 (Server error) 서버 에러가 발생하여 요청을 처리할 수 없다.

 

[표 2] HTTP/1.1 상태 코드

상태 코드 의미 설명
100 Continue 클라이언트는 요청의 전송을 계속 진행한다.
101 Switching Protocols 서버는 Upgrade 헤더 필드에 명시된 프로토콜로 교환하기 위한 클라이언트 요청에 따르고 있다.
200 Ok

클라이언트의 요청이 성공적이었으며, 서버는 요청한 데이터를 포함하여 응답한다.
응답시 리턴되는 정보는 메소드에 따라 다르다.
GET 요구한 자원에 상응하는 엔터티는 응답에 포함되어 발송된다.

HEAD 요구한 자원에 상응하는 Entity-Header 필드는 Message-Body 없이 응답에 포함되어 발송된다.
POST 처리 결과를 설명 또는 포함하는 엔터티.
TRACE 수신 서버가 수신한 요구 메시지를 포함하고 있는 엔터티.

201 Created

클라이언트의 요청이 성공적이었으며, 자원을 서버내에 만들었다. PUT 메소드에 대한 전형적인 응답이다.

202 Accepted 클라이언트가 요청을 받아들이기만 했을 뿐 아직 완료되지 않은 상태이다.
203 Non-Authoritative Infomation 요청이 성공했지만 서버가 리턴한 정보의 일부가 자원과 관계 있는 원래 서버가 아닌 제3자로부터 왔다.
204 No Content 응답할때 주어지는 헤더이나 응답된 실제 내용이 없다.
205 Reset Content 새로운 문서가 없더라도 브라우저에서 창을 초기화하고, 문서를 새로 표시한다도록 클라이언트에게 응답한다.
206 Partial Content 서버가 부부적인 GET 요청을 성공적으로 수행했음을 응답한다.
300 Multiple Choices 요청된 문서가 여러 곳에 있을 때 어떤 문서를 원하는지를 클라이언트가 선택할 수 있도록 한다.
301 Moved Permanently 요청한 자원이 새로운 URI로 영구히 이동했다.
302 Found 요청한 자원이 일시적으로 다른 URI를 사용하고 있다.
303 See Other 요청에 대한 응답을 서버가 지정한 다른 URL을 통해 가져올 수 있다.
304 Not Modified 웹 브라우저의 캐시에 들어있는 문서가 최신 문서이니 그것을 그대로 사용하라는것을 나타낸다.
305 Use Proxy 요청된 자원은 프록시를 통해서만 사용해야 한다.
306 (unused) 사용하지 않음.
307 Temporary Redirect 요청한 URI가 일시적으로 옮겨졌다.
400 Bad Request 클라이언트의 요청에 오류가 있을 경우 사용하는 일반적인 응답이다.
401 Unauthorized 클라이언트가 자원에 접근하는 권한을 얻지 못했다. 인증을 통과하지 못했을 경우 사용하는 응답이다.
402 Payment Required 구현 안됨.
403 Forbidden 서버가 요청을 거부하였다. 인증과 관련 없는 일반적인 '거부'로써 특정 클라이언트의 접근 제한을 걸면 클라이언트의 모든 요청은 403 응답을 얻게 된다. 일반적으로 기본 문서가 없을 경우 볼 수 있는 응답이다.
404 Not Found 서버의 자원을 찾을 수 없다.
405 Method Not Allowed 클라이언트가 사용한 메소드가 이 URI에 대해 지원되지 않는다.
406 Not Acceptable 클라이언트가 지정한 URI는 존재하지만 클라이언트가 원하는 형식이 아님을 의미한다.
407 Proxy Authentication Required 401과 유사하지만 클라이언트는 프록시의 인증이 선행된다.
408 Request Timeout 클라이언트의 모든 요청이 서버에 의해 지정한 시간 동안 처리되지 않았음을 의미한다.
409 Conflict 다른 요청이나 서버의 구성과 충돌이 발생하였다.
410 Gone 요청된 문서가 사라지고, 새로운 주소는 알 수 없음을 나타낸다.
411 Length Required 요청에 Content-Length 헤더를 추가해야 함을 클라이언트에게 통지한다.
412 Precondition Failed 하나 또는 그 이상의 Request-Header에 명시된 조건에 의해 요청을 평가하여 조건을 만족하지 못했음을 표시한다.
413 Request Entiy Too Large 클라이언트의 요청이 너무 커서 서버가 요청을 거부했다.
414 Request-URI Too Long 클라이언트가 요청한 URI의 길이가 처리할 수 있는 길이보다 길어서 요청 수행을 거부하였다.
415 Unsupported Media Type 서버가 지원하지 않는 미디어 형태를 사용하는 실체를 포함하고 있어서 요청을 처리할 수 없다.
416 Requested Range Not Satisfiable 클라이언트가 잘못된 수치의 범위를 지정하고 있는 Range 헤더를 포함한다.
417 Expectation Failed 요청이 서버가 만족시킬 수 없는 Expect 헤더를 가지고 있다.
500 Internal Server Error 서버의 문제로 정상적인 수행을 할 수 없음을 표시한다.
501 Not Implemented 해당 요청을 수행하는 방법을 서버가 모른다.
502 Bad Gateway 게이트웨이나 프록시 역할을 수행하는 서버가 클라이언트를 대신해 접속한 다른 서버에서 잘못된 응답을 받았다.
503 Service Unavailable 내부적인 원인으로 잠시 요청의 처리를 수행할 수 없다.
504 Gateway Timeout 게이트웨이나 프록시 역할을 수행하는 서버가 클라이언트를 대신해 접속한 다른 서버에서 특정 시간동안 응답을 보내지 않았다.
505 HTTP Version Not Supported  요청에 사용한 HTTP 버전을 서버가 이해하지 못했다.

 

 

 

이 글은 스프링노트에서 작성되었습니다.

+ Recent posts