Вопрос или проблема
После прочтения этого вопроса о очистке буфера обмена X при выходе из vim я узнал, что буфер обмена X существует только во время работы программы, из которой было получено выделение.
Из-за такого поведения существуют программы, такие как “glipper” и “parcellite”.
Если буфер обмена X очищается каждый раз при выходе из программы, как работают такие программы, как xclip
и xsel
?
И какие существуют угрозы безопасности при использовании таких программ? Например, если пароль был скопирован в буфер обмена, может ли этот пароль быть сохранён в какой-либо временный файл, к которому могли бы получить доступ программы или пользователи?
Если нет приложения для буфера обмена, такого как xclipboard
, clipit
…, которое крадёт выделения от них, xsel
/xclip
создаст фоновый процесс для обработки будущих запросов на выделение, пока они обладают выделением.
$ printf test | xclip
$ ps -C xclip
PID TTY TIME CMD
14115 pts/10 00:00:00 xclip
Этот xclip
процесс обрабатывает запросы на выделение (здесь основное выделение). Но если вы выберете что-то в другом приложении (или снова используете xsel
или xclip
, чтобы сохранить что-то другое), тогда этот xclip
процесс уступит выделение тому другому приложению и завершится.
$ printf test | xsel
$ ps -C xclip
PID TTY TIME CMD
$ ps -C xsel
PID TTY TIME CMD
14212 ? 00:00:00 xsel
Выше xsel
забрал выделение у xclip
.
Вы можете выяснить, кто владеет данным выделением, с помощью:
#include <stdio.h>
#include <X11/Xlib.h>
#include <X11/Xatom.h>
int main(int argc, char* argv[])
{
Display *d = XOpenDisplay(NULL);
Window w = XGetSelectionOwner(d, XInternAtom (d, argv[1], False));
printf("0x%08lx\n", (unsigned long)w);
return 0;
}
Затем:
$ make xgo LDLIBS=-lX11
$ ./xgo PRIMARY
0x07000001
Это даст вам ID окна. Вы можете использовать xprop -id
или xwininfo -id
с этим ID, но в случае xclip
/xsel
вы не получите много информации.
На системах, основанных на GNU/Linux, ltrace
полезен для просмотра происходящего на уровне API библиотек X.
Смотрите также Перехват трафика протокола X11, чтобы увидеть, что происходит на уровне протокола X11.
Ответ или решение
Как инструменты управления буфером обмена командной строки, такие как "xclip" и "xsel", обеспечивают сохранность буфера обмена в среде X, которая по умолчанию этого не делает?
В среде X Window System поведение буфера обмена может представлять собой проблему из-за его нестабильного состояния, связанного с жизненным циклом приложений. Когда программа, из которой было получено содержимое буфера обмена, закрывается, содержимое буфера может быть очищено. Однако, инструменты командной строки, такие как xclip
и xsel
, реализуют решения для этой проблемы, позволяя сохранить информацию в буфере обмена даже после закрытия приложения.
Как работают xclip
и xsel
?
-
Фоновый процесс:
В отличие от стандартных приложений, которые освобождают буфер обмена при закрытии,xclip
иxsel
создают фоновые процессы, которые продолжают существовать, даже если основная программа завершает свою работу. Например, когда вы выполняете командуecho "test" | xclip
, создается процессxclip
, который берет на себя управление содержимым буфера обмена (например, PRIMARY или CLIPBOARD). Это означает, что даже если вы закроете терминал или программу,xclip
продолжит занимать буфер обмена, пока он работает. -
Переход контроля:
Если другой процесс, использующийxsel
илиxclip
, сохраняет новое содержимое в буфер обмена, управление будет передано этому новому процессу. Например, выполните командуprintf test | xsel
, и вы увидите, чтоxsel
передаст управление буфером обмена отxclip
, завершив его работу. Таким образом, эти инструменты используют механизм автоматического обновления владения буфером обмена через X11. -
Определение владельца выбора:
Вы можете определить, какой процесс владеет конкретным выбором (например, PRIMARY), осуществив подключение к X-серверу. Для этого можно использовать стандартные функции для доступа к библиотекам X11, что позволяет идентифицировать процесс, управляющий выбором в данный момент, и в будущем мониторить за его состоянием.
Безопасность использования xclip
и xsel
При использовании инструментов управления буфером обмена, как xclip
и xsel
, важно учитывать аспекты безопасности:
-
Возможный риск утечки данных:
Если вы скопировали что-то конфиденциальное (например, пароль), существует риск, что данные могут временно храниться в памяти или во временных файлах, создаваемых программами.xclip
иxsel
не имеют встроенных механизмов шифрования или защиты для хранения содержимого, поэтому существует вероятность, что злоумышленники могут получить доступ к вашему содержимому. -
Владение выбором:
Если фоновый процессxclip
илиxsel
активен, он может просматривать содержимое буфера обмена, что может быть уязвимым местом для вредоносных программ. Если злоумышленник получит доступ к системе, он сможет использовать механизм захвата содержимого выбора через X11.
Вывод
Инструменты, такие как xclip
и xsel
, обеспечивают практическое решение для сохранности буфера обмена в среде X, используя фоновый процесс и механизм передачи владения. Тем не менее, необходимо попадать в состояние бдительности по отношению к безопасности данных, особенно когда речь идет о конфиденциальной информации. Практическое использование этих инструментов должно сочетаться с осознанием их возможностей и рисков, минимизируя как возможные утечки, так и угрозы безопасности.