Он содержит журналы всех подключений, которые можно считать конфиденциальной информацией, по крайней мере, в многопользовательской -системе :только администратор должен знать, когда и как пользователи входят в систему (и даже это знание требует тщательного рассмотрения ). Однако, как указывает Джакомо Катенацци , существуют и другие способы получения этой информации, которые по умолчанию не ограничены.
Возможно, что еще более важно, он также содержит журналы sudo
команд, которые легко могут содержать конфиденциальную информацию (и также являются одной из причин, по которой вам следует избегать указания паролей в командных строках ). Опять же, в многопользовательской системе -администратор, вероятно, не хочет, чтобы все пользователи могли видеть все, что делается с помощью sudo
...
.
Обратите внимание, что это всего лишь настройка по умолчанию auth.log
, и, как и в случае любого аспекта ведения журнала, системные администраторы могут перенастроить ее по своему усмотрению.
Если первоначальный сеанс 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 или другую предварительную -конфигурацию, чтобы сделать это более автоматическим.
Но если вам нужно сделать это вручную, есть три вещи, которые вы должны сделать, чтобы иметь возможность запускать программы с графическим интерфейсом от имени пользователя, который не выполнял вход в систему с графическим интерфейсом:
~/.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/zoom
–sudo
. Когда zoom
завершится, копия файла Xauthority будет автоматически удалена при выходе из оболочки, выполняющей скрипт.
Теперь вы можете настроить среду рабочего стола kiddy
для использования /usr/local/bin/zoom_for_kiddy
вместо реального /usr/bin/zoom
. Любые аргументы команды будут переданы через скрипт в реальный zoom
, как и -.
Возможно, он не знает, какой дисплей использовать. Когда вы запускаете его с помощью sudo, он создает новую оболочку. Если эта оболочка не знает об отображении, она не сможет открыть окно.
Чтобы проверить это, попробуйте sudo xterm (/usr/bin/xterm )таким же образом. Он открывается? Если нет, то мы можем быть на что-то здесь.
Можно просто добавить VAR=DISPLAY в строку sudo. См. справочную страницу sudo для получения более подробной информации.
Я написалego
(Alter Ego )для аналогичного варианта использования. С помощью эго можно запускать программы под другим локальным пользователем. Помимо настройки X11, он также поддерживает совместное использование сокетов Wayland и PulseAudio :https://github.com/intgr/ego
Таким образом, вы просто запускаете ego --sudo -u daddy app
илиego -u daddy zoom
(некоторые приложения имеют сбои в режиме --sudo ).
Если у вас возникнут проблемы, создайте проблему на GitHub.