Revert "feat: 集成 security-loader 加强安全" 及相关提交 — 回退安全启动方案 - #1214
Conversation
|
[APPROVALNOTIFIER] This PR is NOT APPROVED This pull-request has been approved by: fly602 The full list of commands accepted by this bot can be found here. DetailsNeeds approval from an approver in each of these files:Approvers can indicate their approval by writing |
Reviewer's GuideReverts the security-loader based secure startup integration and AllowCaller-based authorization, simplifying power, airplane mode, input devices, and system/session daemon flows back to polkit/DBus-based access control and the previous install layout, while keeping short-idle and power features functional under the older model. Sequence diagram for AirplaneMode authorization reverted to direct polkitsequenceDiagram
actor Client
participant AirplaneModeManager as AirplaneMode_Manager
participant SystemBus as DBus_SystemBus
participant PolkitAuthority as Polkit_Authority
Client->>AirplaneModeManager: Enable(sender, enableAirplaneMode)
AirplaneModeManager->>AirplaneModeManager: checkAuthorization(actionId, string(sender))
AirplaneModeManager->>SystemBus: SystemBus()
SystemBus-->>AirplaneModeManager: systemBus
AirplaneModeManager->>PolkitAuthority: NewAuthority(systemBus)
AirplaneModeManager->>PolkitAuthority: CheckAuthorization(actionId, subject)
PolkitAuthority-->>AirplaneModeManager: AuthorizationResult
alt authorized
AirplaneModeManager->>AirplaneModeManager: block(rfkillTypeAll, enableAirplaneMode)
AirplaneModeManager-->>Client: *dbus.Error(nil)
else not authorized
AirplaneModeManager-->>Client: *dbus.Error("not authorized")
end
Sequence diagram for system idle state handling via systemPowersequenceDiagram
actor Client
participant SystemDaemon as DdeSystemDaemon
participant SystemPower as SystemPower_Power
participant IdleFile as KernelIdleFile
Client->>SystemDaemon: SetIdleState(state)
SystemDaemon->>SystemDaemon: setState(idleStatePath, state)
SystemDaemon->>SystemPower: ShortIdleState().Get(0)
SystemPower-->>SystemDaemon: shortIdleState
alt shortIdleState == state
SystemDaemon-->>Client: *dbus.Error("Short idle state not exchange.")
else shortIdleState != state
alt file == idleStatePath
SystemDaemon->>SystemDaemon: systemPowerSetShortIdleState(state)
SystemDaemon->>SystemPower: SetShortIdleState(0, state)
SystemPower-->>SystemDaemon: error or nil
end
SystemDaemon->>IdleFile: ReadFile(file)
IdleFile-->>SystemDaemon: content
SystemDaemon->>IdleFile: WriteFile(file, newContent)
IdleFile-->>SystemDaemon: ok
SystemDaemon-->>Client: *dbus.Error(nil)
end
File-Level Changes
Tips and commandsInteracting with Sourcery
Customizing Your ExperienceAccess your dashboard to:
Getting Help
|
deepin pr auto review★ 总体评分:10分■ 【总体评价】
■ 【详细分析】
■ 【改进建议代码示例】 // bin/dde-system-daemon/power.go
package main
import (
"errors"
"fmt"
"io/ioutil"
"strconv"
"github.com/godbus/dbus/v5"
systemPower "github.com/linuxdeepin/go-dbus-factory/system/org.deepin.dde.power1"
polkit "github.com/linuxdeepin/go-dbus-factory/system/org.freedesktop.policykit1"
"github.com/linuxdeepin/go-lib/dbusutil"
"github.com/linuxdeepin/go-lib/utils"
)
func (d *Daemon) systemPowerSetShortIdleState(state bool) {
logger.Info("systemPowerSetShortIdleState : ", state)
if d.systemPower != nil {
err := d.systemPower.SetShortIdleState(0, state)
if err != nil {
logger.Warning("failed to SetShortIdleState, err : ", err)
}
}
}
func (d *Daemon) setState(file string, state bool) error {
// 修复逻辑错误:仅在处理 idleStatePath 时检查短空闲状态
if file == d.idleStatePath {
shortIdleState, err := d.systemPower.ShortIdleState().Get(0)
if err != nil {
logger.Warning("Get systemPower.ShortIdleState err :", err)
} else {
logger.Infof("setState shortIdleState : %v, state : %v", shortIdleState, state)
if shortIdleState == state {
logger.Info("shortIdleState is same with state : ", state)
return errors.New("short idle state not exchange")
}
d.systemPowerSetShortIdleState(state)
}
}
if !utils.IsFileExist(file) {
err := fmt.Errorf("%s not found", file)
logger.Warning(err)
return err
}
content, err := ioutil.ReadFile(file)
if err != nil {
logger.Errorf("Failed to read file %s: %v", file, err)
return err
}
contentStr := strings.TrimSpace(string(content))
currentValue, err := strconv.Atoi(contentStr)
if err != nil {
logger.Errorf("Failed to parse content %s: %v", contentStr, err)
return err
}
newValue := 0
if state {
newValue = 1
}
if currentValue == newValue {
logger.Infof("State %s is already %v", file, state)
return nil
}
newContent := strconv.Itoa(newValue)
err = ioutil.WriteFile(file, []byte(newContent), 0644)
if err != nil {
logger.Errorf("Failed to write file %s: %v", file, err)
return err
}
return nil
}
// checkPolkitAuth 通用的 Polkit 鉴权函数
func (d *Daemon) checkPolkitAuth(sender dbus.Sender, actionID string) error {
authority := polkit.NewAuthority(d.service.Conn())
subject := polkit.MakeSubject(polkit.SubjectKindSystemBusName)
subject.SetDetail("name", string(sender))
result, err := authority.CheckAuthorization(0, subject, actionID,
nil, polkit.CheckAuthorizationFlagsAllowUserInteraction, "")
if err != nil {
return fmt.Errorf("polkit check failed: %w", err)
}
if !result.IsAuthorized {
return errors.New("access denied by polkit")
}
return nil
}
// 修复安全漏洞:恢复 SetIdleState 的 sender 鉴权
func (d *Daemon) SetIdleState(sender dbus.Sender, state bool) *dbus.Error {
if err := d.checkPolkitAuth(sender, "org.deepin.dde.daemon.set-idle-state"); err != nil {
logger.Warningf("SetIdleState authorization failed: %v", err)
return dbusutil.ToError(err)
}
logger.Infof("SetIdleState %s try set state: %v", d.idleStatePath, state)
return dbusutil.ToError(d.setState(d.idleStatePath, state))
}
// 修复安全漏洞:恢复 SetScreenState 的 sender 鉴权
func (d *Daemon) SetScreenState(sender dbus.Sender, state bool) *dbus.Error {
if err := d.checkPolkitAuth(sender, "org.deepin.dde.daemon.set-screen-state"); err != nil {
logger.Warningf("SetScreenState authorization failed: %v", err)
return dbusutil.ToError(err)
}
logger.Infof("SetScreenState %s try set state: %v", d.idleScreenStatePath, state)
return dbusutil.ToError(d.setState(d.idleScreenStatePath, state))
} |
|
@fly602: The following test failed, say
Full PR test history. Your PR dashboard. DetailsInstructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. I understand the commands that are listed here. |
回退 security-loader 安全启动方案及其相关提交,包括:
原因
该方案影响范围过广,涉及 dde-session-daemon、dde-system-daemon、langselector、polkit 策略、systemd 服务等多处改动,且与 V25 项目当前架构存在不匹配之处,不适合在此阶段落地。如果上层应用适配会影响其项目架构。
后续计划
需重新评估安全方案的整体设计,制定更契合 V25 架构的分阶段实施方案。