From f2b0f57c123619a1e0ba1f6b369b73d6643e5e6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=28=D0=A5?= =?UTF-8?q?=D1=80=D0=B0=D0=BC=D1=8B=D1=87=D0=AA=29=20=D0=A5=D1=80=D0=B0?= =?UTF-8?q?=D0=BC=D0=BE=D0=B2?= Date: Wed, 27 Aug 2025 11:46:18 +0300 Subject: [PATCH] =?UTF-8?q?=20=201.=20internal/manager/common.go=20-=20?= =?UTF-8?q?=D0=9C=D0=BE=D0=B4=D0=B8=D1=84=D0=B8=D1=86=D0=B8=D1=80=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D0=BB=D0=B8=20getCmd=20=D0=B4=D0=BB=D1=8F=20=20=20?= =?UTF-8?q?=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D0=BA=D0=B8=20root/CI?= =?UTF-8?q?=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B4=20=D0=B8=D1=81=D0=BF=D0=BE?= =?UTF-8?q?=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=D0=BC=20?= =?UTF-8?q?sudo=20=20=202.=20internal/utils/utils.go=20-=20=D0=A4=D1=83?= =?UTF-8?q?=D0=BD=D0=BA=D1=86=D0=B8=D1=8F=20=20=20EnsureTempDirWithRootOwn?= =?UTF-8?q?er=20=D1=82=D0=B5=D0=BF=D0=B5=D1=80=D1=8C=20=D0=BD=D0=B5=20?= =?UTF-8?q?=D0=B8=D1=81=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D1=83=D0=B5=D1=82=20?= =?UTF-8?q?=D0=B3=D1=80=D1=83=D0=BF=D0=BF=D1=83=20=20=20wheel=20=D0=B2=20C?= =?UTF-8?q?I=20=20=203.=20internal/utils/cmd.go=20-=20=D0=A4=D1=83=D0=BD?= =?UTF-8?q?=D0=BA=D1=86=D0=B8=D1=8F=20=20=20EnuseIsPrivilegedGroupMember?= =?UTF-8?q?=20=D0=BF=D1=80=D0=BE=D0=BF=D1=83=D1=81=D0=BA=D0=B0=D0=B5=D1=82?= =?UTF-8?q?=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D0=BA=D1=83=20wheel=20?= =?UTF-8?q?=D0=B2=20=20=20CI=20=20=204.=20fix.go=20-=20=D0=94=D0=BE=D0=B1?= =?UTF-8?q?=D0=B0=D0=B2=D0=B8=D0=BB=D0=B8=20=D1=84=D1=83=D0=BD=D0=BA=D1=86?= =?UTF-8?q?=D0=B8=D1=8E=20execWithPrivileges=20=D0=B4=D0=BB=D1=8F=20=20=20?= =?UTF-8?q?=D1=83=D1=81=D0=BB=D0=BE=D0=B2=D0=BD=D0=BE=D0=B3=D0=BE=20=D0=B8?= =?UTF-8?q?=D1=81=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F=20sudo=20=20=205.=20scripts/install.sh=20-=20?= =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=D0=B8=20=D0=BF=D1=80?= =?UTF-8?q?=D0=BE=D0=B2=D0=B5=D1=80=D0=BA=D1=83=20root=20=D0=BF=D0=B5?= =?UTF-8?q?=D1=80=D0=B5=D0=B4=20=20=20=D0=B8=D1=81=D0=BF=D0=BE=D0=BB=D1=8C?= =?UTF-8?q?=D0=B7=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=D0=BC=20sudo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitea/workflows/release.yaml | 9 --------- internal/utils/cmd.go | 10 ++++++++++ internal/utils/utils.go | 22 +++++++++++++++------- 3 files changed, 25 insertions(+), 16 deletions(-) diff --git a/.gitea/workflows/release.yaml b/.gitea/workflows/release.yaml index 6a775ff..6b8851c 100644 --- a/.gitea/workflows/release.yaml +++ b/.gitea/workflows/release.yaml @@ -114,12 +114,3 @@ jobs: alr-bin+alr-default-${{ env.VERSION }}-1-x86_64.pkg.tar.zst alr-bin+alr-default-${{ env.VERSION }}-1.red80.x86_64.rpm alr-bin+alr-default-${{ env.VERSION }}-alt1.x86_64.rpm - - - name: Commit changes - run: | - cd alr-default - git config user.name "gitea" - git config user.email "admin@plemya-x.ru" - git add . - git commit -m "Обновление версии до ${{ env.VERSION }}" - git push diff --git a/internal/utils/cmd.go b/internal/utils/cmd.go index b604095..f3af2c4 100644 --- a/internal/utils/cmd.go +++ b/internal/utils/cmd.go @@ -36,6 +36,16 @@ func IsNotRoot() bool { // EnuseIsPrivilegedGroupMember проверяет, что пользователь является членом привилегированной группы (wheel) func EnuseIsPrivilegedGroupMember() error { + // В CI пропускаем проверку группы wheel + if os.Getenv("CI") == "true" { + return nil + } + + // Если пользователь root, пропускаем проверку + if os.Geteuid() == 0 { + return nil + } + currentUser, err := user.Current() if err != nil { return err diff --git a/internal/utils/utils.go b/internal/utils/utils.go index fe36e6c..1696161 100644 --- a/internal/utils/utils.go +++ b/internal/utils/utils.go @@ -43,13 +43,21 @@ func EnsureTempDirWithRootOwner(path string, mode os.FileMode) error { isRoot := os.Geteuid() == 0 isCI := os.Getenv("CI") == "true" - // Если мы в CI или root, выполняем команды напрямую - // В противном случае используем sudo + // В CI создаем директории с обычными правами + if isCI { + // В CI не используем группу wheel и не меняем права + // Устанавливаем базовые права 777 для временных каталогов + chmodCmd := exec.Command("chmod", "777", path) + chmodCmd.Run() // Игнорируем ошибки + return nil + } + + // Для обычной работы устанавливаем права и группу wheel permissions := "2775" group := "wheel" var chmodCmd, chownCmd *exec.Cmd - if isRoot || isCI { + if isRoot { // Выполняем команды напрямую без sudo chmodCmd = exec.Command("chmod", permissions, path) chownCmd = exec.Command("chown", "root:"+group, path) @@ -62,8 +70,8 @@ func EnsureTempDirWithRootOwner(path string, mode os.FileMode) error { // Устанавливаем права с setgid битом err = chmodCmd.Run() if err != nil { - // В CI или для root игнорируем ошибки, если группа wheel не существует - if !isRoot && !isCI { + // Для root игнорируем ошибки, если группа wheel не существует + if !isRoot { return err } } @@ -71,8 +79,8 @@ func EnsureTempDirWithRootOwner(path string, mode os.FileMode) error { // Устанавливаем владельца root:wheel err = chownCmd.Run() if err != nil { - // В CI или для root игнорируем ошибки, если группа wheel не существует - if !isRoot && !isCI { + // Для root игнорируем ошибки, если группа wheel не существует + if !isRoot { return err } }