LINUX Administration A Beginner's Guide 2/e : LINUX 관리자 가이드 (CD1)
Steve Shah지음/이종우,류연승옮김|사이텍미디어|2001년08월|ISBN 8955507534


예전부터 제대로 정리하려고 했다. 이제야 완독이란 단어를 쓸 수 있다. 다보긴 했고, 현재 실제 사용해봤으니 하지만, 컴퓨터 서적이란게 참고서 경향이 강하다. 명령어란 것이 잊기 쉽고 그래서 후기를 쓴다는 것이 애매하기도 하다. 거기에 나 스스로 치열히 산다는 마음만 가지고 버티지 못하는 측면도 강하다. 열심히 적고 소감을 적고 비평도 받고 해야 된다는 생각을 했기...

이 페이지에 아주 오래 책 적기를 못해서 오늘에야 ... 이번주 토/일은 열심히 읽은 책의 머리속 정리해야지! 그건 그렇고, 이제 LINUX 책하면 steve Shah 를 유심히 봐야겠다. 물론, SE관련해서... 프로그래밍 관련한 책도 한번 봐야되는데 ... 시간도 없고, 열정도 줄고 ... 이크 열심히 살아보자구!

저자 홈피에서 공수 했다. 한글판이 있는 거 저자는 알고 있더라.
목차만 봐도 알차다! RedHat 7 버전인데도 현재에도 참고할 만 하다.
번역도 꽤 잘되어 있다. -> 읽어서 이해가 되니까 *_+
예전엔 거의 개념서로 정리했는데 이번엔 실용서로 참고중이다.

Part 1: Installing Linux As a Server
1.Technical Summary of Linux Distributions and NT
- 유닉스 고안자들은 사용자에게 제공하는 인터페이스가 핵심 운영체제와는 완전히 독립적이어야 된다고 믿었다
- X 원도 내에는 응용 프로그램들이 그래픽 하드웨어와 통신할 수 있는 규약들이 정의되어 있다.
- 외양의 제어는 window manager 라고 하는 외부 프로그램이 수행.

2.Installing Linux in a Server Configuration
- 제대로 설치 되지 않았을때, Douglas Adams 가 이런 말을 했다는데 머리속에 많이 남음 "Don't Panic" => 커널 컴파일해서 리부팅하고 나니 Kernel Panic 인가 하는 단어보고서 *_*
- http://www.thelinuxgurus.org/
- Authentication 설정 - /etc/shadow 에 대해 설명한다. NIS 서버에 대해서도...이야기 하고 있다.

3.GNOME(GNU Network Object Model Environment) and KDE(K Desktop Environment)

4.Installing Software ( http://www.rpm.org )
- http://www.rpmfind.net
- grep -i (대소문자 구분 없이 검색)

1) 패키지 설정 - ./configure --help
2) 패키지 컴파일 - make
3) 패키지 설치 - make install

Part 2:Single Host Administration
5.Managing Users
- /etc/profile => /home/.bash_profile => /home/.bashrc => /etc/bashrc
- UID, GID 그리고 SetUID 비트 4/ SetGID 비트 2
- PAM (Pluggable Authentication Modules)
응용 프로그램이 패스워드 파일을 읽는 것이 아니라 PAM에게 인증을 요청하자는 것.

http://www.kernel.org/pub/linux/libs/pam/

[root@cow security]# ls /lib/security 에 적절한 모듈이 존재
pam_access.so pam_krb5afs.so pam_rhosts_auth.so pam_unix_acct.so
pam_chroot.so pam_lastlog.so pam_rootok.so pam_unix_auth.so
pam_console.so pam_ldap.so pam_securetty.so pam_unix_passwd.so
pam_cracklib.so pam_limits.so pam_shells.so pam_unix_session.so
pam_deny.so pam_listfile.so pam_smb_auth.so pam_userdb.so
pam_env.so pam_localuser.so pam_smbpass.so pam_warn.so
pam_filter pam_mail.so pam_stack.so pam_wheel.so
pam_filter.so pam_mkhomedir.so pam_stress.so pam_winbind.so
pam_ftp.so pam_motd.so pam_tally.so pam_xauth.so
pam_group.so pam_nologin.so pam_time.so
pam_issue.so pam_permit.so pam_timestamp.so
pam_krb5.so pam_pwdb.so pam_unix.so

