[Решено] Правильный подход к запуску графических приложений с вводом пароля

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

Первый метод который я попробовал:
* - создал фаил polkit
 /usr/share/polkit-1/actions/org.freedesktop.policykit.spotify.policy
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE policyconfig PUBLIC
 "-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN"
 "http://www.freedesktop.org/standards/PolicyKit/1/policyconfig.dtd">
<policyconfig>
  <action id="org.freedesktop.policykit.pkexec.run-spotify">
    <description>Run spotify</description>
    <message>Authentication is required to run Spotify</message>
    <defaults>
      <allow_any>auth_self</allow_any>
      <allow_inactive>auth_self</allow_inactive>
      <allow_active>auth_self</allow_active>
    </defaults>
    <annotate key="org.freedesktop.policykit.exec.path">/usr/bin/spotify</annotate>
    <annotate key="org.freedesktop.policykit.exec.allow_gui">TRUE</annotate>
  </action>
</policyconfig>

С помощью "pkexec --user $USER /usr/bin/spotify" запрашивает пароль в вот обычный запуск spotify просто запускает программу без подтверждения пароля от polkit.

Второй метод:
* - изменил права доступа фаила /usr/bin/spotify с помощью chmod 700, получается запуск возможен только от root пользователя;
* - изменил секцию default фаила polkit на

    <defaults>
      <allow_any>auth_admin</allow_any>
      <allow_inactive>auth_admin</allow_inactive>
      <allow_active>auth_admin</allow_active>
    </defaults>
* - запустил spotify с помощью команды pkexec spotify;

Запуск происходит только после ввода пароля, запустить spotify как обычный пользователь не могу. Однако я не уверен, что это оптимальный способ от пользователя root запускать программу для прослушивания музыки, это похоже лишнее, ведь это не gparted и не gnome-disks где необходимы максимально возможные привелегии. При запуске приложения от пользователя root все временные файлы будут сохраняться в каталог root с последующим засорением этой директории?
assertion9
получается запуск возможен только от root пользователя
Создайте пользователя spotify задайте ему пароль , дайте права на запись и чтение вашего конфига spotify только пользователю spotify. И запускайте через pkexec.
Осталььные смогут запускать spotify с дефолтным конфигом
assertion9
и не хочу чтобы у любого человека была возможность запустить программу и сразу же оказаться у меня в профиле.
Умные (работающие по феншею) способы вроде бы описаны все, НО если эти любые человеки имеют право использовать sudo, то они всегда могут запустить это приложение (даже могут в текущей сессии изменить пароль root поработать и вернуть все обратно).
Это я к тому, что если не доверяешь этим человекам, то не нужно им давать право на пользование sudo и нужно убирать у них права на запуск данного приложения (без sudo они эти права не восстановят) ... и тогда все довольно упростится.
Но есть еще один не стандартный и очень простой способ (иногда им пользуюсь) - изменить название запускаемого бинарника (конечно, нужно смотреть конкретно процесс запуска).
Ошибки не исчезают с опытом - они просто умнеют
vs220
Создайте пользователя spotify задайте ему пароль , дайте права на запись и чтение вашего конфига spotify только пользователю spotify. И запускайте через pkexec.

Спасибо за совет, работает как нужно

vasek
если не доверяешь этим человекам, то не нужно им давать право на пользование sudo и нужно убирать у них права на запуск данного приложения (без sudo они эти права не восстановят) … и тогда все довольно упростится.

Спасибо, что напомнили упустил этот момент
assertion9
не хочу чтобы у любого человека была возможность запустить программу
Сегодня пришлось решать аналогичную проблему - нужно было запретить запуск одного файла. Приведенные в топике способы не подходят.
Решил использованием openssl для шифрования/дешифрования - очень удобно - перед запуском дешифрую, поработал, зашифровал.
Время не занимает, практически мгновенно (время уходит только на ввод пароля), повесил команду на горячую клавишу.
Ошибки не исчезают с опытом - они просто умнеют
vasek
openssl для шифрования/дешифрования - очень удобно
vasek если не затруднит несколько примеров вашего практического применения
раздел же для новичков
самому интересно :)
vs220
если не затруднит несколько примеров вашего практического применения
раздел же для новичков
На ноуте нет ничего секретного для других, за исключением KeePass (но там очень стойкий пароль), но недавно достал из запасников одну прогу, запуск которой другими в принципе не желатен. Так как к ноуту имеют доступ и другие, для которых обход разграничений прав доступа не проблема, то пришлось шифровать.
Для шифрования файла решил использовать openssl, а вот для автоматизации процесса создал два файла (один для шифрования enc.sh, другой для дешифрования dec.sh)
1. Создаем файл ~/enc.sh (шифрование)
cat ~/enc.sh
#!/bin/bash
echo "Пароль:"
read -s p
openssl enc -e -pbkdf2 -aes-256-cbc -k $p -in $1 -out $1.enc
#cat $1 | openssl enc -e -pbkdf2 -aes-256-cbc -k $p > $1.enc
mv $1.enc $1
PS - read -s - опция -s для скрытия набора пароля - на вкус, можно и убрать
2. Создаем файл ~/dec.sh (дешифрование)
cat ~/dec.sh
#!/bin/bash
echo "Пароль:"
read -s p
openssl enc -d -pbkdf2 -aes-256-cbc -k $p -in $1 -out $1.dec
#cat $1 | openssl enc -d -pbkdf2 -aes-256-cbc -k $p > $1.dec
mv $1.dec $1
3. Делаем файлы исполняемыми
chmod +x ~/enc.sh, chmod +x ~/dec.sh
4. Шифрование/дешифрование
перед запуском файла ~/dec.sh /прога …… после окончания работы ~/enc.sh /прога
Можно вешать на горячие клавиши, можно изменить функцию шифрования
5. Нюансы
Если применять к программам в директории /usr/bin, то придется применять sudo в результате изменятся права доступа к файлу и придется их менять (делать дополнение в скрипт).
Рекомендую
Перед шифрованием узнать права доступа
stat -c%a /usr/bin/прога
755
А после операции enc/dec вернуть права на место, если они меняются
sudo chmod -R 755 /usr/bin/прога
... и прописать это в скрипт ...

EDIT - внес изменение в скрипт (исключил cat) по замечанию indeviral - это, бузусловно правильный вариант и полностью соответствует man - просто у меня давно валялась эта конструкция и взял ее, даже не заглянув в man и не проверив на соответствие doc.
Ошибки не исчезают с опытом - они просто умнеют
vasek
cat ~/enc.sh
Спасибо
Нашел описку
перед запуском файла  ~/enc.sh /прога  …… после окончания работы  ~/dec.sh /прога
исправил на
перед запуском файла ~/dec.sh /прога …… после окончания работы ~/enc.sh /прога

PS - перед запуском дешифровать, после работы зашифровать
Ошибки не исчезают с опытом - они просто умнеют
$ openssl enc -aes-256-cbc -in $1 -out $1.enc -k $pass
По моему cat лишнее. Хотя особой разницы нету...
Ошибки в тексте-неповторимый стиль автора©
 
Зарегистрироваться или войдите чтобы оставить сообщение.