IT_Server/Linux

리눅스 설정파일 정리

JJun ™ 2007. 2. 16. 09:31
IBM 소프트웨어 엔지니어
2001년 12월
이 글은 멀티 유저/멀티태스킹 환경에서 사용자 권한, 시스템 애플리케이션, 데몬, 서비스, 기타 관리 태스크 등을 제어하는 리눅스 시스템의 설정 파일을 설명하고 있다. 사용자 계정 관리, 디스크 할당, 이메일 및 뉴스그룹 관리, 커널 매개변수 설정 등이 태스크에 포함된다.

Introduction
모든 리눅스 프로그램은 특정 연산을 수행하기 위해서 CPU가 실행하는 opcode 리스트를 갖고 있는 실행 파일이다. 예를 들어, ls 명령어는 /bin/ls 파일이 제공한다. 이 파일은 현재 디렉토리에 있는 파일을 스크린상에 디스플레이 하는 데 필요한 머신 인스트럭션 리스트를 갖고 있다. 거의 모든 프로그램은 각자가 선호하는 대로 커스터마이징 할 수 있고 설정 파일 변경도 가능하다.

리눅스용 표준 설정 파일 포맷이 있는가?
한 마디로 말해서, 없다! 리눅스 초보 사용자들이라면 각각의 설정 파일들이 하나의 도전처럼 느껴질 것이다. 좌절감도 느낄 것이다. 리눅스에서 각 프로그래머는 자유롭게 원하는 대로 설정 파일 포맷을 선택할 수 있다. 포맷 옵션은 /etc/shells 파일에서부터 Apache의 복잡한 /etc/httpd.conf 파일 까지 다양하다.

시스템 설정 파일이란 무엇인가?
커널 그 자체는 "프로그램"이다. 커널에 설정 파일이 필요한 이유는? 커널은 시스템의 사용자와 그룹의 리스트를 알고 있어야 한다. 파일 권한도 관리해야 한다. 이러한 파일들은 프로그램에 의해 읽히지 않고 시스템 라이브러리의 함수에 의해 읽혀지며 커널에 의해 사용된다는 것에 주목하라. 예를 들어, 사용자의 (암호화된) 패스워드를 필요로 하는 프로그램은 /etc/passwd 파일을 열어서는 안된다. 대신, 시스템 라이브러리 함수인 getpw()를 호출해야 한다. 이러한 종류의 함수는 시스템 호출(system call)로 알려져 있다. /etc/passwd 파일을 열고 요청된 사용자의 패스워드를 찾는 것은 커널의 몫이다.

Red Hat Linux 시스템의 설정 파일 대부분은 /etc 디렉토리에 있다. 설정 파일들은 다음과 같은 카테고리로 광범위하게 구분된다:

액세스 파일

/etc/host.conf 네트워크 도메인 서버에게 호스트네임을 찾는 방법을 알려준다.
/etc/hosts 알려져 있는 호스트의 리스트를 포함하고 있다(로컬 네트워크 에서). 시스템의 IP가 동적으로 생성되지 않을 경우 사용될 수 있다.
/etc/hosts.allow hosts_access와 같은 Man page. tcpd에 의해 읽힌다.
/etc/hosts.deny hosts_access와 같은 Man page. tcpd에 의해 읽힌다.

부팅과 로그인/로그아웃

