Как узнать, входит ли текущий пользователь в определенную группу?

Я попытался воспроизвести эту проблему, но в моем случае загрузка архива кистей и извлечение его в нужное место сработало нормально.

Поэтому я думаю, что ответ на вопрос требует некоторой дополнительной информации. У меня пока недостаточно репутации, чтобы комментировать, поэтому я пишу это как ответ, хотя в первую очередь прошу дополнительную информацию.

  • Какой метод добавления кистей вы используете для GIMP (при условии, что вы используете метод, отличный от того, что я сделал выше)
  • Вы абсолютно уверены, что файлы принадлежат вам и что путь существует?

Можешь попробовать

sudo chown -R $(whoami):users ~/snap/gimp/
chmod -R u+r ~/snap/gimp

, чтобы убедиться, что каталог принадлежит вам и что у вас есть права на чтение содержащихся в нем файлов, но я думаю, что это плохая идея. Я бы не стал рекурсивно переопределять разрешения по умолчанию для всего каталога, как это делается с помощью вышеупомянутой команды, а проверил бы разрешения и права, добавленные к конкретным файлам :

.
ls -la /home/mycrap/snap/gimp/227/.config/GIMP/2.10/brushes/bolts1_HMS.abr

Это должно быть что-то вроде

-rw-r--r--  1 [YOUR USER NAME] users

особ. имеют права чтения, предоставленные пользователю, группе и другим.

Поэтому я был бы признателен, если бы вы предоставили вывод

ls -la /home/mycrap/snap/gimp/227/.config/GIMP/2.10/brushes/bolts1_HMS.abr

и, возможно, также информацию о пользователе, запустившем gimp через

ps aux | grep gimp

Надеюсь, я никоим образом не оскорбил вас, попросив перепроверить разрешения, трудно угадать уровень опыта, и, поскольку это кажется прямой -проблемой прямого разрешения, я думаю, что лучше всего двойная -проверка.

0
15.11.2020, 01:21
1 ответ

Если вы хотите узнать, что текущий процесс имеет один из своих реальных gid, эффективный gid или любой дополнительный gid, совпадающий с именем данной группы, в системе GNU вы можете сделать:

if
  gid=$(set -o pipefail; getent -- group "$group" | cut -d: -f3) &&
    id -G | grep -qwe "$gid"
then
  printf '%s\n' "current process credentials include $group's id ($gid)"
fi

Или сperl:

perl -se 'if (@g = getgrnam($group)) {
            for (split " ", $)) {exit if $_ == $g[2]}
          }
          exit 1' -- -group="$group"

Чтобы проверить, что данный $userуказан как член данной группы или что его первичный gid соответствует идентификатору $group, вы должны сделать то же самое, но с id -G -- "$user"вместо id -G, но он может сказать, что $userявляется членом $group, даже если они не указаны как один из его членов, если они являются членами другой группы с таким же gid.

Помните, что в базах данных passwdи groupключ является именем пользователя/группы, а не идентификатором, и несколько пользователей/групп могут иметь один и тот же идентификатор. Таким образом, подходы, которые сначала работают путем преобразования id в имя и сравнения, в общем случае неверны (, хотя в наши дни несколько пользователей редко используют один и тот же uid и еще реже несколько групп используют один и тот же gid ).

3
18.03.2021, 22:49

Теги

Похожие вопросы