Як альтернатива sux
безпечному виконанню графічної команди ( firefox-esr
на прикладі нижче) як $AUTHUSER
( guest
у прикладі нижче):
AUTHUSER=guest
AUTHSTRING=SI:localuser:${AUTHUSER}
xhost +${AUTHSTRING} > /dev/null
SUDO_ASKPASS=/usr/bin/ssh-askpass
export SUDO_ASKPASS
sudo -k --askpass -u ${AUTHUSER} /usr/bin/firefox-esr
xhost -${AUTHSTRING} > /dev/null
sudo -K
код робить:
- надає
guest
користувачеві доступ до вашого поточного користувача $DISPLAY
черезxhost +SI:localuser:guest
- використовує
ssh-askpass
для графічного запиту пароля (звичайно, ви можете використовувати його, sudoers(5)
NOPASSWD:
щоб уникнути цього, якщо ваша політика безпеки вважає це нормально. Або ви можете використовувати інші askpass
програми або вказати їх у конфігураційних файлах (див. sudo(8)
подробиці на --askpass
)
- якщо пароль у порядку (і у вас є дозволи
sudoers(5)
), він виконує команду /usr/bin/firefox-esr
як інший користувач (guest
)
- Після завершення програми анулювання дозволу іншому користувачеві (
guest
) $DISPLAY
анулюється черезxhost -SI:localuser:guest
нарешті, sudo -K
видаляє кешований пароль, тож наступне виклик ssh-askpass
знову попросить вас пароль (замість використання кешованого пароля)
в той час як це трохи більше роботи , ніж те , gksu(8)
чи sux(8)
ж, це може бути сценарій, і це набагато безпечнішим , ніж:
xhost +
(будь-який користувач матиме доступ до вашого графічного дисплея, поки він діє)
- читабельна ~ / .xauth іншими користувачами (невизначений доступ цього користувача до вашого дисплея)
- що
gksu
/ sux
зробив (тимчасова копія ~/.Xauthority
, яка дозволила вказаному користувачу скопіювати ваш MIT-MAGIC-COOKIE-1
та продовжувати використовувати ваш дисплей навіть після закінчення gksu / sux (до тих пір, поки ви не вимкнули машину чи не вийшли з дисплея - заставки, сплячий режим тощо) не змінили магію печиво).
оскільки це дозволить лише одному локальному користувачеві отримати доступ до вашого дисплея, а потім лише до тих пір, поки команда запуститься (коли команда закінчиться, $AUTHUSER
більше не зможе отримати доступ до вашого дисплея жодним чином).
Інша безпечною альтернативою є ssh -X
(без -Y
якої на насправді робить вас менш безпечними! Див ForwardX11Trusted
в ssh_config(5)
подробиця), як це простіше у використанні , якщо ви не сценарії, але це викликає additinal накладних витрат (наприклад, він став повільніше) і деякі програми можуть не працювати правильно без небезпечних -Y
.
$XAUTHORITY
вона все ще встановлена на user1~/.Xauthority
, яку програма, я думаю, спробує прочитати, і вона не вдається, тому що для цього файлу зазвичай є режим 0600 (-rw-------
), це означає, що він недоступний для читання будь-хто з групи "інша", до якої входить user2. Це означає, що якщо виchmod o+r ~/.Xauthority
(як user1), ви зламали цю проблему. Я написав сценарій, який це демонструє.