gitea清理垃圾账户和仓库
前情提要
由于本人需要在多个设备上同步一些个人的代码,有些时候需要给朋友展示一些内容(主要是写的readme,即如何使用),所以在个人的服务器上部署了1Panel,然后应用商店安装了gitea,但是近日突然发现我的gitea上面有近2W个账户,并且下面都是一些垃圾信息的git仓库。所以,想起来,我并没有关闭注册,原本想着给朋友注册用的,但是我还是太嫩了,忽略了脚本攻击的威力。不幸中招,那就清理吧。
第一步:关闭注册
在我的部署环境下(1panel+应用商店部署gitea),在/opt/1panel/apps/gitea/gitea/data/gitea/conf
目录下可以看到gitea的app.ini
文件。
修改它的内容,主要是以下内容:
[service]
DISABLE_REGISTRATION = true
REQUIRE_SIGNIN_VIEW = false
第一个是关闭注册,一定要关闭 ,非常重要。
第二个是不登陆是否能看见,如果纯个人用,可以关闭,但是我需要展示,所以暂时先不关了。
第二步:清理垃圾
这里借鉴了网上一位大佬的脚本文件
Gitea-垃圾用户处理办法
不过,我这里因为gitea是部署在docker内的,需要借助HOST机器的python3的,同时还要安装对应的包sudo python3 -m pip install requests
然后我也用AI工具对脚本稍微修改了一下
#!/usr/bin/env python3
import requests
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
# ========== 配置区 ==========
gitea_url = 'https://gitea.url' # 末尾不要带斜杠
api_token = 'API Token'
keep_user = {'hulk, 'admin'} # 需要保留的账号
# ========== 配置结束 ==========
headers = {
'Authorization': f'token {api_token}'
}
def delete_user_repositories(username: str) -> None:
"""删除指定用户的全部仓库"""
repos_api = f'{gitea_url}/api/v1/users/{username}/repos'
resp = requests.get(repos_api, headers=headers, verify=False)
if resp.status_code != 200:
print(f' [WARN] 获取 {username} 的仓库失败,HTTP {resp.status_code}')
return
for repo in resp.json():
repo_name = repo['name']
del_repo_api = f'{gitea_url}/api/v1/repos/{username}/{repo_name}'
r = requests.delete(del_repo_api, headers=headers, verify=False)
if r.status_code == 204:
print(f' [OK] 删除仓库 {username}/{repo_name}')
else:
print(f' [ERR] 删除仓库 {username}/{repo_name} 失败,HTTP {r.status_code}')
def main() -> None:
users_api = f'{gitea_url}/api/v1/admin/users'
resp = requests.get(users_api, headers=headers, verify=False)
if resp.status_code != 200:
print(f'[ERR] 获取用户列表失败,HTTP {resp.status_code}')
return
for user in resp.json():
username = user['username']
if username == keep_user:
print(f'[SKIP] 保留用户 {username}')
continue
print(f'[PROC] 处理用户 {username}')
delete_user_repositories(username)
del_user_api = f'{gitea_url}/api/v1/admin/users/{username}'
r = requests.delete(del_user_api, headers=headers, verify=False)
if r.status_code == 204:
print(f'[OK] 删除用户 {username}')
else:
print(f'[ERR] 删除用户 {username} 失败,HTTP {r.status_code}')
if __name__ == '__main__':
main()
第三步:补充信息
在脚本的前面几行,可以看见,需要你填入你的gitea的地址,后面千万不要有/
,然后需要你用管理员账户在网站的设置里面创建一个全部权限的token,然后复制到配置的第二行,最后,第三行,填写你要保留的账户即可。
第四步:开始清理
使用python3调用前面的脚本即可
python3 clean.py
结语
我的垃圾清理就一个多小时,以后任何开放在网络上的应用,都要注意网络安全,并且这种非事故性的安全也是安全啊,说多了都是泪。。。大家多多注意。