Сетевые серверы
Большинство сетевых серверов не должно вызвать подпроцессы любого вида. Из соображений безопасности их путь должен быть минимален.
Важное исключение - все сервисы, которые позволяют подключаться к системе
через сеть. Этот раздел описывает окружение в этих случаях. Если команда
выполняется на удаленной машине с помощью rsh, она получает другой path,
чем тот, если команда выполнена с помощью 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 для запуска конкретного сервера. Это программа делает
дополнительную проверку безопасности до запуска конкретного приложения. Она
не изменяет пути (не проверено).
rsh
Демон rsh устанавливает пути из определения _PATH_DEFPATH
(/usr/include/paths.h), этот же путь использует программа login для нормальных
пользователей. Root получит тот же путь, что и нормальный пользователь.
Фактически, rshd выполняет команду, полученную из командной строки:
и shell, это не login-shell. Желательно, чтобы все оболочки, упомянутые в
/etc/passwd, поддерживали опцию -c.
rlogin
Rlogin вызывается при входе в систему, чтобы запустить реальную процедуру
входа в систему. Если вы входите с помощью rlogin, то получаете те же самые
пути, что и при обычном входе в систему. Большинство других способов войти
на Linux компьютер не использует login. Обратите внимание на разность с
rsh.
Команда login фактически использует
login -p -h host-name user-name |
-p сохраняет среду окружения, кроме переменных HOME, PATH, SHELL, TERM,
MAIL и LOGNAME. -h сообщает удаленному хосту имя для регистрации.
telnet
Telnet является че- то подобным rlogin. Использует программу login и командную строку.
ssh
ssh имеет собственную установку путей. Он добавляет каталог, где находится
ssh. Часто это означает, что /usr/bin находится в пути дважды:
/usr/local/bin:/usr/bin:/bin:.:/usr/bin |
Путь не содержит /usr/X11/bin, и оболочка, вызванная командой ssh - не
оболочка входа в систему. Таким образом,
не работает, и что-либо в /etc/profile или в /etc/csh.cshrc может заменить
это. Вы должны всегда использовать явный путь /usr/bin/X11/xterm.
ssh ищет переменные окружения в форме VAR=VALUE в файле /etc/environment. К
сожалению, это вызывает некоторые проблемы с XFree86.