@@ -17,6 +17,262 @@ menu:
17
17
18
18
# 认证
19
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] ( https://docs.gitea.io/en-us/install-from-source/#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.io,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\u ser
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
+
20
276
## 反向代理认证
21
277
22
278
Gitea 支持通过读取反向代理传递的 HTTP 头中的登录名或者 email 地址来支持反向代理来认证。默认是不启用的,你可以用以下配置启用。
@@ -34,4 +290,4 @@ ENABLE_REVERSE_PROXY_AUTHENTICATION = true
34
290
35
291
你也可以通过修改 ` REVERSE_PROXY_TRUSTED_PROXIES ` 来设置反向代理的IP地址范围,加强安全性,默认值是 ` 127.0.0.0/8,::1/128 ` 。 通过 ` REVERSE_PROXY_LIMIT ` , 可以设置最多信任几级反向代理。
36
292
37
- 注意: 反向代理认证不支持认证 API,API 仍旧需要用 access token 来进行认证。
293
+ 注意: 反向代理认证不支持认证 API,API 仍旧需要用 access token 来进行认证。
0 commit comments