대부분의 네트워크 서버들은 어떤종류의 서브 프로세스도 가동하지 않는게 좋다. 보안을 생각한다면 그 프로세스들의 path 는 최소한 이여야 한다. 한가지 중요한 예외가 있다면 네트워크로부터 로깅을 허용하는 서비스들이 다. 이 장에서는 이 경우에 어떤 환경이 쓰이는지 설명하고 있다. 만약 rsh를 통해 어떤 명령어가 리모트 머신에서 수행되면 path 는 ssh를 사용하는것 과 다르다. 비슷하게 rlogin으로 telnet 또는 ssh로 로그인 했을때도 각각 다르 다.
대부분의 네트워크 서버들은 리퀘스트를 기다리며 대기하고 있는 서브 프 로세스들을 가지고 있지 않다. 이 일은 inetd라는 인터넷 수퍼 서버가 대신 하게 되는데, inetd는 설정된 모든 네트워크 포트들을 듣고 있다가 리퀘스트 가 오면 해당하는 서버를 기동한다.
inetd 의 설정파일은 /etc/inetd.conf 이다. inetd는 시스템 시작 스크립트에서 시작되어 진다. init 프로세스로부터 path를 상속받고 수정하지는 않는다. 그래서 inetd 로부터 시작되는 모든 서버들은 init의 path를 가지고 있다. 예로서 IMAP post office 프로토콜인 imapd을 들수있다 다른 inetd프로세스는 telnet, rlogin, talkd, ftp, popd, 여러 http서버 등이 있다.
리얼 서버를 구동하기위해 따로 분리된(독립적인?:역자 주) tcpd 프로그램 을 사용한다면 inetd 의 사용법은 여전히 복잡하다. tcpd는 리얼 어플리케 이션이 시작되기 전에 추가적인 보안 점검을 하게되는데 path를 바꾸지는 않는다.(확인해보지 않았음)
rsh 데몬은 일반사용자를 위해 로그인 프로그램이 설정하는것과 같은 _PATH_DEFPATH (/usr/include/paths.h) 로부터 path를 설정한다. root 역시 일반유저와 같은 path를 갖는다. 사실, rshd 는 commandline에서 얻은 파라메터(예제에서 command-line:역자 주)로 다음과 같은 명령어를 실행하는 것이다.
shell -c command-line
이경우 로그인 쉘은아니다. /etc/passwd 에 기록된 모든 쉘들이 -c 옵션을 지원하는지 확인하기 바란다.
Rlogin 은 real login 과정을 수행하기위해 login을 기동한다. rlogin을 통해 로그인 한다면 login 에서와 같은 path를 갖게 될 것이다. 다른방식의 리눅스 로그인은 대부분 login을 사용하지 않는다. rsh 와 다르다는 것에 주의하기 바란다.
실제 login 다음과 같은 명령을 사용하는데
login -p -h host-name user-name
-p 옵션은 HOME, PATH, SHELL, TERM, MAIL, LOGNAME을 제외한 환경변수들을 전에 있던 그대로 보존하고, -h 옵션은 로그인할 리모트 호스 트 명을 알려주게 된다.
telnet은 rlogin 과 비슷하다. login 프로그램을 사용하며 명령실행도 rlogin과 비슷한 방식으로 이루어진다.
ssh 는 자신만의 path 설정치를 갖고 있다. ssh는 고정돤 path 변수를 가 지며 ssh 가 놓여져있는 path를 추가한 것이다. 때로 이렇게 됨으로써 /usr/bin 디렉토리가 패스에 두 번 나타나게 되기도 한다.
/usr/local/bin:/usr/bin:/bin:.:/usr/bin
path에 /usr/X11/bin 이 들어있지 않으며, ssh가 기동한 쉘은 로그인 쉘이 아니다. 그러므로
ssh remotehost xterm
이런 명령은 실행되지 않고 /etc/profile이나 /etc/csh.cshrc값을 바꿔준다 해도 소용없다. 사용하려면 풀 패스를 적어줘야한다 (/usr/bin/X11/xterm) ssh는 /etc/environment 파일안의 VAR=VALUE, 이런 형식의 환경변수 값을 읽어들인다. 그래서 XFree86 실행시 문제를 일으킨다. (뒤에 추가적으 로 설명됨:역자 주)