Назад | Перейти на главную страницу

Apache> mod_auth_dbm объединяет файлы группы и пользователя

Я создал сервер 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 .