Настройка сервера для парольной аутентификации
Во-первых, вы, вероятно, хотите усилить права доступа к каталогам `$CVSROOT' и `$CVSROOT/CVSROOT'. См. section Прямое соединение с парольной аутентификацией за дополнительными деталями.
На стороне сервера следует редактировать файл `/etc/inetd.conf', чтобы inetd знал, что следует выполнять команду cvs pserver, когда кто-либо пытается соединиться с соответствующим портом. По умолчанию номер порта --- 2401; это значение можно изменить, если перед компиляцией установить параметр CVS_AUTH_PORT в другое значение.
Если ваш inetd позволяет использование номеров портов в `/etc/inetd.conf', то можно использовать такую строку: 2401 stream tcp nowait root /usr/local/bin/cvs cvs --allow-root=/usr/cvsroot pserver
Вы можете также использовать ключ командной строки `-T', чтобы указать временный каталог.
Ключ командной строки `--allow-root' задает разрешенный каталог CVSROOT. Клиенты, пытающиеся использовать другой каталог, не смогут соединиться. Если вы хотите разрешить доступ к нескольким каталогам CVSROOT, повторите эту опцию.
Если ваш inetd требует текстовых имен сервисов вместо номеров портов, поместите эту строчку в `/etc/services':
cvspserver 2401/tcp
и напишите cvspserver вместо 2401 в файле `/etc/inetd.conf'.
После всего этого перезапустите inetd или заставьте его перечитать файлы конфигурации. В случае проблем с настройкой смотрите section Ошибки при установке соединения с CVS-сервером.
Так как клиент хранит и пересылает пароли практически открытым тестом (см. section Прямое соединение с парольной аутентификацией), то может использоваться отдельный файл паролей для CVS, чтобы пользователи не раскрывали своих обычных паролей при доступе к репозиторию. Этот файл -- `$CVSROOT/CVSROOT/passwd' (see section Административные файлы). Его формат похож на `/etc/passwd', но он имеет только два или три поля: имя пользователя, пароль и необязательное имя пользователя для использования сервером. Например: bach:ULtgRLXo7NRxs cwang:1sOp854gDF3DY
Пароль шифруется стандартной функцией UNIX crypt(), поэтому можно просто перенести пароль из обычного файла `passwd'.
При парольной аутентификации сервер сначала проверяет, находится ли пользователь в файле `CVSROOT/passwd'.
Если нет, или файл `CVSROOT/passwd' не существует, то сервер пытается проверить пароль, используя системную процедуру проверки пользователя (это может быть запрещено, установив SystemAuth=no в файле конфигурации, see section Файл конфигурации CVSROOT/config). При использовании файла `CVSROOT/passwd' сервер выполняется с правами пользователя, указанного в третьем поле соответствующей строки, или, если третьего поля нет, то в первом (таким образом CVS позволяет использовать ненастоящие имена пользователей, если в `CVSROOT/passwd' заданы соответствующие им настоящие системные имена. В любом случае, CVS не получит дополнительных прав, кроме тех, что уже имеет пользователь.
С помощью файла `CVSROOT/passwd' можно также отобразить пользователей CVS в имена пользователей машины, добавив двоеточие и системное имя пользователя после пароля. Например:
cvs:ULtgRLXo7NRxs:kfogel generic:1sOp854gDF3DY:spwang anyone:1sOp854gDF3DY:spwang
Таким образом, пользователи, обращающиеся по сети к репозиторию на faun.example.org, используя команду
cvs -d :pserver:cvs@faun.example.org:/usr/local/cvsroot checkout foo
будут работать с сервером, который имеет права пользователя kfogel, если, конечно, они успешно аутентифицировались. При этом сетевые пользователи не знают системный пароль пользователя kfogel, потому что файл `CVSROOT/passwd' может содержать другой пароль, используемый только CVS-сервером. Как показано в вышеприведенном примере, можно отображать разные имена пользователей CVS в единственного системного пользователя.
Эта возможность создана, чтобы позволить доступ к репозиторию без полного доступа к системе (в частности, см. section Доступ к репозиторию только для чтения); однако, смотри также section Прямое соединение с парольной аутентификацией. Любой доступ к репозиторию, скорее всего, подразумевает также некоторый доступ к системе вообще.
В настоящее время единственный способ поместить пароль в `CVSROOT/passwd' -- это вырезать его откуда-нибудь еще. Когда-нибудь появится команда cvs passwd.В отличие от других файлов в `$CVSROOT/CVSROOT', вы редактируете файл `CVSROOT/passwd' напрямую, а не с помощью CVS.