Сетевые сервера

Большинство сетевых серверов не должны вызывать каких либо под-процессов. Из соображений безопасности их путь должен быть минимален.

Важное исключение - это те сервисы, которые позволяют входить в систему из сети. Эта секция описывает как выглядит окружение в таком случае. Если команда исполняется на удаленной машине при помощи rsh, она имеет другой путь, чем если бы она исполнялась при помощи ssh. Подобным же образом, вход в систему при помощи rlogin, Telnet или ssh, отличается.

inetd

Большинство сетевых серверов не имеют собственного процесса, который постоянно ожидает запросов. Эта работа перекладывается на супер-сервер inetd. Inetd слушает все определенные сетевые порты и запускает соответствующий сервер, когда приходит запрос. Его поведение определяется в /etc/inetd.conf.

inetd запускается из скриптов инициализации системы. Он наследует только путь процесса init. Он не модифицирует его и все сервера запущенные из inetd имеют путь init. Пример такого сервера imapd, сервер почтового протокола IMAP.

Другие примеры процессов inetd это: telnetd,rlogind,talkd,ftp,popd, многие http сервера и т.д.

Часто использование inetd усложняется путем использования отдельной tcpd программы, чтобы запустить настоящий сервер. Это программа, которая делает дополнительную проверку безопасности, перед запуском настоящего приложения. Она не влияет на path (не проверено).

rsh

Демон rsh устанавливает path из _PATH_DEFPATH (/usr/include/paths.h) который соотвествует пути, используемому программой login для обычных пользователей. Root получит такой же путь как и обычный пользователь.

Фактически, rshd исполняет полученную им команду при помощи следующей командной строки:

shell -c командная строка

где интерпретатор не 'login' интерпретатор. Желательно, чтобы все оболочки, указанные в /etc/passwd поддерживали опцию -c, для задания командной строки.

rlogin

Rlogin вызывает login, чтобы обеспечить настоящую процедуру входа в систему. Если вы вошли в систему при помощи rlogin, вы получите путь login. Большинство других способов попасть в Линукс систему, не используют login. Заметьте разницу в сравнении с rsh.

Конкретно используется следующий синтаксис вызова login:

login -p -h имя_хоста имя_пользователя

-p сохраняет окружение исключая переменные HOME,PATH,SHELL,TERM,MAIL и LOGNAME. -h указывает удаленный хост для входа.

telnet

Telnet похож на rlogin. Он использует программу login и командную строку, чтобы вызывать её в похожей манере.

ssh

ssh использует свои собственные настройки для path . Он имеет фиксированный путь, куда добавляет директорию, в которой находится ssh. Часто это означает, что /usr/bin встречается в path дважды.

/usr/local/bin:/usr/bin:/bin:.:/usr/bin

Path не содержит /usr/X11/bin, а интерпретатор не вызывается как 'login' интерпретатор. Поэтому:

ssh remotehost xterm

Никогда не срабатывает и ничто в /etc/profile или /etc/csh.cshrc не сможет изменить этого. Вы всегда должны явно указывать путь /usr/bin/X11/xterm.

ssh ищет переменные окружения вида ПЕРЕМЕННАЯ=ЗНАЧЕНИЕ в файле /etc/enviroment. К сожалению это вызывает проблемы некоторые проблемы с XFree86.