Существует возможность предоставить публичный доступ к репозиторию только для чтения, используя сервер парольной аутентификации (см. раздел “Прямое соединение с парольной аутентификацией”). (Прочие методы доступа не имеют явной поддержки для доступа только для чтения, потому что все эти методы подразумевают регистрацию на машине с репозиторием, и поэтому пользователь может делать все, что позволяют ему права доступа к файлам).
Пользователь, имеющий доступ к репозиторию только для чтения, может выполнять все команды CVS, не изменяющие репозиторий, за исключением определенных "административных" файлов (таких, как файлы блокировок и файл истории). Может потребоваться использовать эту возможность совместно с возможностью использования псевдонимов пользователей (см. раздел “Настройка сервера для парольной аутентификации”).
В отличие от предыдущих версий CVS, пользователи с доступом только для чтения должны быть способны только читать репозиторий, но не выполнять программы на сервере или другим способом получать ненужные уровни доступа. Говоря точнее, закрыты все ранее известные дыры в безопасности. Так как эта возможность появилась недавно и не подвергалась исчерпывающему анализу безопасности, вы должны действовать с максимально необходимой осторожностью.
Есть два способа указать доступ пользователя только для чтения: включающий и исключающий.
Включающий способ означает, что пользователь явно указывается в файле $CVSROOT/CVSROOT/readers, в котором просто перечисляются "в столбик" пользователи. Вот пример:
melissa splotnik random
(Не забудьте символ новой строки в конце файла).
Исключающий способ означает, что все, кто имеет доступ к репозиторию для записи, перечисляются в файле $CVSROOT/CVSROOT/writers. Если этот файл существует, то все пользователи, не упомянутые в нем, получают доступ только для чтения (конечно, даже пользователи только для чтения должны быть упомянуты в файле CVSROOT/passwd). Файл writers имеет тот же формат, что и файл readers.
Замечание: если ваш файл CVSROOT/passwd отображает пользователей CVS в системных пользователей (см. раздел “Настройка сервера для парольной аутентификации”), убедитесь, что вы предоставляете или не предоставляете доступ только для чтения пользователям CVS, а не системным пользователям. Это означает, что в файлах readers и writers должны находиться пользователи CVS, которые могут не совпадать с системными пользователями.
Вот полное описание поведения сервера, принимающему решение, какой тип доступа предоставить:
Если файл readers существует, и данный пользователь не упомянут в нем, он получает доступ только для чтения.
Если существует файл writers, и этот пользователь НЕ упомянут в нем, то он также получает доступ только для чтения (это так даже если файл readers существует, но пользователь не упомянут в нем).
В противном случае пользователь получает полный доступ для чтения и записи.
Конечно, возможен конфликт, если пользователь упомянут в обоих файлах. Такой конфликт разрешается консервативно и такой пользователь получает доступ только для чтения.