/etc/issue & /etc/issue.net 이 파일들은 mingetty에 의해 읽혀져서 터미널 (issue) 또는 텔넷 세션(issue.net)을 통해 연결하는 사용자에게 "welcome" 스트링을 디스플레이 한다. Red Hat 릴리스 넘버, 이름, 커널 ID 등을 설명하는 라인이 포함되어 있다. rc.local에 의해 사용된다.
/etc/redhat-release Red Hat 릴리스 넘버와 이름을 설명하는 줄이 포함되어 있다. rc.local에 의해 사용된다.
/etc/rc.d/rc 인자로서 패스된 레벨과 함께 모든 런레벨을 위해 실행된다. 예를 들어, Graphics 모드 (X-Server)에서 머신을 부팅하기 위해서는 명령어 라인에서 다음의 명령어를 실행시켜야 한다: init 5. 런레벨 5는 그래픽 모드에서 시스템을 시작한다.
/etc/rc.d/rc.local 공식적인 것인 아니다. rc나 rc.sysinit, 또는 /etc/inittab로 부터 호출된다.
/etc/rc.d/rc.sysinit 모든 런레벨들을 위해 실행되는 첫 번째 스크립트.
/etc/rc.d/rc/rcX.d rc로 부터 실행되는 스크립트(X 는 1에서 5까지의 어떤 숫자도 될 수 있다). 이러한 디렉토리들은 "run-level" 스펙의 디렉토리이다. 시스템이 시작하면 이것은 런레벨이 초기화되었는지를 확인하고 해당 런레벨에 대한 특정 디렉토리에 있는 시작 스크립트를 호출한다.

파일시스템
커널은, 사용된 인터럽트, 초기화된 디바이스, 메모리 통계 같은 시스템 매개변수들을 결정하는 데 유용하게 사용되는 데이터 구조들을 디스플레이 하는 인터페이스를 제공한다. 이 인터페이스는 /proc filesystem 으로 알려진 더미 파일시스템을 제외하고는 개별적으로 제공된다. /proc/modules 파일은 시스템에서 포팅된 모듈을 목록화한다. 이 정보는 명령에 의해 읽혀서 인간이 읽을 수 있는 포맷으로 디스플레이 한다. 같은 방식으로, 아래 테이블에 지정된 mtab 파일은 /proc/mount 파일을 읽는다. 이 파일은 현재 마운트 된 파일 시스템을 포함하고 있다.

/etc/mtab /proc/mount 파일이 변경되면 이것도 지속적으로 변한다. 다시말해서, 파일시스템이 마운트 또는 언마운트 될 때 변경사항이 이 파일에 즉시 반영된다는 것을 의미한다.
/etc/fstab 컴퓨터에 현재 마운트 가능한 파일시스템을 목록을 보여준다. 컴퓨터가 부팅되면 이것은 mount -a 명령어를 실행하기 때문에 중요하다.
/etc/mtools.conf DOS 타입의 파일시스템에서 모든 연산 (mkdir, copy, format 등)에 대한 설정.

시스템 관리

/etc/group 지정된 그룹에 포함된 유효한 그룹 이름과 사용자가 포함되어 있다. 다중 태스크를 수행하고 있다면 단일 사용자는 한 그룹 이상 있을 수 있다.
/etc/nologin /etc/nologin 파일이 존재한다면, login(1)은 root에게만 액세스를 허용한다. 다른 사용자들은 파일의 콘텐츠에 보여지고 로그인은 거부된다.
etc/passwd "man passwd"를 참조하라. 패스워드를 포함하여 사용자 계정 정보를 보유하고 있다.
/etc/rpmrc rpm 명령어 설정. 모든 rpm 명령행 옵션은 파일에 모두 세팅되어 어떤 rpm 명령어라도 시스템에서 실행될 때 모든 옵션이 전역으로 적용될 수 있도록 한다.
/etc/securetty root의 로그인이 허용된 tty 라인의 디바이스 이름들을 포함하고 있다.
/etc/usertty
/etc/shadow
사용자 계정과 패스워드에 대한 암호화된 패스워드 정보를 포함하고 있다. 다음의 필드들이 포함된다:
  • 로그인 이름
  • 암호화된 패스워드
  • 패스워드가 마지막으로 변경된 1970년 1월 1일 이후의 날들
  • 패스워드가 변경되기 전의 날들
  • 패스워드가 변경된 후의 날들
  • 패스워드가 종료되기 전의 날들
  • 계정을 사용할 수 없도록 패스워드가 종료된 후의 날들
  • 계정을 사용할 수 없는 1970년 1월 1일 이후의 날들
/etc/shells 시스템에 사용할 수 있는 쉘 리스트를 보유하고 있다.
/etc/motd 데이 메시지(day message); 관리자가 리눅스 서버의 모든 사용자들에게 특정 메시지를 전달할 때 사용됨.

