Я создал сервер Git с git-http-backend
на VPS с CentOS 6.5 и используйте htpasswd
аутентификация. Соответствующий раздел раньше выглядел так:
<LocationMatch ".*">
AuthType Basic
AuthName "Git Repositories"
AuthUserFile /etc/gitdata/gitusers.passwd
Require valid-user
</LocationMatch>
Недостатком этого является то, что все действующие пользователи получат доступ ко всем репозиториям. Теперь я бы хотел, чтобы пользователи или группы пользователей имели доступ только к определенным репозиториям. Исследования показывают, что это лучше всего достигается с помощью Apache mod_auth_dbm
. Итак, я создал такую настройку:
ServerName git.myserver.com
ScriptAlias / /usr/libexec/git-core/git-http-backend/
DocumentRoot "/var/git"
SetEnv GIT_PROJECT_ROOT /var/git
SetEnv GIT_HTTP_EXPORT_ALL
SetEnv REMOTE_USER=$REDIRECT_REMOTE_USER
<Directory "/">
AllowOverride None
Order allow,deny
Allow from all
Options -Indexes +FollowSymLinks -Includes +ExecCGI
AuthType Basic
AuthName "Git Repositories"
AuthDBMGroupFile /etc/gitdata/userbase
AuthDBMUserFile /etc/gitdata/userbase
Require group admin
</Directory>
<Directory "/projects">
Allow from all
Order allow,deny
AuthName "Project Repository - projects"
AuthType Basic
Require group admin
<Limit GET PUT POST DELETE PROPPATCH MKCOL COPY MOVE LOCK UNLOCK>
Require group admin
</Limit>
</Directory>
Затем я создал userbase
файл с использованием htdbm
, и создал в нем пользователя вот так:
sudo htdbm -bt /etc/gitdata/userbase xedinunknown "mysecretpassword" "admin:Main Admin"
Итак, теперь мой userbase
файл выглядит так:
$ sudo htdbm -l /etc/gitdata/userbase
Dumping records from database -- /etc/gitdata/userbase
Username Comment
xedinunknown admin:Main Admin
Total #records : 1
Некоторые примеры, а также документация mod_auth_dbm, заставили меня поверить, что в этом случае admin
будет группой, к которой пользователь xedinunknown
принадлежит. Однако попытка клонирования репозитория дает мне ошибку аутентификации:
git clone http://xedinunknown@git.myserver.com/projects
Cloning into 'projects'...
Password for 'http://xedinunknown@git.myserver.com':
fatal: Authentication failed
Я должен упомянуть, что в документации к модулю указано, что можно комбинировать групповые и пользовательские файлы, но нигде не сказано, как это сделать. Я что-то упустил? Кто-нибудь здесь делал это раньше? Если да, объясните, пожалуйста.
Спасибо!
ОБНОВЛЕНИЕ 1
$ sudo httpd -v
Server version: Apache/2.2.15 (Unix)
Server built: Aug 13 2013 17:29:28
$ sudo httpd -M
Loaded Modules:
core_module (static)
mpm_prefork_module (static)
http_module (static)
so_module (static)
auth_basic_module (shared)
auth_digest_module (shared)
authn_file_module (shared)
authn_alias_module (shared)
authn_anon_module (shared)
authn_dbm_module (shared)
authn_default_module (shared)
authz_host_module (shared)
authz_user_module (shared)
authz_owner_module (shared)
authz_groupfile_module (shared)
authz_dbm_module (shared)
authz_default_module (shared)
ldap_module (shared)
authnz_ldap_module (shared)
include_module (shared)
log_config_module (shared)
logio_module (shared)
env_module (shared)
ext_filter_module (shared)
mime_magic_module (shared)
expires_module (shared)
deflate_module (shared)
headers_module (shared)
usertrack_module (shared)
setenvif_module (shared)
mime_module (shared)
dav_module (shared)
status_module (shared)
autoindex_module (shared)
info_module (shared)
dav_fs_module (shared)
vhost_alias_module (shared)
negotiation_module (shared)
dir_module (shared)
actions_module (shared)
speling_module (shared)
userdir_module (shared)
alias_module (shared)
substitute_module (shared)
rewrite_module (shared)
proxy_module (shared)
proxy_balancer_module (shared)
proxy_ftp_module (shared)
proxy_http_module (shared)
proxy_ajp_module (shared)
proxy_connect_module (shared)
cache_module (shared)
suexec_module (shared)
disk_cache_module (shared)
cgi_module (shared)
version_module (shared)
php5_module (shared)
ssl_module (shared)
Syntax OK
Как это выглядит, admin
вероятно, рассматривается как часть комментария, а не как группа. Согласно документации, вы должны использовать dbmmanage
назначать группы пользователям. Проверьте http://httpd.apache.org/docs/2.2/programs/dbmmanage.html .