[root@cow security]# rpm -qa | grep -i "pam_*"
pam_smb-1.1.6-7
pam-devel-0.75-48
pam-0.75-48
pam_krb5-1.60-1
vsftpd 파일을 예로 들어 정리하면.
module_type control_flag module_path arguments

#%PAM-1.0
auth required /lib/security/pam_listfile.so item=user sense=allow file=/etc/vsftpd.ftpusers onerr=succeed
auth required /lib/security/pam_pwdb.so shadow nullok
auth required /lib/security/pam_shells.so
account required /lib/security/pam_pwdb.so
session required /lib/security/pam_pwdb.so

1] module_type
a] auth
b] account
c] session
d] password
2] control_flag
a] Required
b] Requisite
c] Sufficient
d] Optional
3] module_path - 인증작업을 수행하는 모듈의 실제 디렉토리 경로를 명시한다.
4] arguments
KIPA에서 강의 들을때 vipw, vigr - edit the password or group files 이런 명령어도 만났다.

6.The Command Line
- rsh 설정=> .rhosts ( host_to_trust your_username )
- xhost 에 대해 완죤히 이해...
super] 화면을 보여주는 곳에서 xhost +클라이언트 주소 (or 호스트네임(local network 일때))

cow] 클라이언트에서 ssh 로 서버를 접속
=> DISPLAY="아이피:0" ; export DISPLAY 하고나서
firefox를 실행해보니 super에서 실행되는군요!
X 에서는 개념이 혼돈 스럽겠다. 화면 디스플레이 해주는 곳이 서버라는 것.
(이 개념 맞죠? ^^')
- Linux In a Nutshell 을 추천하고 있군요!

7.Booting and Shutting Down

- lilo로 되어 있는게 ... grub 사용하는데 ...
- 커널 적재
커널 파일의 앞부분에 CPU를 보호모드로 만들기 위한 코드가 있어서 이 코드가 실행되고 나면 메모리 접근의 한계가 제거되기 때문에 커널 나머지 부분의 압축을 풀 수 있게 된다.

- 커널 실행
=/ 루트 파일 시스템을 마운트 할 수 있다.
=init 실행 pid 는 언제나 1번 /etc/inittab을 읽어 runlevel 읽어서 initdefault 값에 따라 실행
런레벨:0 정지/1 단일사용자/2 다중사용자NFS없음/3 완전한다중사용자/5 x원도 로그임/6리부팅

=rc 스크립트 /etc/rc.d/ 디렉토리의 서브디렉토리 /etc/rc.d/rc3.d/
각 실행-레벨의 디렉토리에는 /etc/rc.d/init.d 스크립트를 가리키는 심볼릭 링크 생성.
이때 심볼링 링크 앞에 데몬이 시작되는 경우엔 S, 저지할때는 K 그리고 숫자도 연결되는데,
낮은 숫자가 높은 숫자보다 먼저 실행된다. /etc/rc.d/rc3.d/S50inet 이 /etc/rc.d/rc3.d/S55named보다 먼저 실행된다.

[root@cow rc3.d]# ll
합계 0
lrwxrwxrwx 1 root root 19 9월 22 12:07 K05saslauthd -> ../init.d/saslauthd
lrwxrwxrwx 1 root root 15 9월 22 12:11 K15httpd -> ../init.d/httpd
lrwxrwxrwx 1 root root 13 9월 22 12:10 K20nfs -> ../init.d/nfs
lrwxrwxrwx 1 root root 14 9월 22 12:08 K24irda -> ../init.d/irda
lrwxrwxrwx 1 root root 18 9월 22 17:17 K30sendmail -> ../init.d/sendmail
lrwxrwxrwx 1 root root 13 9월 22 12:11 K35smb -> ../init.d/smb
lrwxrwxrwx 1 root root 17 9월 22 12:11 K35winbind -> ../init.d/winbind
lrwxrwxrwx 1 root root 15 9월 22 12:13 K45named -> ../init.d/named
lrwxrwxrwx 1 root root 15 9월 22 12:30 K50snmpd -> ../init.d/snmpd
lrwxrwxrwx 1 root root 19 9월 22 12:30 K50snmptrapd -> ../init.d/snmptrapd
lrwxrwxrwx 1 root root 15 9월 22 17:17 K75netfs -> ../init.d/netfs
lrwxrwxrwx 1 root root 14 9월 22 17:17 K91isdn -> ../init.d/isdn
lrwxrwxrwx 1 root root 19 9월 22 12:39 K95firstboot -> ../init.d/firstboot
lrwxrwxrwx 1 root root 15 9월 22 12:07 S05kudzu -> ../init.d/kudzu
lrwxrwxrwx 1 root root 18 9월 22 12:08 S08iptables -> ../init.d/iptables
lrwxrwxrwx 1 root root 17 9월 22 12:07 S10network -> ../init.d/network
lrwxrwxrwx 1 root root 16 9월 22 12:07 S12syslog -> ../init.d/syslog
lrwxrwxrwx 1 root root 17 9월 22 12:10 S13portmap -> ../init.d/portmap
lrwxrwxrwx 1 root root 17 9월 22 12:10 S14nfslock -> ../init.d/nfslock
lrwxrwxrwx 1 root root 18 9월 22 12:08 S17keytable -> ../init.d/keytable
lrwxrwxrwx 1 root root 16 9월 22 12:07 S20random -> ../init.d/random
lrwxrwxrwx 1 root root 16 9월 22 12:07 S24pcmcia -> ../init.d/pcmcia
lrwxrwxrwx 1 root root 14 9월 22 12:08 S26apmd -> ../init.d/apmd
lrwxrwxrwx 1 root root 16 9월 22 12:08 S28autofs -> ../init.d/autofs
lrwxrwxrwx 1 root root 14 9월 22 12:10 S55sshd -> ../init.d/sshd
lrwxrwxrwx 1 root root 20 9월 22 12:07 S56rawdevices -> ../init.d/rawdevices
lrwxrwxrwx 1 root root 16 9월 22 12:13 S56xinetd -> ../init.d/xinetd
lrwxrwxrwx 1 root root 14 9월 22 12:54 S58ntpd -> ../init.d/ntpd
lrwxrwxrwx 1 root root 13 9월 22 12:08 S85gpm -> ../init.d/gpm
lrwxrwxrwx 1 root root 15 9월 22 12:10 S90crond -> ../init.d/crond
lrwxrwxrwx 1 root root 14 9월 22 12:13 S90cups -> ../init.d/cups
lrwxrwxrwx 1 root root 13 9월 22 12:12 S90xfs -> ../init.d/xfs
lrwxrwxrwx 1 root root 17 9월 22 12:10 S95anacron -> ../init.d/anacron
lrwxrwxrwx 1 root root 13 9월 22 12:08 S95atd -> ../init.d/atd
lrwxrwxrwx 1 root root 15 9월 22 12:10 S97rhnsd -> ../init.d/rhnsd
lrwxrwxrwx 1 root root 11 9월 22 12:07 S99local -> ../rc.local

- RC 스크립트 추가하는 법
= 변경하는 것이 부트시에만 필요한 사항이고 변경할 사항이 그리 많지 않으면 rc.local 을 수정.
또는

= 추가 내용이 복잡하고 프로세스를 중지할 경우가 있다면 /etc/rc.d/init.d/ 디렉토리에 스크립트 추가. start 와 stop인자를 받을 수 있게 해야되고.. ( 런레벨 3에만 적용한다고 가정하고 )

a) carpal 란 스크립트를 만들어서 /etc/rc.d/init.d 에 저장
b)
cd /etc/rc.d/rc3.d/
ln -s ../init.d/carpal S99carpal (시작할 때는 가장 늦게 실행)
cd /etc/rc.d/rc6.d/
ln -s ../init.d/carpal K00carpal (종료할 때는 가장 빨리 정지)