네트워킹

/etc/gated.conf gated를 위한 설정. gated 데몬에 의해서만 사용된다.
/etc/gated.version gated 데몬의 버전 넘버를 포함하고 있다.
/etc/gateway routed 데몬에 의해 선택적으로 사용된다.
/etc/networks 네트워크에서 머신이 연결된 곳 까지 액세스가 가능한 네트워크의 이름과 주소 목록을 보여준다. 명령어에 의해 사용된다. 네트워크 용 이름의 사용을 허용한다.
/etc/protocols 현재 사용가능한 프로토콜 목록을 보여준다. NAG (Network Administrators Guide)과 man page를 참조하라.
C 인터페이스는 getprotoent이다. 결코 변경해서는 안된다.
/etc/resolv.conf 프로그램이 IP 어드레스 해독을 요청할 때 커널에게 어떤 네임 서버가 쿼리되어야 하는지를 말해준다.
/etc/rpc NFS 호출에 사용될 수 있는 RPC와 원격 파일시스템 마운팅을 위한 인스트럭션 및 규칙이 포함되어 있다.
/etc/exports 익스포트 된 파일 시스템 (NFS)과 파일시스템 권한.
/etc/services 넘버/프로토콜을 포팅하기 위해 네트워크 서비스 이름을 변환한다. inetd, telnet, tcpdump, 기타 프로그램에 의해 읽힌다. C 액세스 루틴이 있다.
/etc/inetd.conf inetd용 config 파일. inetd man page를 참조하라. inetd가 데몬과 기타 서비스 제공자를 관리하는데 필요한 각 네트워크 서비스용 엔트리를 보유하고 있다. 서비스는 실행되겠지만 /etc/services에 있는 주석을 제거하여 실행중일 때에도 사용할 수 없도록 한다. Format: <service_name> <sock_type> <proto> <flags> <user> <server_path> <args>
/etc/sendmail.cf 메일 프로그램인 sendmail의 설정 파일.
/etc/sysconfig/network NETWORKING=yes 또는 no를 나타낸다. rc.sysinit에 의해 읽힌다.
/etc/sysconfig/network-scripts/if* Red Hat 네트워크 설정 스크립트.

시스템 명령어
시스템 명령어는 시스템을 관리하고 모든 작업을 적절히 수행할 수 있도록 한다. login 또는 bash와 같은 프로그램들은 모두 시스템 명령어이다. 그들과 연관된 파일들은 그래서 특별히 중요한 것이다. 다음은 사용자들과 관리자들이 관심을 가지고 있는 파일 목록들이다.

/etc/lilo.conf 시스템의 디폴트 부팅 명령어 라인 매개변수와 부팅에 사용되는 다양한 이미지를 포함하고 있다. LILO 프롬프트에서 Tab을 누르면 리스트를 볼 수 있다.
/etc/logrotate.conf /var/log 디렉토리의 로그 파일을 보관하고 있다.
/etc/identd.conf Identd는 RFC 1413 문서에 지정되어 있는 표준 IDENT 사용자 식별 프로토콜에 제안된 TCP/IP를 구현하는 서버이다. identd는 특정 TCP/IP 커넥션을 보고 커넥션을 소유한 프로세스의 사용자 이름을 리턴하면서 실행된다. 사용자 이름 대신에 다른 정보를 리턴하는 경우도 있다. identd man page를 참조하라.
/etc/ld.so.conf Dynamic Linker용 설정.
/etc/inittab 유닉스의 첫 번째 설정 파일이다. UNIX 머신이 켜진 후에 시작하는 첫 번째 프로그램은 init이다. inittab으로 인해서 무엇을 시작해야 할 지를 안다. 런레벨 변경 때 init에 의해 읽히고 메인 프로세스의 시작을 제어한다.
/etc/termcap 모든 가능한 터미널 타입과 기능을 포함하고 있는 데이터베이스.

