1판 추천사 ... ⅳ 지은이 소개 ... ⅴ 감사의 글 ... ⅵ 공헌자 소개 ... ⅶ 옮긴이 소개 ... ⅸ 옮긴이의 말 ... xii 들어가며 1부 기초 관리 ... 1 1장 시작하기 ... 3 1.1 배경 지식 ... 4 1.2 리눅스와 유닉스의 관계 ... 4 1.3 역사적인 맥락에서 리눅스 ... 5 1.4 리눅스 배포판 ... 6 어느 배포판이 최고인가? ... 8 배포판별 관리 도구 ... 9 1.5 기호와 용어 규칙 ... 10 시스템별 정보 ... 11 1.6 어디에서 정보를 얻을 수 있나 ... 11 매뉴얼 페이지 구성 ... 13 man: 매뉴얼 페이지 읽기 ... 14 기타 리눅스 정보 출처 ... 14 1.7 소프트웨어를 찾아서 설치하는 방법 ... 16 1.8 시스템 관리자가 꼭 해야 하는 작업 ... 18 사용자 계정 추가, 삭제, 관리 ... 18 하드웨어 추가, 제거 ... 18 백업하기 ... 18 소프트웨어 설치와 업그레이드 ... 18 시스템 감시 ... 19 문제 해결 ... 19 로컬 문서 관리 ... 19 철저한 보안 감시 ... 19 사용자 지원 ... 19 1.9 강요된 시스템 관리 ... 20 시스템 관리 성격 증후군 ... 20 1.10 참고 문헌 ... 21 1.11 연습문제 ... 22 2장 부팅과 종료 ... 24 2.1 부트스트래핑 ... 24 자동 부팅과 수동 부팅 ... 25 부팅 절차 ... 25 커널 초기화 ... 26 하드웨어 설정 ... 26 커널 스레드 ... 26 운영자 작업(수동 부팅에만 해당) ... 27 시동 스크립트 실행 ... 28 다중 사용자 모드로 동작 ... 28 2.2 PC 부팅하기 ... 29 2.3 부트 로더 이용하기: LILO와 GRUB ... 30 GRUB: 야심찬 통합 부트 로더 ... 30 LILO: 전통적인 리눅스 부트 로더 ... 32 커널 옵션 ... 33 PC에서 멀티부팅하기 ... 33 GRUB 멀티부트 설정 ... 34 LILO 멀티부트 설정 ... 35 2.4 단일 사용자 모드로 부팅 ... 36 GRUB에서 단일 사용자 모드 ... 36 LILO에서 단일 사용자 모드 ... 36 2.5 시동 스크립트 다루기 ... 37 init과 실행 단계 ... 37 레드햇과 페도라의 시동 스크립트 ... 40 수세 시동 스크립트 ... 43 데비안과 우분투 시동 스크립트 ... 45 2.6 재시동과 종료 ... 46 전원 끄기 ... 46 shutdown: 우아하게 시스템을 종료하는 방법 ... 47 halt: 좀 더 간단하게 종료하는 방법 ... 47 reboot: 빠르지만 정석은 아닌 재시동 ... 48 telinit: init의 실행 단계 변경 ... 48 poweroff: 리눅스에게 전원을 끄라고 명령하기 ... 48 2.7 연습문제 ... 48 3장 루트의 권한 ... 50 3.1 파일과 프로세스에 대한 소유 권한 ... 50 3.2 슈퍼유저 ... 51 3.3 루트 패스워드 고르기 ... 52 3.4 루트되기 ... 54 su: 사용자 ID 변경 ... 54 sudo: 제한된 su ... 55 3.5 기타 가상의 사용자 ... 58 bin: 시스템 명령에 대한 상속자 ... 58 daemon: 권한이 없는 시스템 소프트웨어에 대한 소유주 ... 58 nobody: 일반적인 NFS 사용자 ... 58 3.6 연습문제 ... 59 4장 프로세스 제어 ... 60 4.1 프로세스의 구성 요소 ... 60 PID: 프로세스 ID 번호 ... 61 PPID: 부모 프로세스의 PID ... 61 UID와 EUID: 실사용자 ID와 유효사용자 ID ... 62 GID와 EGID: 실그룹 ID와 유효그룹 ID ... 62 나이스 값 ... 63 제어 터미널 ... 63 4.2 프로세스의 생명주기 ... 63 4.3 시그널 ... 64 4.4 kill과 killall: 시그널 전달 ... 67 4.5 프로세스 상태 ... 68 4.6 nice와 renice: 프로세스 우선순위 조정 ... 69 4.7 ps: 프로세스 감시 ... 71 4.8 top: 더 상세한 프로세스 감시 ... 73 4.9 /proc 파일 시스템 ... 74 4.10 strace: 시그널과 시스템 호출 추적 ... 76 4.11 프로세스 폭주 ... 77 4.12 참고 문헌 ... 79 4.13 연습문제 ... 79 5장 파일 시스템 ... 80 5.1 경로명 ... 82 5.2 파일 시스템 마운트와 언마운트 ... 83 5.3 파일 트리의 구성 ... 85 5.4 파일 형식 ... 88 일반 파일 ... 89 디렉토리 ... 89 문자 장치 파일과 블록 장치 파일 ... 90 로컬 도메인 소켓 ... 91 명명된 파이프 ... 91 심볼릭 링크 ... 92 5.5 파일 속성 ... 92 접근 허가 비트 ... 93 setuid와 setgid 비트 ... 94 sticky 비트 ... 94 파일 속성 확인하기 ... 94 chmod: 접근 허가 변경 ... 97 chown: 소유권과 소유 그룹 변경 ... 98 umask: 기본 접근 허가 할당 ... 99 보너스 플래그 ... 100 5.6 접근 제어 목록 ... 101 ACL 개요 ... 102 기본 항목 ... 105 5.7 연습문제 ... 105 6장 새로운 사용자 추가 ... 107 6.1 /etc/password 파일 ... 108 로그인명 ... 108 암호화된 패스워드 ... 110 UID(user ID) 번호 ... 111 기본 GID 번호 ... 112 GECOS 항목 ... 112 홈 디렉토리 ... 113 로그인 셸 ... 113 6.2 /etc/shadow 파일 ... 113 6.3 /etc/group 파일 ... 116 6.4 사용자 추가 ... 118 passwd와 shadow 파일 편집 ... 119 /etc/group 파일 편집 ... 119 초기 패스워드 설정하기 ... 120 사용자 홈 디렉토리 생성 ... 120 기본적인 시작 파일 복사 ... 120 사용자 메일 홈 설정 ... 122 새로운 로그인 확인 ... 122 사용자의 상태와 연락처 정보 기록 ... 123 6.5 사용자 제거 ... 123 6.6 로그인 금지 ... 124 6.7 계정 관리 ... 125 6.8 연습문제 ... 126 7장 디스크 추가 ... 128 7.1 디스크 인터페이스 ... 128 PATA 인터페이스 ... 130 SATA 인터페이스 ... 131 SCSI 인터페이스 ... 132 SCSI와 IDE 중 누가 더 나은가? ... 136 7.2 디스크 구조 ... 136 7.3 리눅스 파일 시스템 ... 138 ext2와 ext3 ... 138 ReiserFS ... 139 XFS와 JFS ... 139 7.4 디스크 설치 과정 미리 보기 ... 140 디스크 연결 ... 140 디스크 초기화하기 ... 141 레이블 지정과 디스크 분할 ... 142 디스크 파티션에 파일 시스템 생성 ... 143 파일 시스템 마운트 ... 144 자동 마운트 기능 설정 ... 145 스왑 활성화 ... 147 7.5 hdparm: IDE 인터페이스 매개변수 설정 ... 148 7.6 fsck: 파일 시스템 확인과 수리 ... 150 7.7 디스크 추가: 단계별 가이드 ... 153 7.8 고급 디스크 관리: RAID와 LVM ... 158 리눅스 소프트웨어 RAID ... 159 논리 볼륨 관리 ... 160 LVM과 RAID 설정 예 ... 160 파손된 디스크 다루기 ... 165 저장 공간을 다시 할당하기 ... 167 7.9 USB 드라이브 마운트하기 ... 168 7.10 연습문제 ... 170 8장 주기적인 작업 ... 172 8.1 cron: 작업 예약 명령 ... 172 8.2 crontab 파일 형식 ... 173 8.3 crontab 관리 ... 175 8.4 대표적인 cron 사용 예 ... 176 파일 시스템 정리 ... 177 네트워크를 통한 설정 파일 배포 ... 178 로그 파일 순환 ... 179 8.5 기타 예약 프로그램: anacron과 fcron ... 179 8.6 연습문제 ... 180 9장 백업 ... 181 9.1 경험으로 얻은 교훈 ... 182 한 기계에서 모든 덤프를 수행하자 ... 182 매체에 라벨을 붙이자 ... 182 합리적으로 백업 간격을 결정하자 ... 183 파일 시스템을 주의 깊게 선택하자 ... 183 매체 하나에 딱 맞는 일일 덤프를 만들자 ... 183 덤프 장치 용량보다 파일 시스템을 더 작게 만들자 ... 184 매체를 사이트 외부에 보관하자 ... 184 백업을 보호하자 ... 185 덤프하는 동안 사용을 제한하자 ... 185 매체를 검증하자 ... 185 매체 생명 주기를 정의하자 ... 186 백업을 위한 자료를 설계하자 ... 187 최악의 상황을 대비하자 ... 187 9.2 백업 장치와 매체 ... 187 광학 매체: CD-R/RW, DVD±R/RW, DVD-RAM ... 188 이동식 하드디스크(USB와 파이어와이어) ... 189 작은 테이프 드라이브: 8mm와 DDS/DAT ... 189 DLT/S-DLT ... 190 AIT와 SAIT ... 190 VXA/VXA-X ... 191 LTO ... 191 쥬크박스, 스태커, 테이프 라이브러리 ... 191 하드디스크 ... 192 매체 유형 요약 ... 192 무엇을 사야 하나? ... 193 9.3 dump를 사용해서 증분 백업 설정 ... 193 파일 시스템 덤프 뜨기 ... 194 덤프 순서 ... 196 9.4 restore를 사용한 덤프 복구 ... 198 개별 파일 복구 ... 198 전체 파일 시스템 복구 ... 200 9.5 판올림을 위한 덤프와 복구 ... 201 9.6 다른 보존 프로그램 활용 ... 202 tar: 파일 묶기 ... 202 cpio: 초기부터 내려오던 보존 유틸리티 ... 203 dd: 비트 다루기 ... 203 9.7 테이프 하나에 기록된 여러 파일 활용 ... 204 9.8 바쿨라 ... 205 바쿨라 모델 ... 206 바쿨라 설정 ... 207 데이터베이스와 바쿨라 데몬 설치 ... 207 바쿨라 데몬 환경 설정 ... 208 bacula-dir.conf: 디렉터 환경 설정 ... 208 bacula-sd.conf: 스토리지 데몬 환경 설정 ... 213 bconsole.conf: 콘솔 환경 설정 ... 215 클라이언트 파일 데몬 설치와 환경 설정 ... 215 바쿨라 데몬 시작하기 ... 216 매체를 풀에 추가 ... 217 수동으로 백업하기 ... 217 복구 작업 수행 ... 219 바쿨라 환경 설정 감시와 디버깅 ... 223 바쿨라 대안 ... 225 9.9 상용 백업 제품군 ... 225 ADSM/TSM ... 226 베리타스 ... 226 기타 대안 ... 227 9.10 참고 문헌 ... 227 9.11 연습문제 ... 227 10장 syslog와 로그 파일 ... 230 10.1 로그 기록 정책 ... 230 로그 파일 폐기 ... 231 로그 파일 순환 ... 231 로그 파일 보관 ... 233 10.2 리눅스 로그 파일 ... 233 특수 로그 파일 ... 236 커널 로그와 부팅 시 로그 ... 236 10.3 logrotate: 로그 파일 관리 ... 238 10.4 syslog: 시스템 이벤트 로그 기록기 ... 239 syslog의 대안 ... 240 syslog 구조 ... 240 syslogd 설정 ... 241 사이트 상황에 맞는 로그 정책 수립 ... 244 설정 파일 예 ... 245 syslog 출력의 예 ... 248 syslog를 사용하는 소프트웨어 ... 248 syslog 디버깅 ... 249 프로그램에서 syslog 사용 ... 250 10.5 로그 파일을 응축해서 유용한 정보 얻기 ... 252 10.6 연습문제 ... 254 11장 소프트웨어와 설정 관리 ... 255 11.1 기본적인 리눅스 설치 ... 255 넷부팅 PC ... 257 리눅스용 PXE 설치 ... 257 PC가 아닌 시스템을 넷부팅하기 ... 258 킥스타트: 엔터프라이즈 리눅스와 페도라를 위한 자동화된 설치 프로그램 ... 259 AutoYaST: 수세에서 지원하는 자동화된 설치 도구 ... 262 데비안과 우분투 설치 프로그램 ... 263 마스터 시스템으로 설치 ... 264 11.2 디스크 없는 클라이언트 ... 265 11.3 패키지 관리 ... 267 다양한 패키지 관리 시스템 ... 268 rpm: RPM 패키지 관리 ... 268 dpkg: 데비안 스타일로 패키지 다루기 ... 270 11.4 고수준 패키지 관리 시스템 ... 271 패키지 저장소 ... 272 RHN: 레드햇 네트워크 ... 273 APT: 어드밴스트 패키지 툴 ... 274 apt-get 구성 ... 275 /etc/apt/sources.list 예제 파일 ... 276 apt-get 확장성을 높이는 프록시 활용 ... 277 내부 APT 서버 설치 ... 278 apt-get 자동화 ... 279 yum: RPM을 위한 릴리즈 관리 ... 280 11.5 리비전 컨트롤 ... 281 백업 파일 만들기 ... 281 공식적인 리비전 컨트롤 시스템 ... 281 RCS: 리비전 컨트롤 시스템 ... 283 CVS: Concurrent Versions System ... 286 서브버전: 제대로 만든 CVS ... 287 11.6 로컬리제이션과 구성 ... 290 로컬리제이션 조직화하기 ... 291 테스트 ... 292 지역 컴파일 ... 293 로컬리제이션 배포 ... 294 일정 문제 해결하기 ... 294 11.7 설정 관리 도구 ... 295 cfengine: 컴퓨터 면역 시스템 ... 295 LCFG: 대규모 설정 시스템 ... 296 Arusha 프로젝트(ARK) ... 296 템플릿 트리 2: cfengine 도우미 ... 297 DMTF/CIM: 공통 정보 모델 ... 297 11.8 NFS로 소프트웨어 공유 ... 298 패키지 이름 공간 ... 299 의존성 관리 ... 300 래퍼 스크립트 ... 300 구현 도구 ... 301 11.9 추천 소프트웨어 ... 301 11.10 참고 문헌 ... 303 11.11 연습 문제 ... 304 2부 네트워킹 ... 305 12장 TCP/IP 네트워킹 ... 307 12.1 TCP/IP와 인터넷 ... 308 개괄적인 역사 ... 308 오늘날 인터넷은 어떻게 관리되나 ... 309 네트워크 표준과 문서 ... 310 12.2 네트워킹 로드맵 ... 311 12.3 패킷과 캡슐화 ... 313 링크 계층 ... 314 패킷 주소 표시 ... 316 포트 ... 318 주소 종류 ... 318 12.4 IP 주소: 시시콜콜한 얘기 ... 318 IP 주소 클래스 ... 319 IP 주소 재앙 ... 323 CIDR: 클래스가 없는 도메인 내 라우팅 ... 324 주소 할당 ... 326 사설 주소와 NAT ... 327 IPv6 주소 체계 ... 329 12.5 라우팅 ... 331 라우팅 테이블 ... 332 ICMP 방향 전환 ... 333 12.6 ARP: 주소 결정 프로토콜 ... 334 12.7 네트워크에 컴퓨터 추가하기 ... 336 호스트명과 IP 주소 할당 ... 337 ifconfig: 네트워크 인터페이스 설정하기 ... 338 mii-tool: 자동 협상과 그 외 매체별 옵션 설정하기 ... 341 route: 정적 경로 설정 ... 342 기본 라우팅 경로 ... 344 DNS 설정 ... 345 리눅스 네트워크 스택 ... 346 12.8 배포판별 네트워크 설정 ... 347 레드햇과 페도라를 위한 네트워크 설정 ... 347 수세용 네트워크 설정 ... 349 데비안과 우분투용 네트워크 설정 ... 350 12.9 12.9 DHCP: 동적 호스트 설정 프로토콜 ... 351 DHCP 소프트웨어 ... 352 DHCP 동작 원리 ... 353 ISC에서 만든 DHCP 서버 ... 353 12.10 동적 재설정과 튜닝 ... 355 12.11 보안 문제 ... 357 IP 포워딩 ... 357 ICMP 리다이렉트 ... 358 소스 라우팅 ... 358 ping과 다른 형태로 방향성 있는 브로드캐스트를 브로드캐스트하기 ... 358 IP 스푸핑 ... 359 호스트 기반 방화벽 ... 359 가상 사설 네트워크 ... 360 보안 관련 커널 변수 ... 360 12.12 리눅스 NAT ... 361 12.13 PPP: 점-대-점 프로토콜 ... 361 PPP 성능 문제에 대한 이야기 ... 362 PPP로 네트워크에 연결하기 ... 363 호스트가 PPP를 사용할 수 있게 만들기 ... 363 PPP 링크 조절하기 ... 363 주소 할당하기 ... 364 라우팅 ... 364 보안 확인하기 ... 364 chat 스크립트 사용하기 ... 365 리눅스 PPP 설정하기 ... 365 12.14 리눅스 네트워킹 쿼크 ... 373 12.15 참고 문헌 ... 374 12.16 연습문제 ... 376 13장 라우팅 ... 378 13.1 패킷 포워딩: 자세히 보기 ... 379 13.2 라우팅 데몬과 라우팅 프로토콜 ... 382 거리-벡터 프로토콜 ... 382 링크-상태 프로토콜 ... 383 비용 척도 ... 384 내부 프로토콜과 외부 프로토콜 ... 385 13.3 프로토콜 총정리 ... 385 RIP: Routing Information Protocol ... 385 RIP-2: Routing Information Protocol, version 2 ... 386 OSPF: Open Shortest Path First ... 387 IGRP와 EIGRP: Interior Gateway Routing Protocol ... 387 IS-IS: ISO 표준 ... 387 MOSPF, DVMRP, PIM: 멀티캐스트 라우팅 프로토콜 ... 388 라우터 탐색 프로토콜 ... 388 13.4 routed: RIP 네가 문제야 ... 388 13.5 gated: 뒤안길로 사라지다 ... 389 13.6 라우팅 전략 선택 기준 ... 390 13.7 시스코 라우터 ... 391 13.8 참고 문헌 ... 394 13.9 연습문제 ... 395 14장 네트워크 하드웨어 ... 397 14.1 LAN, WAN, MAN ... 398 14.2 이더넷: 일반적인 LAN ... 398 이더넷은 어떻게 동작하는가 ... 400 이더넷 토폴로지 ... 400 UTP ... 401 이더넷 간 연결과 확장 ... 404 14.3 무선: 유목민의 LAN ... 407 무선 보안 ... 408 무선 스위치 ... 409 14.4 FDDI: 실망스럽고 비싸며 오래된 LAN ... 409 14.5 ATM: 약속된(그러나 좌절된) LAN ... 411 16.6 프레임 릴레이: 희생적인 WAN ... 412 14.7 ISDN: 토착 WAN ... 412 14.8 DSL과 케이블 모뎀: 일반인들의 WAN ... 413 14.9 네트워크 전망 ... 414 14.10 네트워크 테스트와 디버깅 ... 415 14.11 건물 배선 ... 416 UTP 케이블 옵션 ... 416 사무실로 연결 ... 416 배선 표준 ... 417 14.12 네트워크 디자인 쟁점 ... 418 네트워크 구조와 건물 구조 ... 418 기존 네트워크 ... 419 확장 ... 419 혼잡 ... 419 유지 보수와 문서화 ... 420 14.13 관리 쟁점 ... 420 14.14 추천 업체 ... 421 케이블과 커넥터 ... 421 테스트 장비 ... 422 라우터/스위치 ... 422 14.15 참고 문헌 ... 422 14.16 연습문제 ... 423 15장 DNS: 도메인 네임 시스템 ... 424 15.1 성질 급한 사람들을 위한 DNS: 장비 추가하기 ... 425 15.2 DNS의 역사 ... 427 BIND 구현 ... 427 기타 DNS 시스템 ... 428 15.3 DNS가 필요한 사람 ... 429 15.4 DNS 이름 공간 ... 430 도메인 관리자 ... 433 도메인명 선택 ... 434 도메인 팽창 ... 434 차상위 도메인명 등록 ... 435 하위 도메인 생성 ... 435 15.5 DNS 작동 방식 ... 436 위임 ... 436 캐시와 효율성 ... 437 확장 DNS 프로토콜 ... 438 15.6 DNS의 새로운 기능 ... 439 15.7 DNS 데이터베이스 ... 442 자원 레코드 ... 442 SOA 레코드 ... 445 NS 레코드 ... 448 A 레코드 ... 449 PTR 레코드 ... 450 MX 레코드 ... 451 CNAME 레코드 ... 453 CNAME을 이용한 변칙 ... 454 LOC 레코드 ... 456 SRV 레코드 ... 457 TXT 레코드 ... 458 IPv6 자원 레코드 ... 459 IPv6 정방향 레코드 ... 460 IPv6 역방향 레코드 ... 460 보안 관련 레코드 ... 460 존 파일이 지원하는 명령 ... 461 연결 레코드: 존 사이를 연결 ... 462 15.8 BIND 소프트웨어 ... 465 BIND 버전 ... 465 사용 버전 확인 ... 466 BIND 구성 요소 ... 468 named: BIND 네임 서버 ... 468 공인 서버와 캐시 전용 서버 ... 469 재귀적 서버와 비재귀적 서버 ... 470 리졸버 라이브러리 ... 471 DNS의 셸 인터페이스 ... 472 15.9 DNS 환경 설계 ... 472 이름 공간 관리 ... 472 공인 서버 ... 473 캐시 서버 ... 474 보안 ... 475 종합 ... 475 DNS/BIND 작업의 분류 ... 475 15.10 BIND 클라이언트 관련 문제 ... 476 DNS 클라이언트 설정 ... 476 클라이언트 테스트 ... 477 나머지 시스템에 미치는 영향 ... 478 15.11 BIND 서버 설정 ... 478 하드웨어 요구 사항 ... 478 설정 파일 ... 479 include 구문 ... 481 options 구문 ... 481 acl 구문 ... 488 key 구문 ... 489 trusted-keys 구문 ... 489 server 구문 ... 490 masters 구문 ... 491 logging 구문 ... 492 zone 구문 ... 492 controls 구문 ... 496 DNS 분리와 view 구문 ... 498 15.12 BIND 설정 예제 ... 500 로컬 호스트 존 ... 500 작은 보안회사 ... 501 isc.org 인터넷 시스템 컨소시엄 ... 506 15.13 named 시작 ... 508 15.14 존 파일 갱신 ... 509 존 전송 ... 509 동적 갱신 ... 511 15.15 보안 문제 ... 513 접근 제한 목록 다시보기 ... 514 named 제한 ... 516 TSIG와 TKEY를 이용한 서버 간 통신 보안 ... 517 DNSSEC ... 520 부정적 응답 ... 528 마이크로소프트와 DNS ... 528 15.16 테스트와 디버깅 ... 531 로그 기록 ... 531 로그 설정 예제 ... 536 디버그 수준 ... 537 rndc를 이용한 디버그 ... 537 BIND 통계 ... 539 dig를 이용한 디버그 ... 540 불완전한 위임 ... 542 doc: 도메인 은폐 제어 도구 ... 543 다른 DNS 상태 확인 도구 ... 545 성능 문제 ... 545 15.17 배포판별 주의 사항 ... 546 15.18 참고 문헌 ... 549 메일링 리스트와 뉴스그룹 ... 549 책과 기타 문서 ... 549 온라인 문서 ... 550 RFC 문서 ... 550 15.19 연습문제 ... 550 16장 네트워크 파일 시스템 ... 552 16.1 NFS 개요 ... 553 NFS 프로토콜 버전 ... 553 전송 프로토콜 선택 ... 554 파일 잠금 ... 554 디스크 할당 ... 555 쿠키와 무상태 마운트 ... 555 공유 파일 시스템 명명 규칙 ... 555 NFS와 보안 ... 556 루트 제어와 nobody 계정 ... 557 16.2 서버 측 NFS ... 558 exports 파일 ... 559 nfsd: 파일 서? 1판 추천사 ... ⅳ 지은이 소개 ... ⅴ 감사의 글 ... ⅵ 공헌자 소개 ... ⅶ 옮긴이 소개 ... ⅸ 옮긴이의 말 ... xii 들어가며 1부 기초 관리 ... 1 1장 시작하기 ... 3 1.1 배경 지식 ... 4 1.2 리눅스와 유닉스의 관계 ... 4 1.3 역사적인 맥락에서 리눅스 ... 5 1.4 리눅스 배포판 ... 6 어느 배포판이 최고인가? ... 8 배포판별 관리 도구 ... 9 1.5 기호와 용어 규칙 ... 10 시스템별 정보 ... 11 1.6 어디에서 정보를 얻을 수 있나 ... 11 매뉴얼 페이지 구성 ... 13 man: 매뉴얼 페이지 읽기 ... 14 기타 리눅스 정보 출처 ... 14 1.7 소프트웨어를 찾아서 설치하는 방법 ... 16 1.8 시스템 관리자가 꼭 해야 하는 작업 ... 18 사용자 계정 추가, 삭제, 관리 ... 18 하드웨어 추가, 제거 ... 18 백업하기 ... 18 소프트웨어 설치와 업그레이드 ... 18 시스템 감시 ... 19 문제 해결 ... 19 로컬 문서 관리 ... 19 철저한 보안 감시 ... 19 사용자 지원 ... 19 1.9 강요된 시스템 관리 ... 20 시스템 관리 성격 증후군 ... 20 1.10 참고 문헌 ... 21 1.11 연습문제 ... 22 2장 부팅과 종료 ... 24 2.1 부트스트래핑 ... 24 자동 부팅과 수동 부팅 ... 25 부팅 절차 ... 25 커널 초기화 ... 26 하드웨어 설정 ... 26 커널 스레드 ... 26 운영자 작업(수동 부팅에만 해당) ... 27 시동 스크립트 실행 ... 28 다중 사용자 모드로 동작 ... 28 2.2 PC 부팅하기 ... 29 2.3 부트 로더 이용하기: LILO와 GRUB ... 30 GRUB: 야심찬 통합 부트 로더 ... 30 LILO: 전통적인 리눅스 부트 로더 ... 32 커널 옵션 ... 33 PC에서 멀티부팅하기 ... 33 GRUB 멀티부트 설정 ... 34 LILO 멀티부트 설정 ... 35 2.4 단일 사용자 모드로 부팅 ... 36 GRUB에서 단일 사용자 모드 ... 36 LILO에서 단일 사용자 모드 ... 36 2.5 시동 스크립트 다루기 ... 37 init과 실행 단계 ... 37 레드햇과 페도라의 시동 스크립트 ... 40 수세 시동 스크립트 ... 43 데비안과 우분투 시동 스크립트 ... 45 2.6 재시동과 종료 ... 46 전원 끄기 ... 46 shutdown: 우아하게 시스템을 종료하는 방법 ... 47 halt: 좀 더 간단하게 종료하는 방법 ... 47 reboot: 빠르지만 정석은 아닌 재시동 ... 48 telinit: init의 실행 단계 변경 ... 48 poweroff: 리눅스에게 전원을 끄라고 명령하기 ... 48 2.7 연습문제 ... 48 3장 루트의 권한 ... 50 3.1 파일과 프로세스에 대한 소유 권한 ... 50 3.2 슈퍼유저 ... 51 3.3 루트 패스워드 고르기 ... 52 3.4 루트되기 ... 54 su: 사용자 ID 변경 ... 54 sudo: 제한된 su ... 55 3.5 기타 가상의 사용자 ... 58 bin: 시스템 명령에 대한 상속자 ... 58 daemon: 권한이 없는 시스템 소프트웨어에 대한 소유주 ... 58 nobody: 일반적인 NFS 사용자 ... 58 3.6 연습문제 ... 59 4장 프로세스 제어 ... 60 4.1 프로세스의 구성 요소 ... 60 PID: 프로세스 ID 번호 ... 61 PPID: 부모 프로세스의 PID ... 61 UID와 EUID: 실사용자 ID와 유효사용자 ID ... 62 GID와 EGID: 실그룹 ID와 유효그룹 ID ... 62 나이스 값 ... 63 제어 터미널 ... 63 4.2 프로세스의 생명주기 ... 63 4.3 시그널 ... 64 4.4 kill과 killall: 시그널 전달 ... 67 4.5 프로세스 상태 ... 68 4.6 nice와 renice: 프로세스 우선순위 조정 ... 69 4.7 ps: 프로세스 감시 ... 71 4.8 top: 더 상세한 프로세스 감시 ... 73 4.9 /proc 파일 시스템 ... 74 4.10 strace: 시그널과 시스템 호출 추적 ... 76 4.11 프로세스 폭주 ... 77 4.12 참고 문헌 ... 79 4.13 연습문제 ... 79 5장 파일 시스템 ... 80 5.1 경로명 ... 82 5.2 파일 시스템 마운트와 언마운트 ... 83 5.3 파일 트리의 구성 ... 85 5.4 파일 형식 ... 88 일반 파일 ... 89 디렉토리 ... 89 문자 장치 파일과 블록 장치 파일 ... 90 로컬 도메인 소켓 ... 91 명명된 파이프 ... 91 심볼릭 링크 ... 92 5.5 파일 속성 ... 92 접근 허가 비트 ... 93 setuid와 setgid 비트 ... 94 sticky 비트 ... 94 파일 속성 확인하기 ... 94 chmod: 접근 허가 변경 ... 97 chown: 소유권과 소유 그룹 변경 ... 98 umask: 기본 접근 허가 할당 ... 99 보너스 플래그 ... 100 5.6 접근 제어 목록 ... 101 ACL 개요 ... 102 기본 항목 ... 105 5.7 연습문제 ... 105 6장 새로운 사용자 추가 ... 107 6.1 /etc/password 파일 ... 108 로그인명 ... 108 암호화된 패스워드 ... 110 UID(user ID) 번호 ... 111 기본 GID 번호 ... 112 GECOS 항목 ... 112 홈 디렉토리 ... 113 로그인 셸 ... 113 6.2 /etc/shadow 파일 ... 113 6.3 /etc/group 파일 ... 116 6.4 사용자 추가 ... 118 passwd와 shadow 파일 편집 ... 119 /etc/group 파일 편집 ... 119 초기 패스워드 설정하기 ... 120 사용자 홈 디렉토리 생성 ... 120 기본적인 시작 파일 복사 ... 120 사용자 메일 홈 설정 ... 122 새로운 로그인 확인 ... 122 사용자의 상태와 연락처 정보 기록 ... 123 6.5 사용자 제거 ... 123 6.6 로그인 금지 ... 124 6.7 계정 관리 ... 125 6.8 연습문제 ... 126 7장 디스크 추가 ... 128 7.1 디스크 인터페이스 ... 128 PATA 인터페이스 ... 130 SATA 인터페이스 ... 131 SCSI 인터페이스 ... 132 SCSI와 IDE 중 누가 더 나은가? ... 136 7.2 디스크 구조 ... 136 7.3 리눅스 파일 시스템 ... 138 ext2와 ext3 ... 138 ReiserFS ... 139 XFS와 JFS ... 139 7.4 디스크 설치 과정 미리 보기 ... 140 디스크 연결 ... 140 디스크 초기화하기 ... 141 레이블 지정과 디스크 분할 ... 142 디스크 파티션에 파일 시스템 생성 ... 143 파일 시스템 마운트 ... 144 자동 마운트 기능 설정 ... 145 스왑 활성화 ... 147 7.5 hdparm: IDE 인터페이스 매개변수 설정 ... 148 7.6 fsck: 파일 시스템 확인과 수리 ... 150 7.7 디스크 추가: 단계별 가이드 ... 153 7.8 고급 디스크 관리: RAID와 LVM ... 158 리눅스 소프트웨어 RAID ... 159 논리 볼륨 관리 ... 160 LVM과 RAID 설정 예 ... 160 파손된 디스크 다루기 ... 165 저장 공간을 다시 할당하기 ... 167 7.9 USB 드라이브 마운트하기 ... 168 7.10 연습문제 ... 170 8장 주기적인 작업 ... 172 8.1 cron: 작업 예약 명령 ... 172 8.2 crontab 파일 형식 ... 173 8.3 crontab 관리 ... 175 8.4 대표적인 cron 사용 예 ... 176 파일 시스템 정리 ... 177 네트워크를 통한 설정 파일 배포 ... 178 로그 파일 순환 ... 179 8.5 기타 예약 프로그램: anacron과 fcron ... 179 8.6 연습문제 ... 180 9장 백업 ... 181 9.1 경험으로 얻은 교훈 ... 182 한 기계에서 모든 덤프를 수행하자 ... 182 매체에 라벨을 붙이자 ... 182 합리적으로 백업 간격을 결정하자 ... 183 파일 시스템을 주의 깊게 선택하자 ... 183 매체 하나에 딱 맞는 일일 덤프를 만들자 ... 183 덤프 장치 용량보다 파일 시스템을 더 작게 만들자 ... 184 매체를 사이트 외부에 보관하자 ... 184 백업을 보호하자 ... 185 덤프하는 동안 사용을 제한하자 ... 185 매체를 검증하자 ... 185 매체 생명 주기를 정의하자 ... 186 백업을 위한 자료를 설계하자 ... 187 최악의 상황을 대비하자 ... 187 9.2 백업 장치와 매체 ... 187 광학 매체: CD-R/RW, DVD±R/RW, DVD-RAM ... 188 이동식 하드디스크(USB와 파이어와이어) ... 189 작은 테이프 드라이브: 8mm와 DDS/DAT ... 189 DLT/S-DLT ... 190 AIT와 SAIT ... 190 VXA/VXA-X ... 191 LTO ... 191 쥬크박스, 스태커, 테이프 라이브러리 ... 191 하드디스크 ... 192 매체 유형 요약 ... 192 무엇을 사야 하나? ... 193 9.3 dump를 사용해서 증분 백업 설정 ... 193 파일 시스템 덤프 뜨기 ... 194 덤프 순서 ... 196 9.4 restore를 사용한 덤프 복구 ... 198 개별 파일 복구 ... 198 전체 파일 시스템 복구 ... 200 9.5 판올림을 위한 덤프와 복구 ... 201 9.6 다른 보존 프로그램 활용 ... 202 tar: 파일 묶기 ... 202 cpio: 초기부터 내려오던 보존 유틸리티 ... 203 dd: 비트 다루기 ... 203 9.7 테이프 하나에 기록된 여러 파일 활용 ... 204 9.8 바쿨라 ... 205 바쿨라 모델 ... 206 바쿨라 설정 ... 207 데이터베이스와 바쿨라 데몬 설치 ... 207 바쿨라 데몬 환경 설정 ... 208 bacula-dir.conf: 디렉터 환경 설정 ... 208 bacula-sd.conf: 스토리지 데몬 환경 설정 ... 213 bconsole.conf: 콘솔 환경 설정 ... 215 클라이언트 파일 데몬 설치와 환경 설정 ... 215 바쿨라 데몬 시작하기 ... 216 매체를 풀에 추가 ... 217 수동으로 백업하기 ... 217 복구 작업 수행 ... 219 바쿨라 환경 설정 감시와 디버깅 ... 223 바쿨라 대안 ... 225 9.9 상용 백업 제품군 ... 225 ADSM/TSM ... 226 베리타스 ... 226 기타 대안 ... 227 9.10 참고 문헌 ... 227 9.11 연습문제 ... 227 10장 syslog와 로그 파일 ... 230 10.1 로그 기록 정책 ... 230 로그 파일 폐기 ... 231 로그 파일 순환 ... 231 로그 파일 보관 ... 233 10.2 리눅스 로그 파일 ... 233 특수 로그 파일 ... 236 커널 로그와 부팅 시 로그 ... 236 10.3 logrotate: 로그 파일 관리 ... 238 10.4 syslog: 시스템 이벤트 로그 기록기 ... 239 syslog의 대안 ... 240 syslog 구조 ... 240 syslogd 설정 ... 241 사이트 상황에 맞는 로그 정책 수립 ... 244 설정 파일 예 ... 245 syslog 출력의 예 ... 248 syslog를 사용하는 소프트웨어 ... 248 syslog 디버깅 ... 249 프로그램에서 syslog 사용 ... 250 10.5 로그 파일을 응축해서 유용한 정보 얻기 ... 252 10.6 연습문제 ... 254 11장 소프트웨어와 설정 관리 ... 255 11.1 기본적인 리눅스 설치 ... 255 넷부팅 PC ... 257 리눅스용 PXE 설치 ... 257 PC가 아닌 시스템을 넷부팅하기 ... 258 킥스타트: 엔터프라이즈 리눅스와 페도라를 위한 자동화된 설치 프로그램 ... 259 AutoYaST: 수세에서 지원하는 자동화된 설치 도구 ... 262 데비안과 우분투 설치 프로그램 ... 263 마스터 시스템으로 설치 ... 264 11.2 디스크 없는 클라이언트 ... 265 11.3 패키지 관리 ... 267 다양한 패키지 관리 시스템 ... 268 rpm: RPM 패키지 관리 ... 268 dpkg: 데비안 스타일로 패키지 다루기 ... 270 11.4 고수준 패키지 관리 시스템 ... 271 패키지 저장소 ... 272 RHN: 레드햇 네트워크 ... 273 APT: 어드밴스트 패키지 툴 ... 274 apt-get 구성 ... 275 /etc/apt/sources.list 예제 파일 ... 276 apt-get 확장성을 높이는 프록시 활용 ... 277 내부 APT 서버 설치 ... 278 apt-get 자동화 ... 279 yum: RPM을 위한 릴리즈 관리 ... 280 11.5 리비전 컨트롤 ... 281 백업 파일 만들기 ... 281 공식적인 리비전 컨트롤 시스템 ... 281 RCS: 리비전 컨트롤 시스템 ... 283 CVS: Concurrent Versions System ... 286 서브버전: 제대로 만든 CVS ... 287 11.6 로컬리제이션과 구성 ... 290 로컬리제이션 조직화하기 ... 291 테스트 ... 292 지역 컴파일 ... 293 로컬리제이션 배포 ... 294 일정 문제 해결하기 ... 294 11.7 설정 관리 도구 ... 295 cfengine: 컴퓨터 면역 시스템 ... 295 LCFG: 대규모 설정 시스템 ... 296 Arusha 프로젝트(ARK) ... 296 템플릿 트리 2: cfengine 도우미 ... 297 DMTF/CIM: 공통 정보 모델 ... 297 11.8 NFS로 소프트웨어 공유 ... 298 패키지 이름 공간 ... 299 의존성 관리 ... 300 래퍼 스크립트 ... 300 구현 도구 ... 301 11.9 추천 소프트웨어 ... 301 11.10 참고 문헌 ... 303 11.11 연습 문제 ... 304 2부 네트워킹 ... 305 12장 TCP/IP 네트워킹 ... 307 12.1 TCP/IP와 인터넷 ... 308 개괄적인 역사 ... 308 오늘날 인터넷은 어떻게 관리되나 ... 309 네트워크 표준과 문서 ... 310 12.2 네트워킹 로드맵 ... 311 12.3 패킷과 캡슐화 ... 313 링크 계층 ... 314 패킷 주소 표시 ... 316 포트 ... 318 주소 종류 ... 318 12.4 IP 주소: 시시콜콜한 얘기 ... 318 IP 주소 클래스 ... 319 IP 주소 재앙 ... 323 CIDR: 클래스가 없는 도메인 내 라우팅 ... 324 주소 할당 ... 326 사설 주소와 NAT ... 327 IPv6 주소 체계 ... 329 12.5 라우팅 ... 331 라우팅 테이블 ... 332 ICMP 방향 전환 ... 333 12.6 ARP: 주소 결정 프로토콜 ... 334 12.7 네트워크에 컴퓨터 추가하기 ... 336 호스트명과 IP 주소 할당 ... 337 ifconfig: 네트워크 인터페이스 설정하기 ... 338 mii-tool: 자동 협상과 그 외 매체별 옵션 설정하기 ... 341 route: 정적 경로 설정 ... 342 기본 라우팅 경로 ... 344 DNS 설정 ... 345 리눅스 네트워크 스택 ... 346 12.8 배포판별 네트워크 설정 ... 347 레드햇과 페도라를 위한 네트워크 설정 ... 347 수세용 네트워크 설정 ... 349 데비안과 우분투용 네트워크 설정 ... 350 12.9 12.9 DHCP: 동적 호스트 설정 프로토콜 ... 351 DHCP 소프트웨어 ... 352 DHCP 동작 원리 ... 353 ISC에서 만든 DHCP 서버 ... 353 12.10 동적 재설정과 튜닝 ... 355 12.11 보안 문제 ... 357 IP 포워딩 ... 357 ICMP 리다이렉트 ... 358 소스 라우팅 ... 358 ping과 다른 형태로 방향성 있는 브로드캐스트를 브로드캐스트하기 ... 358 IP 스푸핑 ... 359 호스트 기반 방화벽 ... 359 가상 사설 네트워크 ... 360 보안 관련 커널 변수 ... 360 12.12 리눅스 NAT ... 361 12.13 PPP: 점-대-점 프로토콜 ... 361 PPP 성능 문제에 대한 이야기 ... 362 PPP로 네트워크에 연결하기 ... 363 호스트가 PPP를 사용할 수 있게 만들기 ... 363 PPP 링크 조절하기 ... 363 주소 할당하기 ... 364 라우팅 ... 364 보안 확인하기 ... 364 chat 스크립트 사용하기 ... 365 리눅스 PPP 설정하기 ... 365 12.14 리눅스 네트워킹 쿼크 ... 373 12.15 참고 문헌 ... 374 12.16 연습문제 ... 376 13장 라우팅 ... 378 13.1 패킷 포워딩: 자세히 보기 ... 379 13.2 라우팅 데몬과 라우팅 프로토콜 ... 382 거리-벡터 프로토콜 ... 382 링크-상태 프로토콜 ... 383 비용 척도 ... 384 내부 프로토콜과 외부 프로토콜 ... 385 13.3 프로토콜 총정리 ... 385 RIP: Routing Information Protocol ... 385 RIP-2: Routing Information Protocol, version 2 ... 386 OSPF: Open Shortest Path First ... 387 IGRP와 EIGRP: Interior Gateway Routing Protocol ... 387 IS-IS: ISO 표준 ... 387 MOSPF, DVMRP, PIM: 멀티캐스트 라우팅 프로토콜 ... 388 라우터 탐색 프로토콜 ... 388 13.4 routed: RIP 네가 문제야 ... 388 13.5 gated: 뒤안길로 사라지다 ... 389 13.6 라우팅 전략 선택 기준 ... 390 13.7 시스코 라우터 ... 391 13.8 참고 문헌 ... 394 13.9 연습문제 ... 395 14장 네트워크 하드웨어 ... 397 14.1 LAN, WAN, MAN ... 398 14.2 이더넷: 일반적인 LAN ... 398 이더넷은 어떻게 동작하는가 ... 400 이더넷 토폴로지 ... 400 UTP ... 401 이더넷 간 연결과 확장 ... 404 14.3 무선: 유목민의 LAN ... 407 무선 보안 ... 408 무선 스위치 ... 409 14.4 FDDI: 실망스럽고 비싸며 오래된 LAN ... 409 14.5 ATM: 약속된(그러나 좌절된) LAN ... 411 16.6 프레임 릴레이: 희생적인 WAN ... 412 14.7 ISDN: 토착 WAN ... 412 14.8 DSL과 케이블 모뎀: 일반인들의 WAN ... 413 14.9 네트워크 전망 ... 414 14.10 네트워크 테스트와 디버깅 ... 415 14.11 건물 배선 ... 416 UTP 케이블 옵션 ... 416 사무실로 연결 ... 416 배선 표준 ... 417 14.12 네트워크 디자인 쟁점 ... 418 네트워크 구조와 건물 구조 ... 418 기존 네트워크 ... 419 확장 ... 419 혼잡 ... 419 유지 보수와 문서화 ... 420 14.13 관리 쟁점 ... 420 14.14 추천 업체 ... 421 케이블과 커넥터 ... 421 테스트 장비 ... 422 라우터/스위치 ... 422 14.15 참고 문헌 ... 422 14.16 연습문제 ... 423 15장 DNS: 도메인 네임 시스템 ... 424 15.1 성질 급한 사람들을 위한 DNS: 장비 추가하기 ... 425 15.2 DNS의 역사 ... 427 BIND 구현 ... 427 기타 DNS 시스템 ... 428 15.3 DNS가 필요한 사람 ... 429 15.4 DNS 이름 공간 ... 430 도메인 관리자 ... 433 도메인명 선택 ... 434 도메인 팽창 ... 434 차상위 도메인명 등록 ... 435 하위 도메인 생성 ... 435 15.5 DNS 작동 방식 ... 436 위임 ... 436 캐시와 효율성 ... 437 확장 DNS 프로토콜 ... 438 15.6 DNS의 새로운 기능 ... 439 15.7 DNS 데이터베이스 ... 442 자원 레코드 ... 442 SOA 레코드 ... 445 NS 레코드 ... 448 A 레코드 ... 449 PTR 레코드 ... 450 MX 레코드 ... 451 CNAME 레코드 ... 453 CNAME을 이용한 변칙 ... 454 LOC 레코드 ... 456 SRV 레코드 ... 457 TXT 레코드 ... 458 IPv6 자원 레코드 ... 459 IPv6 정방향 레코드 ... 460 IPv6 역방향 레코드 ... 460 보안 관련 레코드 ... 460 존 파일이 지원하는 명령 ... 461 연결 레코드: 존 사이를 연결 ... 462 15.8 BIND 소프트웨어 ... 465 BIND 버전 ... 465 사용 버전 확인 ... 466 BIND 구성 요소 ... 468 named: BIND 네임 서버 ... 468 공인 서버와 캐시 전용 서버 ... 469 재귀적 서버와 비재귀적 서버 ... 470 리졸버 라이브러리 ... 471 DNS의 셸 인터페이스 ... 472 15.9 DNS 환경 설계 ... 472 이름 공간 관리 ... 472 공인 서버 ... 473 캐시 서버 ... 474 보안 ... 475 종합 ... 475 DNS/BIND 작업의 분류 ... 475 15.10 BIND 클라이언트 관련 문제 ... 476 DNS 클라이언트 설정 ... 476 클라이언트 테스트 ... 477 나머지 시스템에 미치는 영향 ... 478 15.11 BIND 서버 설정 ... 478 하드웨어 요구 사항 ... 478 설정 파일 ... 479 include 구문 ... 481 options 구문 ... 481 acl 구문 ... 488 key 구문 ... 489 trusted-keys 구문 ... 489 server 구문 ... 490 masters 구문 ... 491 logging 구문 ... 492 zone 구문 ... 492 controls 구문 ... 496 DNS 분리와 view 구문 ... 498 15.12 BIND 설정 예제 ... 500 로컬 호스트 존 ... 500 작은 보안회사 ... 501 isc.org 인터넷 시스템 컨소시엄 ... 506 15.13 named 시작 ... 508 15.14 존 파일 갱신 ... 509 존 전송 ... 509 동적 갱신 ... 511 15.15 보안 문제 ... 513 접근 제한 목록 다시보기 ... 514 named 제한 ... 516 TSIG와 TKEY를 이용한 서버 간 통신 보안 ... 517 DNSSEC ... 520 부정적 응답 ... 528 마이크로소프트와 DNS ... 528 15.16 테스트와 디버깅 ... 531 로그 기록 ... 531 로그 설정 예제 ... 536 디버그 수준 ... 537 rndc를 이용한 디버그 ... 537 BIND 통계 ... 539 dig를 이용한 디버그 ... 540 불완전한 위임 ... 542 doc: 도메인 은폐 제어 도구 ... 543 다른 DNS 상태 확인 도구 ... 545 성능 문제 ... 545 15.17 배포판별 주의 사항 ... 546 15.18 참고 문헌 ... 549 메일링 리스트와 뉴스그룹 ... 549 책과 기타 문서 ... 549 온라인 문서 ... 550 RFC 문서 ... 550 15.19 연습문제 ... 550 16장 네트워크 파일 시스템 ... 552 16.1 NFS 개요 ... 553 NFS 프로토콜 버전 ... 553 전송 프로토콜 선택 ... 554 파일 잠금 ... 554 디스크 할당 ... 555 쿠키와 무상태 마운트 ... 555 공유 파일 시스템 명명 규칙 ... 555 NFS와 보안 ... 556 루트 제어와 nobody 계정 ... 557 16.2 서버 측 NFS ... 558 exports 파일 ... 559 nfsd: 파일 서?