code.gitea.io/gitea@v1.22.3/docs/content/usage/authentication.zh-cn.md (about) 1 --- 2 date: "2016-12-01T16:00:00+02:00" 3 title: "认证" 4 slug: "authentication" 5 sidebar_position: 10 6 toc: false 7 draft: false 8 aliases: 9 - /zh-cn/authentication 10 menu: 11 sidebar: 12 parent: "usage" 13 name: "认证" 14 sidebar_position: 10 15 identifier: "authentication" 16 --- 17 18 # 认证 19 20 ## 轻量级目录访问协议(Lightweight Directory Access Protocol,LDAP) 21 22 通过BindDN的LDAP和简单认证方式LDAP共享以下字段: 23 24 - 认证名称 **(必选)** 25 26 - 分配给新授权方法的名称。 27 28 - 主机名 **(必选)** 29 30 - LDAP 服务的主机地址. 31 - 例如:`mydomain.com` 32 33 - 端口号 **(必选)** 34 35 - LDAP 服务的端口号. 36 - 例如: LDAP `389`/ LDAPs `636` 37 38 - 安全协议 (可选) 39 - 连接LDAP服务器时是否使用TLS协议。 40 41 - 管理员过滤规则 (可选) 42 - 一个LDAP过滤器,用于指定哪些用户应该被赋予管理员特权。如果用户帐户符合过滤器条件,则该用户将被授予管理员权限。 43 - 示例:`(objectClass=adminAccount)` 44 - 适用于Microsoft Active Directory(AD)的示例:`memberOf=CN=admin-group,OU=example,DC=example,DC=org` 45 46 - 用户名属性(可选) 47 48 - 用户LDAP记录中包含用户名称的属性。在第一次成功登录后,将使用指定的属性值作为新的Gitea账户用户名。若留空,则使用登录表单上提供的用户名。 49 - 当提供的登录名与多个属性匹配时,这一选项非常有用,但是只有一个特定属性应该用于Gitea账户名称,请参阅"用户过滤器"。 50 - 示例:uid 51 - 适用于Microsoft Active Directory(AD)的示例:`sAMAccountName` 52 53 - 名字属性(可选) 54 55 - 用户LDAP记录中包含用户名字的属性。将用于填充他们的账户信息。 56 - 示例:givenName 57 - 姓氏属性(可选) 58 - 用户LDAP记录中包含用户姓氏的属性。将用于填充他们的账户信息。 59 - 示例:`sn` 60 61 - 电子邮件属性 **(必选)** 62 - 用户LDAP记录中包含用户电子邮件地址的属性。将用于填充他们的账户信息。 63 - 示例:`mail` 64 65 ### LDAP(via BindDN) 66 67 需要额外设置以下字段: 68 69 - 绑定DN (可选) 70 71 - 搜索用户时绑定到LDAP服务器的DN。这可以留空以执行匿名搜索。 72 - 示例: `cn=Search,dc=mydomain,dc=com` 73 74 - 绑定密码 (可选) 75 76 - 上述指定的Bind DN(绑定区别名)的密码,如果有的话。注意:该密码在服务器上使用SECRET_KEY进行加密存储。仍然建议确保Bind DN具有尽可能少的权限。 77 78 - 用户搜索基准 **(必选)** 79 80 - 这是用于搜索用户帐户的LDAP基础路径. 81 - 示例: `ou=Users,dc=mydomain,dc=com` 82 83 - 用户过滤规则 **(必选)** 84 - LDAP 过滤器声明如何查找试图进行身份验证的用户记录 85 `%[1]s`匹配参数将替换为登录表单中给出的登录名 86 - 示例: `(&(objectClass=posixAccount)(|(uid=%[1]s)(mail=%[1]s)))` 87 - 示例 for Microsoft Active Directory (AD): `(&(objectCategory=Person)(memberOf=CN=user-group,OU=example,DC=example,DC=org)(sAMAccountName=%s)(!(UserAccountControl:1.2.840.113556.1.4.803:=2)))` 88 - 如需多次替换,应使用 `%[1]s`,例如在将提供的登录名与多个属性(如用户标识符、电子邮件甚至电话号码)进行匹配时。 89 - 示例: `(&(objectClass=Person)(|(uid=%[1]s)(mail=%[1]s)(mobile=%[1]s)))` 90 - 启用用户同步 91 - 这个选项启用了一个周期性任务,用于将Gitea用户与LDAP服务器进行同步。默认的同步周期是每24小时, 92 但您可以在app.ini文件中进行更改。 93 有关此部分的详细说明,请参阅[sample 94 app.ini](https://github.com/go-gitea/gitea/blob/main/custom/conf/app.example.ini) 95 的_cron.sync_external_users_ 部分的注释。前面提到的_User Search Base_和_User Filter_ 96 设置将限制哪些用户可以使用Gitea以及哪些用户将被同步。 97 在初始运行任务时,将根据给定的设置创建所有与LDAP匹配的用户,因此在使用大型企业LDAP目录时需要小心。 98 99 ### LDAP(simple auth) 100 101 需要额外设置以下字段: 102 103 - 用户DN **(必选)** 104 105 - 用作用户 DN 的模板。匹配参数 `%s` 将替换为登录表单中的登录名。 106 - 示例: `cn=%s,ou=Users,dc=mydomain,dc=com` 107 - 示例: `uid=%s,ou=Users,dc=mydomain,dc=com` 108 109 - 用户搜索基准 (可选) 110 111 - 用户搜索基准声明哪些用户帐户将被搜索. 112 - 示例: `ou=Users,dc=mydomain,dc=com` 113 114 - 用户过滤规则 **(必选)** 115 - LDAP 过滤器声明何时允许用户登录 116 `%[1]s`匹配参数将替换为登录表单中给出的登录名。 117 - 示例: `(&(objectClass=posixAccount)(|(cn=%[1]s)(mail=%[1]s)))` 118 - 示例: `(&(objectClass=posixAccount)(|(uid=%[1]s)(mail=%[1]s)))` 119 120 ### 使用LDAP验证分组成员 121 122 使用以下字段: 123 124 - 群组搜索基础DN(可选) 125 - 组使用的 LDAP DN。 126 - 示例: `ou=group,dc=mydomain,dc=com` 127 128 - 组名过滤器 (可选) 129 130 - LDAP 过滤器,声明如何在上述 DN 中查找有效组。 131 - 示例: `(|(cn=gitea_users)(cn=admins))` 132 133 - 组中的用户属性 (可选) 134 135 - 组中列出了哪个用户的 LDAP 属性。 136 - 示例: `uid` 137 138 - 用户组属性 (可选) 139 - 哪个组的 LDAP 属性包含一个高于用户属性名称的数组。 140 - 示例: `memberUid` 141 142 ## 可插拔式认证模块(Pluggable Authentication Module,PAM) 143 144 这个过程启用了PAM(Pluggable Authentication Modules)认证。用户仍然可以通过用户管理手动添加到系统中。 145 PAM提供了一种机制,通过对用户进行PAM认证来自动将其添加到当前数据库中。为了与普通的Linux密码一起使用, 146 运行Gitea的用户还必须具有对`/etc/shadow`的读取权限,以便在使用公钥登录时检查账户的有效性。 147 148 **注意**:如果用户已将SSH公钥添加到Gitea中,使用这些密钥可能会绕过登录检查系统。因此, 149 如果您希望禁用使用PAM进行身份验证的用户,应该在Gitea中手动禁用该账户,使用内置的用户管理功能。 150 151 1. 配置和安装准备. 152 - 建议您创建一个管理用户. 153 - 建议取消自动注册. 154 1. 一旦数据库已初始化完成,使用新创建的管理员账户登录. 155 1. 导航至用户设置(右上角的图标),然后选择 156 `Site Administration` -> `Authentication Sources`, 并选择 157 `Add Authentication Source`. 158 1. 填写字段如下: 159 - 认证类型:`PAM`。 160 - 名称:任何有效的值都可以,如果您愿意,可以使用"System Authentication"。 161 - PAM服务名称:从/etc/pam.d/目录下选择适用于所需认证的正确文件[^1]。 162 - PAM电子邮件域:用户认证时要附加的电子邮件后缀。例如,如果登录系统期望一个名为gituse的用户, 163 并且将此字段设置为mail.com,那么Gitea在验证一个GIT实例的用户时将期望user emai字段为gituser@mail.com[^2]。 164 165 **Note**: PAM 支持通过[build-time flags](installation/from-source.md#build)添加, 166 而官方提供的二进制文件通常不会默认启用此功能。PAM需要确保系统上有必要的libpam动态库,并且编译器可以访问必要的PAM开发头文件。 167 168 [^1]: 例如,在Debian "Bullseye"上使用标准Linux登录,可以使用`common-session-noninteractive`。这个值对于其他版本的Debian, 169 包括Ubuntu和Mint,可能也是有效的,请查阅您所使用发行版的文档以确认。 170 171 [^2]: **PAM的必选项** 请注意:在上面的示例中,用户将作为`gituser`而不是`gituser@mail.com`登录到Gitea的Web界面。 172 173 ## 简单邮件传输协议(Simple Mail Transfer Protocol,SMTP) 174 175 此选项允许 Gitea 以 Gitea 用户身份登录 SMTP 主机。请设置以下字段: 176 177 - 身份验证名称 **(必选)** 178 - 分配给新授权方法的名称 179 180 - SMTP 验证类型 **(必选)** 181 - 用于连接 SMTP 主机的验证类型,plain 或 login 182 183 - 主机名 **(必选)** 184 185 - SMTP 服务的主机地址 186 - 例如:`smtp.mydomain.com` 187 188 - 端口号 **(必选)** 189 190 - SMTP 服务的端口号 191 - 例如: `587` 192 193 - 允许的域名 194 195 - 如果使用公共 SMTP 主机或有多个域的 SMTP 主机,限制哪些域可以登录 196 限制哪些域可以登录。 197 - 示例: `gitea.com,mydomain.com,mydomain2.com` 198 199 - 强制使用 SMTPS 200 - 默认情况下将使用SMTPS连接到端口465.如果您希望将smtp用于其他端口,自行设置 201 - 否则,如果服务器提供' STARTTLS '扩展名,则将使用此扩展名 202 - 跳过 TLS 验证 203 - 禁用 TLS 验证身份. 204 - 该认证源处于激活状态 205 - 启用或禁用此身份验证源 206 207 ## FreeIPA 208 209 - 要使用 FreeIPA 凭据登录 Gitea,需要为 Gitea 创建一个绑定帐户。 210 创建一个绑定帐户: 211 - 在FreeIPA服务器上创建一个gitea.ldif文件,并将`dc=example,dc=com`替换为您的`dn`,然后提供一个适当安全的密码。 212 213 ```sh 214 dn: uid=gitea,cn=sysaccounts,cn=etc,dc=example,dc=com 215 changetype: add 216 objectclass: account 217 objectclass: simplesecurityobject 218 uid: gitea 219 userPassword: secure password 220 passwordExpirationTime: 20380119031407Z 221 nsIdleTimeout: 0 222 ``` 223 224 - 导入LDIF文件(如果需要,请将localhost更改为IPA服务器)。系统会提示您输入Directory Manager的密码。: 225 226 ```sh 227 ldapmodify -h localhost -p 389 -x -D \ 228 "cn=Directory Manager" -W -f gitea.ldif 229 ``` 230 231 - 为`gitea_users`添加IPA组: 232 233 ```sh 234 ipa group-add --desc="Gitea Users" gitea_users 235 ``` 236 237 - **提示**:对于IPA凭证错误,运行' kinit admin '并提供域管理帐户密码. 238 - 以管理员身份登录Gitea,点击Admin Panel下的`Authentication`。然后单击`Add New Source`并填写详细信息,更改所有适当的地方。 239 240 ## SPNEGO with SSPI (Kerberos/NTLM, for Windows only) 241 242 Gitea支持通过Windows内置的安全支持提供程序接口(Security Support Provider Interface,SSPI)实现SPNEGO单点登录认证(由RFC4559定义的方案),用于服务器的Web部分。SSPI仅在Windows环境中工作,即当服务器和客户端都在Windows操作系统上运行时。 243 244 在激活SSPI单点登录认证(SSO)之前,您需要准备您的环境: 245 246 - 在Active Directory中创建一个单独的用户账户,gitea.exe 进程将在该账户下运行(例如,在domain.local域下创建一个名为user的账户: 247 - 为运行gitea.exe的主机创建一个服务主体名称(Service Principal Name,SPN),其类别为HTTP: 248 249 - 以特权域用户(例如域管理员)的身份启动“命令提示符”或“PowerShell”。 250 - 运行下面的命令,将host.domain.local替换为Web应用程序将运行的服务器的完全限定域名(FQDN),将domain\user替换为在前一步中创建的账户名称: 251 252 ```sh 253 setspn -A HTTP/host.domain.local domain\user 254 ``` 255 256 在遵循上述步骤之前,请确保您按照以下流程进行操作: 257 258 1. 用之前创建的用户登录(如果已经登录,请先注销)。 259 2. 确保在`custom/conf/app.ini`文件的`[server]`部分中,`ROOT_URL`设置为Web应用程序将运行的服务器的完全限定域名(FQDN),与之前创建服务主体名称时使用的一致(例如,`host.domain.local`)。 260 3. 启动Web服务器(运行 `gitea.exe web`)。 261 4. 在 `Site Administration -> Authentication Sources` 中添加一个 `SPNEGO with SSPI` 认证源,以启用SSPI认证。 262 5. 在域中的客户端计算机上,使用任何域用户登录(与运行`gitea.exe`的服务器不同)。 263 6. 如果您使用Chrome或Edge浏览器,请将Web应用程序的URL添加到“本地站点”(`Internet选项 -> 安全 -> 本地站点 -> 站点`)。 264 7. 启动Chrome或Edge浏览器,导航到Gitea的FQDN URL(例如,`http://host.domain.local:3000`)。 265 8. 在控制面板中点击“Sign In”按钮,然后选择SSPI,将会自动使用当前登录到计算机的用户进行登录。 266 9. 如果无法正常工作,请确保: 267 - 您不是在运行`gitea.exe`的同一台服务器上运行Web浏览器。应该在与服务器不同的域加入计算机(客户端)上运行Web浏览器。如果客户端和服务器都在同一台计算机上运行,则NTLM将优先于Kerberos。 268 - 主机上只有一个`HTTP/...`的SPN。 269 - SPN中只包含主机名,不包含端口号。 270 - 将Web应用程序的URL添加到"本地站点"。 271 - 服务器和客户端的时钟差异不超过5分钟(取决于组策略)。 272 - 在Internet Explorer中启用了"集成Windows身份验证"(在"高级设置"下)。 273 274 遵循这些步骤,您应该能够成功启用和使用SSPI单点登录认证(SSO)。 275 276 ## 反向代理认证 277 278 Gitea 支持通过读取反向代理传递的 HTTP 头中的登录名或者 email 地址来支持反向代理来认证。默认是不启用的,你可以用以下配置启用。 279 280 ```ini 281 [service] 282 ENABLE_REVERSE_PROXY_AUTHENTICATION = true 283 ``` 284 285 默认的登录用户名的 HTTP 头是 `X-WEBAUTH-USER`,你可以通过修改 `REVERSE_PROXY_AUTHENTICATION_USER` 来变更它。如果用户不存在,可以自动创建用户,当然你需要修改 `ENABLE_REVERSE_PROXY_AUTO_REGISTRATION=true` 来启用它。 286 287 默认的登录用户 Email 的 HTTP 头是 `X-WEBAUTH-EMAIL`,你可以通过修改 `REVERSE_PROXY_AUTHENTICATION_EMAIL` 来变更它。如果用户不存在,可以自动创建用户,当然你需要修改 `ENABLE_REVERSE_PROXY_AUTO_REGISTRATION=true` 来启用它。你也可以通过修改 `ENABLE_REVERSE_PROXY_EMAIL` 来启用或停用这个 HTTP 头。 288 289 如果设置了 `ENABLE_REVERSE_PROXY_FULL_NAME=true`,则用户的全名会从 `X-WEBAUTH-FULLNAME` 读取,这样在自动创建用户时将使用这个字段作为用户全名,你也可以通过修改 `REVERSE_PROXY_AUTHENTICATION_FULL_NAME` 来变更 HTTP 头。 290 291 你也可以通过修改 `REVERSE_PROXY_TRUSTED_PROXIES` 来设置反向代理的IP地址范围,加强安全性,默认值是 `127.0.0.0/8,::1/128`。 通过 `REVERSE_PROXY_LIMIT`, 可以设置最多信任几级反向代理。 292 293 注意:反向代理认证不支持认证 API,API 仍旧需要用 access token 来进行认证。