데몬
데몬은 비대화형(non-interactive) 모드에서 실행하는 프로그램이다. 일반적으로 데몬 태스크는 네트워킹 분야와 관련이 있다: 연결을 기다렸다가 서비스를 제공한다. 웹서버에서 ftp 서버 까지 리눅스에 사용할 수 있는 많은 데몬들이 있다.

리눅스 시스템의 프록시 세팅을 변경하기 위해 수정될 수 있는 lynx.cfg 파일의 일부분이다. 이 세팅은 각각의 쉘에서 lynx를 실행하는 모든 사용자들에게 (디폴트로) 적용된다. 단, 사용자는 --cfg = "mylynx.cfg.을 지정하여 디폴트 설정 파일을 오버라이딩 하지 않아야 한다.

/etc/lynx.cfg의 프록시 세팅

/etc/syslogd.conf syslogd 데몬 용 설정 파일. syslogd는 다른 프로그램에서 시스템으로 오는 메시지를 기록하는 데몬이다.

/etc/httpd.conf
Apache 웹서버 용 설정 파일. /etc에 파일은 존재하지 않는다. /usr/local/httpd/conf/나 /etc/httpd/conf/에 파일이 존재한다. 반드시 Apache 설치를 점검해야 한다.

.h1 proxy
.h2 HTTP_PROXY
.h2 HTTPS_PROXY
.h2 FTP_PROXY
.h2 GOPHER_PROXY
.h2 NEWS_PROXY
.h2 NNTP_PROXY
# Lynx version 2.2 and beyond supports the use of proxy servers that can act as
# firewall gateways and caching servers. They are preferable to the older
# gateway servers. Each protocol used by Lynx can be mapped separately using
# PROTOCOL_proxy environment variables (see Lynx Users Guide). If you have 
# not set them externally, you can set them at run time via this configuration file.
# They will not override external settings. The no_proxy variable can be used
# to inhibit proxying to selected regions of the Web (see below). Note that on
# VMS these proxy variables are set as process logicals rather than symbols, to
# preserve lowercasing, and will outlive the Lynx image.
#
.ex 15
http_proxy:http://proxy3.in.ibm.com/
ftp_proxy:http://proxy3.in.ibm.com/
#http_proxy:http://penguin.in.ibm.com:8080/
#ftp_proxy:http://penguin.in.ibm.com:8080/
.h2 NO_PROXY
# The no_proxy variable can be a comma-separated list of strings defining
# no-proxy zones in the DNS domain name space.  If a tail substring of the
# domain-path for a host matches one of these strings, transactions with that
# node will not be proxied.
.ex
no_proxy:demiurge.in.ibm.com, demiurge

설정 파일 변경하기
설정 파일을 변경할 때, 그 설정을 사용하는 프로그램이 시스템 관리자나 커널에 의해 제어되지 않을 경우 재시작해야 한다. 일반 사용자는 시스템 프로그램이나 데몬을 시작하거나 종료할 권한이 없다.

커널
커널에서 설정 파일을 변경하면 즉시 시스템에 영향을 미친다. 예를 들어, 사용자를 추가하기 위해서 passwd 파일을 변경하면 사용자는 변경된 것을 바로 사용할 수 있다. 또한 리눅스에는 /proc/sys 디렉토리에 튜닝 가능한 커널 매개변수가 있다. 이러한 모든 파일에 대한 쓰기 액세스는 수퍼유저에게만 주어진다; 다른 사용자들은 읽기 전용 액세스만 가능하다. 이 디렉토리에 있는 파일들은 리눅스 커널 소스와 같은 방식으로 구분된다. 이 디렉토리의 모든 파일은 시스템 퍼포먼스를 변경하기 위해 동적으로 수정될 수 있는 커널 데이터 구조를 나타낸다.

Note: 이 파일의 어떤 값을 변경하기 전에 시스템에 치명적인 손상을 피하기 위해 파일에 대한 모든 것을 숙지해야 한다.
/proc/sys/kernel/ 디렉토리의 파일들

