Linux Gazette #27 번역: 권 순선(리눅스 한글문서 프로젝트 관리자) http://kldp.linux-kr.org, cessi@kldp.linux-kr.org mingetty를 이용한 자동 로그인 By John Kodis 지난 리눅스 가제트 26호에서 Todd Blake(tbb@enterprise.aacc.cc.md.us)씨는 다 음과 같은 질문을 했었습니다. "저는 다른 사람들처럼, 집에서 리눅스를 사용할 때는 저 이외의 다른 사용자는 아무도 없는 그런 상태에서 리눅스를 사용하고 있답니다. 제가 하고싶은 것은 제가 시스템을 부팅시켰을때 첫번째 가상 콘솔에 자동으로 그 사용자 계정으로 로긴이 되도록 하는 것입니다.(root가 아님) 물론 다른 콘솔들은 그대로 둬서 외 부의 사용자들이 텔넷 같은 것을 써서 접속을 시도할땐 보통때처럼 로긴 프롬프 트를 내보낼 수 있도록 하는 것이죠. 이렇게 되도록 할려고 /etc/inittab 파일에 /bin/sh를 집어넣어 보기도 했지만 잘 안되더군요. 어떻게 해야할지 모르겠습니 다. 좋은 방법 없나요?" 저도 같은 상황이었습니다. 이런 질문이 여러 관련 뉴스그룹에 주기적으로 올라 오는것 같았는데 만족할 만한 대답은 나오지 않더군요. 그런데 최근에 제가 이 문제를 해결할 수 있는 방법을 찾았냈습니다. 저는 로긴 프롬프트를 가상 콘솔 에서 제공해주는 역할을 하는 Florian LaRoche씨의 mingetty프로그램을 약간 수 정해서 이 문제를 해결했죠. 이제 특정 사용자를 시스템이 부팅될때 자동으로 로긴시켜줄 수 있게 되었습니다. 저는 SGI Irix 운영체제에서 제공되는 기능에서 힌트를 얻었죠. 다음에 보시는 것은 제가 mingetty.8 매뉴얼 페이지에 추가한 것입니다. --autologin username 시스템이 부팅될때 자동으로 지정된 사용자를 사용자 이 름이나 패스워드의 검사 없이 콘솔에 로긴시킨다.(보통은 /dev/tty1) autologin 옵션이 제공되면 mingetty는 터미널 타입을 검사하여 그것이 콘솔인 지 아닌지 판단한 다음 허가된 사용자 이름이 주어졌는지, 시스템이 부팅되고 최초로 요청되는 자동 로긴인지 판단한 다음 모든 조건이 만족되면 그 사용자의 사용자 이름이나 패스워드 검색없이 로긴을 시켜줍니다. 만약 한가지라도 만족 되지 않으면 일반적인 로긴 과정을 거치도록 한다. 허가되지 않은 사용자의 자동 로긴 요청을 거부할 수도 있다. 이런 경우는 주로 root에 대해서 자동 로긴을 요청한 경우이거나, 혹은 허가되지 않은 콘솔에 대해 서 자동 로긴을 요청했을 경우이다. 시스템이 부팅된 이후에는 오직 단 한번의 자동 로긴 요청만이 받아들여진다. 만약 자동 로긴이 거부되거나, 혹은 자동 로긴된 유저가 로그아웃했을 경우에는 mingetty는 그 이후의 로긴 요청들을 모두 일반적인 로긴 프롬프트를 통한 로긴 으로 처리한다. http://www5.jagunet.com/~kodis 에서 제가 패치한 내용들을 받아오실 수 있으 며 mingetty를 패치하게 되면 시스템이 맨처음 부팅될때 첫번째 가상콘솔로 사 용자를 자동 로긴시켜 주며 그 콘솔을 제외한 다른 모든 콘솔에는 보통의 유닉 스 보안 사항들이 적용됩니다. 이 패치를 사용하시려면 mingetty 프로그램의 소스를 우선 구하셔야 할것이며 제 홈페이지에 있는 패치를 적용한 후에 mingetty 프로그램을 다시 컴파일해주 어야 합니다. 물론 매뉴얼 페이지(mingetty.8)도 원본을 백업해둔 다음 매뉴얼 페이지가 있는 디렉토리에다가 복사해야겠죠. 그 다음, 첫번째 가상콘솔에 자동 로긴이 가능하도록 하기 위해서 inittab 파일을 다음과 같이 고쳐줍니다. /etc/inittab 파일을 고치는 것이죠. 1:12345:respawn:/sbin/mingetty --noclear --autologin kodis tty1 이렇게 바꿔준 다음 시스템을 리부팅시키면 자동으로 로긴될 것입니다. 또, 제 경우 거의 엑스 윈도우에서 작업을 하기 때문에 홈디렉토리의 .zlogin과 .bash_profile 파일에 다음과 같은 내용을 추가하였습니다. 이 코드를 추가하게 되면 첫번째 가상 콘솔에 로긴했을 경우 엑스 윈도우를 시작하겠냐는 질문이 곧 바로 떠서 반응이 없이 10초가 지나거나 혹은 Yes를 선택해줄 경우 엑스 윈도 우가 곧바로 시작되고 엑스 윈도우를 끝내면 로그아웃하겠느냐는 질문이 화면에 나타나게 됩니다. case `tty` in /dev/tty[1]) echo -n "Start X [Yn]? " expect \ -c 'stty raw' \ -c 'set timeout 10' \ -c 'expect -nocase n {exit 1} -re . {exit 0}' if [ $? = 0 ] ; then startx echo -n "Log out [Yn]? " expect \ -c 'stty raw' \ -c 'set timeout 10' \ -c 'expect -nocase n {exit 1} -re . {exit 0}' if [ $? = 0 ] ; then logout fi fi echo ;; esac 제가 사용하는 것처럼 이렇게 해두면 로긴을 쉽게 하는 것은 물론이고, 엑스 윈 도우를 리눅스 박스에서 전원을 올리자마자 곧바로 시작할 수 있게 되죠. 맨처음 질문을 올렸던 Blake씨는 물론, 이런 상황에 처해있는 다른 독자분들에 게도 이 방법이 유용하게 쓰일 수 있기를 바랍니다. 리눅스를 엑스 터미널로 사용하기 (오래된 구식 PC의 새로운 용도) By Rich Kaszeta Summary: 이 글은 저급 386/486 컴퓨터를 다른 리눅스/유닉스 워크스테이션의 엑스 터미 널로 사용할 수 있도록 하는 방법을 다룹니다. Background: 우리 미네소타 대학의 기계공학과에서는 얼마전 오래된 IBM PS/Valuepoint 486 컴퓨터(16MB 메모리, 200MB 하드디스크) 몇 대를 물려받게 되었는데 우리는 이것들을 어떻게 하면 잘 사용할 수 있을까 생각하고 있는 중이었죠. 처음에는 이 컴퓨터들에게 리눅스를 설치하려고 했었는데(저희 과에는 이미 펜 티엄급의 리눅스 머신들을 몇십 대 정도 가지고 있으며 꽤 인기가 높습니다.) 하 드 디스크나 메모리가 많이 모자라다 보니 리눅스가 그렇게 빨리 돌아갈것 같진 않고, 업그레이드를 하자니 비용문제 때문에 그것도 별로 좋은 솔루션이 되지 못했습니다. 그래서 우리가 생각해낸 것은 그 컴퓨터들에게 최소한의 데비안 리눅스를 설치 한 다음(기본 설치에 기본 네트워크 및 엑스 윈도우 패키지들과 몇가지 유틸리 티) 엑스 터미널로 동작하도록 설정하여 매우 싼값의 완벽한 그래픽 터미널로 사용하는 것이었습니다. 그래서 그 컴퓨터들을 유닉스 서버의 엑스 인터페이스 로 해서 대학원생들의 연구실에 사용하도록 했습니다. XDM: The basic concept: xdm은 "디스플레이 관리자"로서 엑스 로그인 창을 사용자에게 제공하는 역할을 합니다. 이 전통적인 xdm의 사용법은 X11 워크스테이션의 로컬 디스플레이에 그래피컬 로긴 창을 띄울 수 있도록 해서 사용자가 엑스 윈도우를 수동으로 시 작할 필요없이 엑스 윈도우를 곧바로 쓸 수 있게 합니다. 그렇지만 xdm은 로컬 머신의 로컬 디스플레이뿐만 아니라 리모트 머신에도 사 용할 수 있습니다. 예를 들면 NCD 엑스 터미널 같은 곳에서도 사용할 수 있다 는 얘기죠. 필요한 것은 리모트 머신이 엑스 윈도우 프로토콜을 이해하기만 하 면 된다는 겁니다. 우리가 지금 얘기하고 있는 것은 값싼 PC를 이런 엑스 터미널로 작동할 수 있 도록 설정하는 것입니다. Setting up the X Terminals 486컴퓨터를 엑스 터미널로 설정하는 것은 다음 몇 단계의 과정만 거치면 됩니 다. 1. 각각의 PC에 최소한의 데비안 리눅스를 설치한다. 2. 각각의 PC에 엑스 윈도우가 작동할 수 있도록 하고 접속할 서버의 리스트를 받아올 수 있도록 XDM서버로부터 쿼리를 받을 수 있게 한다. 3. 하나 이상의 XDM 서버를 엑스 터미널에 선택 목록을 제공할 수 있도록 하 는 기능을 설정한다. 4. XDM을 좀더 보기좋고 사용하기 편리하게 고친다. 이제 이 각각의 과정을 하나하나 순서대로 살펴보도록 합시다. Installing a minimal Linux system: 저희가 사용하고 있는 리눅스 시스템들이 모두 데비안 리눅스를 사용하고 있는 관계로, 이 PC들에도 데비안 리눅스를 사용하기로 결정했습니다. 각각의 시스템에 기본적인 데비안 리눅스 배포본을 플로피를 이용하여 설치하고 최소한의 네트워킹 지원도 가능하도록 했습니다. 사용자 계정은 하나도 만들지 않았습니다. 왜냐면 실제로 이 리눅스를 설치한 시스템에 직접 로긴할 필요는 없으니까요. 그 다음 XFree86 3.3 패키지를 각각의 시스템에 설치했습니다. 기본적인 엑스 라이브러리와 S3 X 서버 정도만 설치했죠. 그리고 X11R6 폰트는 모두 설치했구 요. 마지막으로 좀더 편리하게 사용하기 위해서 몇가지 패키지를 추가로 설치했는데 기본적인 네트워킹 관련 유틸리티들과 ssh(사용자들이 보안상 안전한 채널을 통 해 로긴할 수 있게 합니다.), nvi 를 설치했습니다. nvi는 저희들이 데비안의 기 본 텍스트 에디터를 별로 좋아하지 않기 때문에 따로 설치한 겁니다. Configuring each PC to start up X: 첫번째 단계는 각각의 시스템에 엑스 윈도우를 설정하는 것입니다. xf86config 를 이용하여 엑스 윈도우를 설정하면 XF86Config 파일이 생기죠. 이렇게 엑스 윈도우를 설정할 때 다음 몇 가지 사항들을 고려해야 합니다. 1. Emulate3Buttons 옵션을 사용하여 마우스 버튼이 2개인 마우스를 마우스 버 튼 3개인 것처럼 흉내내 주어야 합니다. 왜냐면 저희가 설정하는 시스템의 마우 스가 버튼이 두개밖에 없었으니까요. 2. 시스템에 설치된 S3 비디오카드가 비디오램 2메가에 1152x900x16비트 해상도 까지 지원하였지만 우리는 그냥 1024x768x8비트 해상도로 사용하기로 했습니다. 왜냐면 우리가 사용하는 IBM 15인치 모니터에서는 이 정도 해상도가 적당히 잘 보였고 16비트 칼라보다는 응용프로그램들의 호환성 문제가 덜 발생하기 때문입 니다. 3. 보안 문제 때문에 DontZap 옵션을 사용하여 사용자가 엑스 서버를 임의로 중 지할 수 없게 하였습니다. 4. 우리는 또 SGI머신에서 정의된 색상표를 /usr/lib/X11/rgb.txt 에 추가했습니 다. 그렇게 하여 SGI 머신과 통신하는 엑스 터미널이 에러 없이 작동할 수 있게 한 거죠. 5. 폰트 서버를 다른 곳에서 설정하여 사용할 수도 있을 겁니다. X 서버 설정이 일단 만족스러울 정도가 되고 나서 다음과 같은 명령어를 써서 xdm이 돌아가고 있는 워크스테이션에 접속을 시도해 보았습니다. X -quiet -query weber 이렇게 하면 weber의 xdm 로긴 윈도우가 다음과 같이 뜹니다. 그림: xdm1.gif 이제 우리는 기본적으로는 모든 준비가 다 되었음을 알고 있습니다. 이렇게 설 정한 시스템을 그냥 한 대의 워크스테이션하고만 통신하도록 하고자 한다면 더 이상의 작업은 하지 않아도 됩니다. 남은 것은 X가 부팅되는 순간부터 시작되도 록 설정하는 것입니다. /etc/init.d/xterm 스크립트를 조작하면 되죠.(역자 주: 지 금 얘기하는 것은 모두 데비안 리눅스 배포본을 기준으로 하고 있다. 다른 레드 햇이나 슬랙웨어 등의 배포본을 사용할 경우는 구성이 약간씩 틀리다.) 데비안 시스템에서 우리는 update-rd.d xterm defaults 99 라는 명령으로 이 패 키지를 인스톨할수 있었는데 레드햇이나 슬랙웨어에서도 비슷하게 해줄 수 있을 겁니다. 우리는 이 작업까지 모두 끝난 뒤에 X가 부팅하자마자 시작되는지 확인 해 보기 위해 시스템을 리부팅해 보았습니다. Configuring an XDM server to provide a "chooser": 우리는 이미 기본적인 엑스 터미널을 설정한 셈입니다. 그렇지만 현재 상태로는 오직 한 대의 워크스테이션하고만 통신을 하기 때문에 만약 여러 대의 워크스테 이션들과 통신하도록 설정하고자 한다면 이렇게 설정해둔 엑스 터미널에 호스트 를 선택할 수 있도록 정보를 제공해 주는 서버를 네트워크에 적어도 한 대 이상 가지고 있어야 합니다. 이 글에서는 이런 호스트를 선택할 수 있는 정보를 제공 해 주는 워크스테이션을 "weber"라고 부르겠습니다. (이글에서는 "weber"는 리 눅스 시스템입니다만, 이것은 xdm을 돌릴수 있는 워크스테이션이라면 리눅스가 아니라도 상관 없습니다.) 첫번째 단계는 weber가 간접적인 XDM 연결을 통해서 물려있는 호스트들의 목 록을 제공할 수 있도록 하는 것입니다. 이것은 Xaccess 에 의해서 제어됩니다. (데비안의 경우 /etc/X11/xdm 아래에 있습니다. 다른 배포본의 경우 /usr/lib/X11 아래에 있을 수도 있습니다.) 보통은 기본적으로 설치된 Xaccess 파일에 주석이 잘 되어 있고 예를 잘 들어서 설명해 두었기 때문에 설정하는 것 은 어렵지 않습니다. 기본적으로, 다음과 같은 형식으로 파일에 내용을 추가해 주어야 합니다. hostname CHOOSER host-a host-b hostname은 접속 가능한 호스트 리스트를 제공해 주는 서버의 이름이고("*"나 "*.domain.name" 등의 와일드카드로 지정해줄 수도 있습니다.), CHOOSER는 xdm에게 CHOOSER뒤에 써놓은 호스트들에 대한 리스트를 제공해 주라고 지정 하는 것입니다. 만약 CHOOSER뒤에 BROADCAST라고 적어주면 로컬 네트워 크에 있는 xdm이 돌아가고 있는 모든 시스템들을 보여주기도 합니다. 그러므로 만약 우리가 모든 시스템이 현재 로컬 네트워크 안에서 xdm을 통해 접속할 수 있는 호스트 이름들을 제공해줄 수 있도록 하려면 Xaccess 파일에 다 음과 같은 내용이 들어 있도록 해주면 됩니다. * CHOOSER BROADCAST 그런데 저희가 사용하고 있는 환경에서는 다른 서브넷에 속해 있는 시스템들도 조금 있기 때문에, 그런 시스템들까지 모두 리스트에 나타내어줄 수 있도록 하 기 위해서는 브로드캐스팅에 의존할 수는 없습니다. 그러니 모두 일일이 적어 주어야겠죠. * CHOOSER 호스트 리스트 추가적으로, 각각 다른 시스템들에 대해서 서로 다른 리스트를 보여주도록 할 수도 있습니다. 앞에서도 말했지만, 저희는 엑스 터미널로 사용하려는 리눅스 시 스템들 중 한 대를 SGI워크스테이션의 그래픽 터미널로 사용해야 하기 때문에 이 "console"라는 이름을 가진 시스템에 다음과 같이 설정을 해 주었습니다. console.me.umn.edu CHOOSER server1 server2 ... 다음 단계는 엑스 터미널을 XDM에 간접적인 쿼리 방식을 이용하여 접속하도록 하는 것입니다. 엑스 터미널 시스템에 로긴한 다음 엑스 윈도우를 다음과 같이 해서 시작해 보았습니다. X -indirect weber 그러면 다음과 같이 접속 가능한 호스트들을 나열해 주는 화면이 나타납니다. 그림: chooser.gif 이제 잘 되는 것을 확인했으니 /etc/init.d/xterm 스크립트의 "-query rayleigh"라 고 적힌 부분을 "-indirect weber"라고 고쳐 줍니다. Configuring the chooser through X resources and scripts 음......기본적으로 모든 것은 다 잘 되고 있으니 남은 것은 필요없는 것은 지우 고, 좀더 보기좋게 다듬는 것이겠죠. 엑스 리소스를 사용하여 설정해주면 됩니다. 이 리소스들을 바꿈으로서 폰트를 바꾼다거나, 색상, 혹은 배치를 바꿔줄 수 있습니다. 이러한 리소스들은 /etc/X11/xdm/Xresources 파일에 설정되어 있습니다. 저희가 사용하는 시스템의 경우, 다음과 같은 동작을 할 수 있도록 설정해주고 싶었습니다. 1. 헤더부분을 바꿔서 "Available MEnet Systems" 라는 말이 나오도록 합니다. 2. 폰트를 좀더 보기좋은 것으로 바꿉니다. 3. 리스트를 두 줄로 보여주고, 사이에는 간격을 좀 줘서 세로로 정렬시킵니다. 4. 스크롤바를 오른쪽으로 옮깁니다. 5. 전체적인 창 크기를 좀 더 키웁니다. 이렇게 해주기 위해서 우리는 /etc/X11/xdm/Xresources 파일에 다음과 같은 내 용들을 추가했습니다. Chooser*geometry: 810x500+300+225 Chooser*allowShellResize: false Chooser*ShapeStyle: Oval Chooser*viewport.forceBars: true Chooser*label.font: *-new century schoolbook-bold-i-normal-*-240-* Chooser*label.label: Available MEnet Hosts !Chooser*list.font: -*-*-medium-r-normal-*-*-230-*-*-c-*-iso8859-1 !Chooser*Command.font: *-new century schoolbook-bold-r-normal-*-180-* #ifdef COLOR Chooser*label.foreground: white Chooser*label.background: midnightblue Chooser*Command.background: gray80 Chooser*list.columnSpacing: 25 Chooser*list.defaultColumns: 2 Chooser*list.forceColumns: true Chooser*list.verticalList: true Chooser*internalBorderColor: black Chooser*Command.font: -adobe-helvetica-bold-r-*-*-12-* Chooser*viewport.useRight: true #endif 마지막으로, 우리는 기본적으로 엑스 윈도우에서 설정되어 있는 그물 무늬의 루 트 윈도우(배경화면)을 없애고 싶었습니다. 왜냐면 작은 모니터에서는 별로 보기 에 좋지가 않았기 때문입니다. 이렇게 해주기 위해서 우리는 xdm이 chooser.script 라는 스크립트를 보통의 chooser 대신에 사용하도록 했습니다. 이 스크립트는 그저 백그라운드를 skyblue4 로 바꿔주는 역할을 합니다. 이것을 /etc/X11/xdm/xdm-config 에다 다음 내용들을 추가해서 설정할 수 있었습니다. DisplayManager*chooser: /usr/lib/X11/xdm/chooser.script chooser.script는 다음과 같습니다. #!/bin/sh xsetroot -solid skyblue4 /usr/lib/X11/xdm/choosser $* 이제는 모양이 다음과 같이 바뀝니다. 그림: chooser2.gif 지금까지 저희들이 한 것보다 훨씬 더 많은 부분을 엑스 리소스를 통해서나, 혹 은 XDM스크립트를 써서 자기 마음대로 고쳐줄 수 있습니다. xdm 매뉴얼 페이 지를 참고하세요. Conclusion: 비교적 힘들이지 않고, 그 이후의 유지보수 과정이 특별히 필요없이(이렇게 설정 한 엑스 터미널들은 시스템이 깨지는 경우가 거의 없었고, 소프트웨어 업데이트 도 필요없습니다.) 많은 "낡아빠진" PC들을 꽤 쓸만한 엑스 터미널로 바꾸어줄 수 있었습니다. (386에서도 해보았는데 잘 되더군요.) 마지막으로 말씀드리고 싶은 것은, 여기서 말씀드린 내용들은 모두 데비안 리눅 스를 탑재한 PC들에 적용되는 얘기란 겁니다. 그렇지만 여기서 말씀드린 똑같은 방법을 엑스 윈도우가 호환되는 시스템들 모두(구식 선 워크스테이션, HP, SGI......)에 적용시킬 수 있다는 겁니다.