sudo :запустить масштабирование от имени другого пользователя

Он содержит журналы всех подключений, которые можно считать конфиденциальной информацией, по крайней мере, в многопользовательской -системе :только администратор должен знать, когда и как пользователи входят в систему (и даже это знание требует тщательного рассмотрения ). Однако, как указывает Джакомо Катенацци , существуют и другие способы получения этой информации, которые по умолчанию не ограничены.

Возможно, что еще более важно, он также содержит журналы sudoкоманд, которые легко могут содержать конфиденциальную информацию (и также являются одной из причин, по которой вам следует избегать указания паролей в командных строках ). Опять же, в многопользовательской системе -администратор, вероятно, не хочет, чтобы все пользователи могли видеть все, что делается с помощью sudo...

.

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

3
18.11.2020, 19:47
3 ответа

Если первоначальный сеанс GUI выполняется от имени пользователя kiddy, то файл ключа сеанса (либо в ~/.Xauthority, либо в пользовательском расположении, на которое указывает переменная среды XAUTHORITY), принадлежит этому пользователю. пользователем и по умолчанию недоступны для чтения кем-либо еще.

Если вы sudoиспользуете root, это не проблема, так как root обычно может читать все, (кроме, например,. домашний каталог пользователя находится в общем ресурсе NFS, который экспортируется с параметром root_squash, установленным ). Вы можете просто export XAUTHORITY=/home/$SUDO_USER/.Xauthorityи убедиться, что переменная DISPLAYсохранена из исходного сеанса.

Но когда вы используете sudo -u daddyдля переключения на другую не -корневую учетную запись и хотите использовать программы с графическим интерфейсом, вам потребуется либо использовать версии с графическим интерфейсом инструмента переключения пользователей (, например. gksuдля Gnome или kdesudoдля KDE ), которые могут обрабатывать это автоматически, или предоставить второй учетной записи пользователя доступ к сеансовому ключу (или его копии )самостоятельно.

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

Некоторые дистрибутивы могут также иметь модули PAM или другую предварительную -конфигурацию, чтобы сделать это более автоматическим.

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

  • целевой пользователь должен иметь доступную копию файла ключа сеанса X(~/.Xauthorityили указывать на него с помощью переменной XAUTHORITYв исходном сеансе ). Если безопасность является проблемой, этот файл должен быть доступен только исходному и целевому пользователю.
  • целевому пользователю, вероятно, потребуется XAUTHORITYпеременная, указывающая на доступную копию файла ключа сеанса X (, если только копия не размещена в ~/.Xauthorityцелевого пользователя)
  • у целевого пользователя должно быть то же DISPLAYзначение переменной, что и у исходного сеанса

Судя по всему, gksuбыл удален . Чтобы позволить sudoсохранить необходимые переменные среды, вы можете написать /etc/sudoers.d/zoomforkiddyфайл со следующим содержимым (рекомендуется использовать visudo -f /etc/sudoers.d/zoomforkiddyдля его создания/редактирования):

Defaults:kiddy env_keep += "DISPLAY XAUTHORITY"
kiddy ALL = (daddy) NOPASSWD: /usr/bin/zoom

Это позволяет необходимым переменным среды проходить через sudoи предоставляет kiddyбеспарольный доступ только к /usr/bin/zoom.

Затем добавьте daddyв группу пользователей kiddy:

.
sudo usermod -a -G kiddy daddy

Это позволит daddyполучить доступ к файлам пользователя kiddy, если у них установлены права группового доступа. Итак, теперь kiddyсможет скопировать свой файл Xauthority в какое-то место, доступное для daddy, и установить разрешения, чтобы (только)daddyмогли получить к нему доступ.

Теперь создайте скрипт, например. /usr/local/bin/zoom_for_kiddyи сделать его исполняемым(chmod a+rx /usr/local/bin/zoom_for_kiddy):

#!/bin/sh
if [ "$XAUTHORITY" = "" ]
then
    XAUTHORITY="$HOME/.Xauthority"
fi
if [ -f "$XAUTHORITY" ]
then
    cp "$XAUTHORITY" /tmp/zoom_for_kiddy_xauth
    trap "rm -f /tmp/zoom_for_kiddy_xauth" EXIT
    chmod 640 /tmp/zoom_for_kiddy_xauth

    export XAUTHORITY=/tmp/zoom_for_kiddy_xauth
    sudo -u daddy /usr/bin/zoom "$@"
else
    echo "ERROR: cannot find the Xauthority file" >&2
fi

Этот сценарий создаст копию файла Xauthority kiddyдля daddy, установит разрешения, установит для переменной среды XAUTHORITY значение, которое можно использовать для daddy, а затем запустит /usr/bin/zoomsudo. Когда zoomзавершится, копия файла Xauthority будет автоматически удалена при выходе из оболочки, выполняющей скрипт.

Теперь вы можете настроить среду рабочего стола kiddyдля использования /usr/local/bin/zoom_for_kiddyвместо реального /usr/bin/zoom. Любые аргументы команды будут переданы через скрипт в реальный zoom, как и -.

0
18.03.2021, 23:05

Возможно, он не знает, какой дисплей использовать. Когда вы запускаете его с помощью sudo, он создает новую оболочку. Если эта оболочка не знает об отображении, она не сможет открыть окно.

Чтобы проверить это, попробуйте sudo xterm (/usr/bin/xterm )таким же образом. Он открывается? Если нет, то мы можем быть на что-то здесь.

Можно просто добавить VAR=DISPLAY в строку sudo. См. справочную страницу sudo для получения более подробной информации.

2
18.03.2021, 23:05

Я написалego(Alter Ego )для аналогичного варианта использования. С помощью эго можно запускать программы под другим локальным пользователем. Помимо настройки X11, он также поддерживает совместное использование сокетов Wayland и PulseAudio :https://github.com/intgr/ego

.

Таким образом, вы просто запускаете ego --sudo -u daddy appилиego -u daddy zoom(некоторые приложения имеют сбои в режиме --sudo ).

Если у вас возникнут проблемы, создайте проблему на GitHub.

0
05.04.2021, 14:12

Теги

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