파일 이름
설명
threads-max 커널이 실행할 수 있는 최대 태스크의 수.
ctrl-alt-del 1 이면, 키 시퀀스를 눌러 시스템을 재부팅한다.
sysrq 1 이면, Alt-SysRq는 Active 이다.
osrelease 오퍼레이팅 시스템의 릴리스를 디스플레이 한다.
ostype 오퍼레이팅 시스템의 타입을 디스플레이 한다.
hostname 시스템의 호스트 이름.
domainname 시스템이 존재하고 있는 네트워크 도메인.
modprobe 시작할 때 modprobe가 자동으로 실행되어야 하는지와 필요한 모듈을 설정해야 하는지를 결정한다.

데몬과 시스템 프로그램
데몬은 뒤에서 조용히 태스크를 수행하는 프로그램이다. 일반적으로 ftpd (ftp server daemon), telnetd (telnet server daemon), syslogd (system logging daemon) 등이 있다. 어떤 데몬들은 실행중에 설정 파일을 자세하게 관찰하고 이것이 변경될 때 자동적으로 리로드(reload)한다. 하지만 대부분의 데몬들은 자동적으로 리로드 하지 않는다. 설정 파일이 변경되었다는 것과 리로드 해야 한다는 것을 알려야 한다. 서비스 명령어를 사용하는 서비스를 재시작하면 된다.

예를들어, 네트워크 설정을 변경했다면 다음과 같은 것을 만들어야 한다:
service network restart.

