参考文档: https://docs.sonarqube.org/latest/instance-administration/security/ 。
Tổng quan
SonarQube具有许多全局安全功能
除此之外,还可在group/user级别配置
- 查看一个已存在的项目
- 访问项目的源代码
- 管理一个项目(设置排除模式,调整该项目的插件配置等)
- 管理质量配置,质量阈,实例…
安全性的另一个方面是对密码等设置进行加密。SonarQube提供了一种内置的机制来加密设置.
认证
https://docs.sonarsource.com/sonarqube/latest/instance-administration/security/#authentication 匿名用户是否可以浏览SonarQube实例?当然不行!那就需要强制用户认证.
强制用户身份验证可防止匿名用户通过Web API访问Sonar Qube UI或项目数据。一些特定的只读Web API,包括提示身份验证所需的API,仍然可以匿名使用。 禁用此设置可能会使实例面临安全风险.
认证机制
可通过多种方式来管理认证机制
- 通过SonarQube內建的user/group数据库
- 通过外部程序(如LDAP)
- 通过HTTP headers
Sonar用户
当你在SonarQube数据库中创建用户时,他将被视为本地用户,并且针对SonarQube自己的user/group数据库进行身份认证,而不是通过任何外部工具。 默认情况下,admin是本地账户。 同样,所有非本地(non-local)账户将仅针对外部工具进行身份认证.
管理员可以管理所有用户的 Tokens ——创建和删除。一旦创建,Token就是运行分析所需的唯一凭证,作为sonar.login属性的值来传递.
默认管理员凭据
当安装SonarQube时,会自动创建具有管理系统权限的默认用户: user: admin/passwd: admin 。
恢复管理员访问权限
如果你修改了管理员密码,但又忘记了
USE sonar; update users set crypted_password ='$2a$12$uCkkXmhW5ThVK8mpBvnXOOJRLd64LJeHTeCkSuB3lfaR2N0AYBaSi', salt=null, hash_method='BCRYPT' where login ='admin'
如果您删除了管理员并随后锁定了具有全局管理权限的其他用户
insert into user_roles(uuid, user_uuid, role) values ('random-uuid', (select uuid from users where login='mylogin'), 'admin');
授权
在SonarQube中实现授权的方式是非常标准的。可以根据需要创建任意数量的用户和用户组。然后,可以将用户附加到(或不附加)到(多个)组。然后向组和/或用户授予(多个)权限。这些权限授予对项目、服务和功能的访问权限。 对不同组、不同用于仅限权限分配,以访问不同的资源.
- Người sử dụng
- Nhóm
- Global Permissions
- Administer System
- Administer Quality Profiles
- Administer Quality Gates
- Execute Analysis
- Create Projects
- Create Applications
- Create Portfolios
- Project Permissions
- Public and Private
- Administer Issues
- Administer Security Hotspots
- Administer
- Execute Analysis
- Private
相关配置
强制要求必须登录SonarQube
用管理员账号登录SonarQube,打开Administration > Configuration > General Settings > Security,开启Force user authentication,点击Save保存生效。 开启该选项后,不允许匿名运行mvn sonar:sonar代码扫描,必须提供SonarQube Token.
修改默认的项目可见性为private
用管理员账号登录SonarQube,打开Administration > Projects > Management,修改Default visibility of new projects为private.
这样新建项目后,只有该项目的授权用户才能看到该项目的代码。 对已有的项目,打开项目级别的Adminstration > Permissions,手工修改项目可见性.
去掉Anyone组的权限
用管理员账号登录SonarQube,打开Administration > Security > Global Permissions,去掉Anyone组的所有权限。 最新版本(v10.2.1.78527)AnyOne组已废弃 。
去掉Project Creator的权限
用管理员账号登录SonarQube,打开Administration > Security > Permission Templates,打开Default template,去掉Project Creator的所有权限.
生成用户Token
用该用户登录SonarQube,打开MyAccount > Security,来生成一个Token。 在按项目作多租户隔离的场景,需要为每个项目在SonarQube上创建一个用户,并使用该用户的Token来作代码扫描.
设置项目账号权限
用管理员账号登录SonarQube,打开项目级别的Adminstration > Permissions,选择Users,输入用户名称查询,然后设置该用户权限.
在按项目作多租户隔离的场景,需要为每个项目在SonarQube上创建一个用户,并设置只有该用户才有相应权限.
默认权限的权限模板
https://docs.sonarsource.com/sonarqube/latest/instance-administration/security/#permission-templates-for-default-permissions 。
SonarQube附带默认权限模板,该模板在创建项目,项目组合或应用程序自动授予特定组的特定权限。管理员可以编辑此模板.
使用sonar扫描新项目后,如果要做角色管理,可以在sonarqube控制台为项目指定权限模板以分配角色权限,但是每次扫描新项目都通过手动添加,特别是项目多的情况下,显然是不方便的.
sonarqube在创建新权限模板的时候,提供了Project Key Pattern(项目标识模式)功能,可以通过其正则表达式将权限模板自动授予到project_key符合的项目 。
- Chọn "Cấu hình-Quyền-Mẫu cấp phép" để tạo mẫu mới
- Đặt tên, mô tả, mẫu nhận dạng dự án (sử dụng biểu thức chính quy của sonarqube)
.* có nghĩa là khớp 0 với nhiều ký tự hơn (ps: Điều này khác với phương pháp khớp mờ (*) phổ biến của biểu thức chính quy. [a,b] khớp với bất kỳ ký tự nào trong miền.
giống:
.*test.* có thể khớp các dự án ở dạng khóa dự án: citestpipe, ci-test-pipe, v.v. *[-,_]test.* có thể khớp các dự án ở dạng khóa dự án: ci-test-pipe, ci_test, v.v.
sử dụng nút "Tạo" trên Quản trị > Bảo mật > Mẫu quyền. Có thể cung cấp mẫu khóa Dự án.
Đặc biệt chú ý:
- Trước tiên, bạn cần định cấu hình mẫu quyền và đặt nhóm nào có thể có quyền nào. Ví dụ: đặt nhóm ABC để có quyền truy cập vào tất cả các dự án có tiền tố ABC.
- Sau đó thực hiện quét mã và tên dự án được tạo phải khớp với tiền tố ABC
- Cuối cùng, chỉ các thành viên của nhóm ABC mới có thể truy cập các mục quét có tiền tố ABC, vì mối quan hệ ràng buộc quyền đã được thiết lập trước.
Nếu cài đặt như vậy chưa được thực hiện trước đó, các dự án quét được tạo trước đây sẽ không kế thừa mối quan hệ đó theo mặc định và phải được ủy quyền lại theo cách thủ công. Giải thích chính thức:
Mặc dù các mẫu có thể được áp dụng sau khi dự án được tạo, nhưng việc áp dụng mẫu có chứa quyền của Người tạo cho dự án/danh mục đầu tư/ứng dụng hiện có sẽ không cấp các quyền liên quan cho người tạo ban đầu của dự án vì liên kết không được lưu trữ. ** Xin lưu ý rằng không có mối quan hệ nào giữa dự án và mẫu quyền, có nghĩa là:
- Sau khi áp dụng mẫu quyền cho dự án, bạn có thể sửa đổi quyền của dự án.
- Khi bạn sửa đổi mẫu quyền, không có quyền dự án nào bị thay đổi.
3. Đặt quyền vai trò cho người dùng/nhóm người dùng đối với mẫu.
- Sau khi cài đặt hoàn tất, bạn có thể thấy rằng có một mẫu mới trong mẫu quyền.
Sau khi đặt mẫu quyền, các dự án mới được quét sẽ tự động được gán quyền vai trò miễn là khóa dự án khớp với các quy tắc thông thường. Không cần thiết lập thủ công thông qua "Cấu hình-Dự án-Quản lý dự án".
Cuối cùng, bài viết này về cấu hình xác thực và ủy quyền dòng SonarQube kết thúc tại đây. Nếu bạn muốn biết thêm về cấu hình xác thực và ủy quyền dòng SonarQube, vui lòng tìm kiếm bài viết CFSDN hoặc tiếp tục duyệt các bài viết liên quan. tương lai! .
Tôi là một lập trình viên xuất sắc, rất giỏi!