Как инструменты для работы с буфером обмена в командной строке, такие как “xclip” и “xsel”, сохраняют содержимое буфера обмена в среде X windows, которая этого не делает?

Вопрос или проблема

После прочтения этого вопроса о очистке буфера обмена 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?

  1. Фоновый процесс:
    В отличие от стандартных приложений, которые освобождают буфер обмена при закрытии, xclip и xsel создают фоновые процессы, которые продолжают существовать, даже если основная программа завершает свою работу. Например, когда вы выполняете команду echo "test" | xclip, создается процесс xclip, который берет на себя управление содержимым буфера обмена (например, PRIMARY или CLIPBOARD). Это означает, что даже если вы закроете терминал или программу, xclip продолжит занимать буфер обмена, пока он работает.

  2. Переход контроля:
    Если другой процесс, использующий xsel или xclip, сохраняет новое содержимое в буфер обмена, управление будет передано этому новому процессу. Например, выполните команду printf test | xsel, и вы увидите, что xsel передаст управление буфером обмена от xclip, завершив его работу. Таким образом, эти инструменты используют механизм автоматического обновления владения буфером обмена через X11.

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

Безопасность использования xclip и xsel

При использовании инструментов управления буфером обмена, как xclip и xsel, важно учитывать аспекты безопасности:

  • Возможный риск утечки данных:
    Если вы скопировали что-то конфиденциальное (например, пароль), существует риск, что данные могут временно храниться в памяти или во временных файлах, создаваемых программами. xclip и xsel не имеют встроенных механизмов шифрования или защиты для хранения содержимого, поэтому существует вероятность, что злоумышленники могут получить доступ к вашему содержимому.

  • Владение выбором:
    Если фоновый процесс xclip или xsel активен, он может просматривать содержимое буфера обмена, что может быть уязвимым местом для вредоносных программ. Если злоумышленник получит доступ к системе, он сможет использовать механизм захвата содержимого выбора через X11.

Вывод

Инструменты, такие как xclip и xsel, обеспечивают практическое решение для сохранности буфера обмена в среде X, используя фоновый процесс и механизм передачи владения. Тем не менее, необходимо попадать в состояние бдительности по отношению к безопасности данных, особенно когда речь идет о конфиденциальной информации. Практическое использование этих инструментов должно сочетаться с осознанием их возможностей и рисков, минимизируя как возможные утечки, так и угрозы безопасности.

Оцените материал
Добавить комментарий

Капча загружается...