Note: 이 서비스들은 일반적으로 /etc/rc.d/init.d/* 디렉토리에 있는 스크립트들이다. 시스템이 부팅될 때 init에 의해 시작된다. 서비스를 재시작 하려면 다음과 같이 한다:
/etc/rc.d/init.d/<script-for-the-service> start | stop | status
시작, 종료, 상태는 이러한 스크립트들이 액션을 수행하는 인풋으로서 취하는 값이다.

사용자 프로그램
사용자 또는 시스템 프로그램은 시작할 때마다 설정 파일을 읽는다. 어떤 시스템 프로그램들은 컴퓨터가 켜질 때 스폰(spawn)되어 /etc/에 있는 설정파일에서 읽혀지는 것에 의존한다. 그래서, 사용자 프로그램이 시작되면 디폴트 설정은 /etc/ 디렉토리에 있는 파일에서 읽힌다. 나중에 사용자는 rc 와 . (dot) 파일을 사용하여 프로그램을 커스터마이징 할 수 있다.

사용자 설정 파일: . (dot) 파일과 rc 파일
지금까지, 프로그램들이 쉽게 설정되는 방법을 살펴보았다. 하지만 /etc/에서 프로그램이 설정되는 방식을 별로 좋아하지 않는 사용자가 있다면? "일반적인" 사용자는 /etc로 가서 설정 파일을 변경할 수 없다; 파일시스템의 관점에서 보면 root가 소유하고 있다! 이것이 바로 대부분의 사용자 프로그램들이 두 개의 설정 파일들을 정의하는 이유이다: 첫 번째는 /etc/에서 "시스템" 레벨로 다른 하나는 홈 디렉토리에 위치한 "개인적(private)" 레벨.

내 시스템의 경우 매우 유용한 wget 유틸리티를 설치했다. /etc/에는 /etc/wgetrc 파일이 있다. 홈 디렉토리에는 .wgetrc 파일이 있다. 이것은 커스터마이징 된 설정을 설명하고 있다. 다른 사용자들 역시 그들의 홈 디렉토리에 (/home/other) .wgetrc 파일이 있다; 물론 이 파일은 사용자가 wget 명령어를 실행할 때 읽혀질 것이다. 다시말해서, /etc/wgetrc 파일은 wget을 위한 "디폴트" 값을 제공한다. 그리고 /home/xxx/.wgetrc 파일은 특정 사용자를 위해 "커스터마이징" 목록을 보여준다. 어떤 프로그램들은 /etc/에 디폴트 설정 파일만을 가지고 있고 사용자가 이것을 커스터마이징 할 수 없도록 한다.

일반적으로 사용되는 rc와 . (dot) 파일

Filename
Description
~/.bash_login "man bash"를 참조하라.
~/.bash_logout Look at "man bash"를 참조하라. 종료할 때 배쉬 로그인 쉘에 의해 소스를 받는다.
~/.bash_profile Sourced by bash login shells after /etc/profile 다음에 배쉬 로그인 쉘에 의해 소스를 받는다.
~/.bash_history 이전에 실행된 명령어 리스트.
~/.bashrc  "man bash"를 참조하라. BASH_ENV 또는 ENV가 세팅되지 않으면 비 대화형 쉘 소스는 없다.
~/.emacs 시작할 때 emacs에 의해 읽힌다.
~/.forward
이메일 주소를 포함하고 있다면 ~ 의 소유자에게 보낸 모든 메일은 그 이메일 주소로 포워딩된다.
~/.fvwmrc ~/.fvwm2rc fvwm과 fvwm2 (기본적인 X Window manager)용 설정 파일.
~/.hushlogin "man login"을 참조하라. 메일 노티스, 마지막 로그인 정보, MOD가 없는 "조용한" 로그인.
~/.mail.rc 메일 프로그램용 사용자 init 파일.
~/.ncftp/ ncftp 프로그램용 디렉토리; 북마크, 로그, 매크로, 선호 (preference), 트레이스 등이 포함된다. man ncftp를 참조하라.
~/.profile "man bash"를 참조하라. ~/.bash_profile과 ~/.bash_login이 존재하지 않으면 배쉬로 취급된다. Bourn-heritage 쉘에 의해 사용된다.
~/.pinerc Pine 설정
~/.muttrc Mutt 설정
~/.exrc vi의 설정을 제어한다.
~/.vimrc "Vim" 디폴트 설정 파일. .exrc와 같다.
~/.gtkrc GNOME 툴킷.
~/.kderc KDE 설정.
~/.netrc ftp용 디폴트 로그인 이름/패스워드.
~/.rhosts rsh, rlogin 등의 툴에 의해 사용된다. 호스트 위장이 쉽기 때문에 보안이 취약하다.
  1. 사용자 (~/의 소유자) 또는 수퍼유저가 소유해야 한다.
  2. 이 계정으로 사용자가 액세스한 호스트 목록을 나타낸다.
  3. 심볼릭 링크라면 무시된다.
~/.rpmrc "man rpm"를 참조하라. /etc/rpmrc이 없으면 rpm에 의해 읽힌다.
~/.signature 이 계정에서 보내진 메일에 자동적으로 첨부되는 메시지 텍스트.
~/.twmrc twm (The Window Manager) 설정 파일.
~/.xinitrc

시작할 때 X에 의해 읽힌다 (xinit 스크립트가 아니다). 대부분 몇 개의 progs를 실행한다.
Example: exec /usr/sbin/startkde 라인이 이 파일에 존재하면 startx 명령어가 이 계정으로 만들어질 때 KDE Window Manager는 시작된다.

~/.xmodmaprc 이 파일은 xmodmap 프로그램으로 전달되어 어떤 이름이라도 될 수 있다 (예를 들어, ~/.Xmodmap와 ~/.keymap.km).
~/.xserverrc 실행할 X를 찾을 수 있다면 X 서버로서 xinit에 의해 실행된다.
~/News/Sent-Message-IDs gnu용 디폴트 메일 히스토리 파일.
~/.Xauthority xdm 프로그램으로 읽히고 작성되어 권한을 핸들하는데 사용된다. X, xdm, xauth man page를 참조하라.
~/.Xdefaults,
~/.Xdefaults-hostname
호스트네임으로 시작하는 동안 X 애플리케이션에 의해 읽힌다.
~/.Xmodmap .xmodmaprc에 대한 포인트; 레드햇은 이 이름을 사용하는 .xinitrc가 있다.
~/.Xresources X 리소스 데이터베이스를 로딩하기 위해 xrdb로 전달된 파일 이름. 긴 .Xdefaults 파일을 읽는 애플리케이션이 필요가 없다.

~/mbox
오래된 사용자 메일.