8.File Systems
- i node
- dmesg | more
- /usr/sbin/quotacheck
- edquota
=> 웹호스팅이나 서버호스팅을 하진 않을 것이므로 넘어감...

물론 SAN 이나 NAS 이런 것에 관심이 가긴 했으나... 역시나 현업에서 내가 해볼 경우가 거의 드물 것이므로 ...

9.Core System Services
- init 서비스
/etc/inetd.conf 는 없더라. redhat 9.0에선 그리고 /usr/sbin/tcpd 로 실행될 경우 hosts.allow와 hosts.deny 에 영향 ... 우띠 여기서 tcp wrapper가 마음에 안든다.

pam 은 대충이해가 되고, iptables만 보면 되는데 tcpd는 왜 나오는 거냐구 ~~ 통사적으로 이해하면 될 터인데 별루 흥미 없다. SE-> 보안관리자로 넘어가는 건 재미없어~~

- xinetd
xinetd.conf에 설정하는 것도 쉽고 .. 물론, 나중에 xml로 바뀌고, 에디터로 고치면 좋겠다만 ... 현재로서도 충분이 되니까...

- SYSLOGD 드뎌 나왔다. 이것도 해둬야 되지. cron 과 연결해야겠지!!
/etc/syslog.conf 에서

- CRON -cron 지정한 날짜나 시간에 실행 ( 파일을 수정하는 방식이 아니라 ...
=crontab 파일 조사... 허가권 cron.allow cron.deny 파일로 결정
Minte Hour Day Month DayOfWeek(일요일:0, 월요일:1) Command

10.Compiling the Linux Kernel
- http://blog.naver.com/iarchitect/100017358861
- Alessandro Rubini 가 쓴 Linux Device Drivers 를 참고하라고 되어있네요~~

11.Securing an Individual Server
- netstat: TCP(-t) UDP(-u) 모든 포트 (-a) ip로 부터 호스트명을 구하지 말것 (-n) 커널의 라우팅 테이블 출력
- MRTG ( Multi-Router Traffic Grapher)
- TripWire - 시스템의 모든 화일에 MD5 체크섬을 만들고 ... 비교하는 것.
- SATAN (System Administration Tool for Analyzing Networks) - Dan Farmer

http://ftp.cert.org/pub/tools에서 구할 수 있음

- CERT ( computer Emergency Response Team) http://www.cert.org
- BugTraq http://www.securityfocus.com/forums/bugtraq/faq.html
- http://www.rootshell.com
- http://www.securityfocus.com
: Security through obscurity/ social engineering / physical security

Part 3: Internet Services
12.DNS
13.FTP
14.Setting Up Your Web Server Using Apache
15.SMTP
16.Post Office Protocol (POP)
17.The Secure Shell (SSH)

- 최신버전이 나왔구만!! 4.x 이군!

Part 4: Intranet Services
18.Network File System (NFS)
19.Network Information Service (NIS)
20.Samba
21.Printing
22.DHCP
23.Backups

Part 5: Advanced Linux Networking
24. TCP/IP for System Administration
- 왼쪽 CCNA basic에 배운 내용이다.




25.Network Configuration
- http://blog.naver.com/iarchitect/100016660565
- 강의 들으며 따라한 내용이 나와서 쉽게 넘어갔다.

26.Advanced Linux Networking (how to use ipchains, etc.)
- http://blog.naver.com/iarchitect/100017407330 여기서 정리할 것임
- ipchains의 커널 코드는 이해하기 어렵게 작성되어 있어서 iptables 를 이용. 간단히 말해서 패킷 필터링 도구다.

27.The /proc File System
-응용프로그램과 커널이 정보를 주고 받는 전통적인 방법은 system call
-커널과 응용 프로그램이 쉽게 통신할 수 있도록 도와주는 기능이 /proc 파일 시스템.
- 디렉토리 엔트리만 존재할 뿐 실제 파일이 아니며 커널 정보를 읽거나 커널 정보를 갱신하기 위해사용되는 진입점 역할을 할 뿐이다.
- 추상적 커널 접근의 수단

cat /proc/cpuinfo
cat /proc/sys/net/ipv4/ip_forward
/proc 노드의 값을 변경 재부팅후 유지 안됨

따라서 /etc/rc.d/rc.local 기동 스크립트에 ... 추가해둠.

- /proc에 보이는 단순한 숫자 구성 - PID
- /proc을 사용한 보고서 작성 및 설정하기

SYN Flood 막기
- echo "1" > /proc/sys/net/ipv4/tcp_syncookies

등등 ...

Appendices
A.Programming Languages that Accompany Red Hat Linux
B.Getting the Usual Done

추천 사이트
http://www.linuxapps.com
http://www.freshmeat.net
http://www.kde.org/apphomepages.html
http://www.linuxjournal.com
http://www.linuxsoftware.org
http://www.linuxberg.com
http://www.rpmfind.net
Posted by iarchitect