Як альтернатива 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), ви зламали цю проблему. Я написав сценарій, який це демонструє.