chore:普通用户提权后的忽略文件存放到用户目录下

This commit is contained in:
2025-10-06 14:59:13 +08:00
parent 207d42153f
commit c6b1bcf4a8
2 changed files with 21 additions and 2 deletions

View File

@@ -14,8 +14,25 @@ IgnoreConfig::IgnoreConfig(QObject *parent)
// 检查是否以 root 权限运行
if (geteuid() == 0) {
// 以 root 权限运行,使用 root 的配置目录
configDir = "/root/.config";
// 首先检查是否有 SUDO_USER_HOME 环境变量(表示是通过 pkexec 提权的普通用户)
QByteArray sudoUserHomeEnv = qgetenv("SUDO_USER_HOME");
if (!sudoUserHomeEnv.isEmpty()) {
// 通过 pkexec 提权的普通用户,使用原用户的配置目录
QString sudoUserHomePath = QString::fromLocal8Bit(sudoUserHomeEnv);
configDir = sudoUserHomePath + "/.config";
} else {
// 获取实际的 HOME 目录来判断是真正的 root 用户还是其他方式提权的用户
QByteArray homeEnv = qgetenv("HOME");
QString homePath = QString::fromLocal8Bit(homeEnv);
if (homePath == "/root") {
// 真正的 root 用户,使用 /root/.config
configDir = "/root/.config";
} else {
// 其他方式提权的用户,使用 HOME 目录下的配置
configDir = homePath + "/.config";
}
}
} else {
// 普通用户,使用标准配置目录
configDir = QStandardPaths::writableLocation(QStandardPaths::ConfigLocation);

View File

@@ -16,11 +16,13 @@ bool elevateToRoot() {
QByteArray display = qgetenv("DISPLAY");
QByteArray xauthority = qgetenv("XAUTHORITY");
QByteArray home = qgetenv("HOME"); // 获取原始用户的 HOME 目境变量
QStringList args;
args << "env"
<< "DISPLAY=" + display
<< "XAUTHORITY=" + xauthority
<< "SUDO_USER_HOME=" + home // 传递原始用户的 HOME 路径
<< program;
QProcess process;