1 (15.10.2020 04:14:01 отредактировано sunjob)

сначало тема называлась так
sudo GUI скрипт
в процессе ... была пеереименована в
usb_flash_tool - простая утилита для работы с флешкой

подробности после UPDATE

...

добрый день

bash GUI-only скрипт (без использования консоли)
1. zenity для диалога
2. "sudo" для "операций"
3. лог в кат. пользователя

если использовать "sudo без пароля", то все ОК (т.е. для "локального" использования)
в противном случае необходимо вводить пароль (в консоли)

ВОПРОС: как правильно разрулить ситуацию, для "обычного" пользователя с "обычным sudo"?

можно использовать desktop-ориентированные "sudo-GUI" утилиты, но есть неудобства
- их целый зоопарк, на каждый desktop свой свиток
- при наличие "sudo без пароля" добавляется ненужный диалог

хотелось-бы ввести пароль один раз, и далее больше не "дергать".
возможно, в более поздних версиях "свистелок" это уже есть, но в "старом" kdesu этого нет, и требует каждый раз заново ввода пароля

нужно общее, универсальное решение для основных дистрибьютивов (в случае разумных решений/доработок)

тестировалось на

slackware 12.2/14.*
tde3-14/kde4

tag: bash,zenity,sudo

спасибо

...

### UPDATE ###

usb_flash_tool - простая утилита для работы с флешкой

простая утилита для работы с флешкой
позволяет: форматировать, создавать и восстановливать образы флешек, поддерживается сжатие

особенности: простая :о), поддерживает block-списки, "защищающие" локальные и "прочие" серьезные диски от форматирования, написана на бабаше :о)

окончательный вариант проекта
usb_flash_tool
README


поддерживает block-списки, "защищающие" локальные и "прочие" серьезные диски от форматирования

bash, gui, sudo, zenity, usb, flashdrive, format, image,

2 (30.07.2020 12:51:02 отредактировано alex_q_2000)

Привет, sunjob.

Запуск x-овых приложений с повышением привилегий делается через pkexec.

pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY программа

или из консоли юзера:

if [ "$EUID" != "0" ] ; then pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY программа; fi;

Это не есть хорошо, поскольку мы тут обошли все политики запуска pkexec, кроме умолчальной.

Если по-хорошему, то нужно создавать политику (экшен/правило - файл.policy в папке /usr/share/polkit-1/actions/) для каждого приложения, которое требует повышение привилегий. Тогда pkexec будет выводить окно с запросом пароля root + писать в нём комменты вроде "Авторизация требуется для запуска того/сего/пятого/десятого..."

PolicyKit - создание собственных правил - хорошая статья, посмотрите в Яндексе.

Для запуска х-овых программ в обёртке pkexec с правилом по умолчанию (это удобно для portable-версий) можете заюзать мой StartAsRoot (Lazarus, там и код есть исходный, если нужно). Запускаемое приложение (исполняемый файл) помещаете в каталог StartAsRoot (название можно изменить), в конфиг ./StartAsRoot.ini вписываете название запускаемого приложения и запускаете StartAsRoot. Поле запуска Вашего приложения в этот конфиг (./StartAsRoot.ini) автоматически будет записано имя юзера, который запустил StartAsRoot, что позже можно применить ещё где-нибудь. Внутри архива есть readme. До опакечивания своих прог я использовал именно этот метод. Что именно и как заведётся в Вашем случае - надо пробовать...

MSI H81M-ECO, Intel Core i3-4130T, Intel HD Graphics 4400 | MgaRemix-9 Budgie 10.8.1 x86_64 + Windows 10

3 (02.08.2020 12:16:24 отредактировано sunjob)

привет, alex_q_2000!

Запуск x-овых приложений с повышением привилегий

в тек. задаче "нам" по-барабану до иксовых супер-привилегий, "нам" надо запустить внешние команды с sudo

создавать политику
+
pkexec

это уже "непереносимое неуниверсально" ...

...

все это не катит, по условию, т.к. планируется для широко-глубокого использования :о) (скажем так, "это, НЕЧТО" должно везде одинаково работать, на всех линухах ... и старых и новых ...)

нужно общее, универсальное решение для основных дистрибьютивов (в случае разумных решений/доработок)
+
slackware 12.2/14.*

в старых линухах, увы, нет этого "счастья"

...

спасибо

4 (02.08.2020 16:36:09 отредактировано alex_q_2000)

sunjob пишет:

в тек. задаче "нам" по-барабану до иксовых супер-привилегий, "нам" надо запустить внешние команды с sudo

ag Нет. "Нам" всё-таки не по-барабану. )) Стесняюсь спросить, к чему тогда в названии Вашей темы сделан акцент на "GUI"?

Тогда... Вы наверное про /etc/sudoers? В Mageia, например, достаточно в /etc/sudoers раскомментировать секцию %wheel ALL=(ALL) NOPASSWD: ALL и закомментировать #Defaults requiretty. Затем добавить в группу wheel активного пользователя gpasswd -a $USER wheel и перегрузиться. После этого будут доступны команды без паролей, которые ранее были только для root. Это удобно, если Вы "прыгаете" туда-сюда из юзера на "root-дистанции", однако плохо с точки зрения общей безопасности системы. Например: 

# Создаём ключи OpenSSH (RSA) - сохраняется в профиле юзера
ssh-keygen -t rsa -N "" -C "ключ" -f /home/$USER/.ssh/id_rsa
# Перезапускаем сервис через sudo без пароля
sudo systemctl restart sshd.service

Только и в этом случае Вам потребуются права root, чтобы отредактировать /etc/sudoers, т.е. опять получается не "универсально" и не "транспортабельно". Даже не знаю, что Вам предложить... На всякий случай - вот ещё по теме: Команда Sudo и Файл Sudoers: Практическое Руководство

Как Вы планируете без дополнительного вмешательства вводить пароль 1 раз, запуская сам скрипт из-под юзера, при этом исполняя внешние команды (во множественном числе) из-под sudo, причем сам sudo об этом не имеет ни какой информации в /etc/sudoers? Чтобы не вводить пароль многократно, логичнее запускать этот скрипт/приложение c повышенными привилегиями. Это и есть тот самый "1 раз".

Либо "Мы" редактируем соответствующим образом /etc/sudoers и пускаем внешние команды через "sudo команда" без паролей. В случае с sudo Вы наверняка столкнётесь с тем, что по факту выполнения какой-либо внешней программы из основной, получите не читаемый/не редактируемый под обычным юзером файл/конфиг/и т.п Например: sudo touch /111; sudo cp /111 ~/111. Получаем не редактируемый файл в профиле, поскольку теперь владелец root (644). Поэтому Вам придётся позаботиться и о правах/привилегиях на этот "результат" в лице обычного пользователя другого компьютера, у которого прав на подобные операции по дефолту не будет. Кроме этого, изменяя файл /etc/sudoers на чужих компах под разными ОС, теоретически можно "испортить" предустановленные ранее специфичные правила - это тоже нужно учитывать.

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

p.s. "Нам/У нас" - это у меня манера общения такая. Спасибо, подняли настроение. Обожаю людей с чувством юмора.  ag

MSI H81M-ECO, Intel Core i3-4130T, Intel HD Graphics 4400 | MgaRemix-9 Budgie 10.8.1 x86_64 + Windows 10

5 (02.08.2020 18:03:49 отредактировано sunjob)

тема называется "sudo GUI скрипт"
из описания, я надеялся, понятно, что "GUI" это диалоги для общения с пользователем, выбор, да-нет, сохранение/открытие файлов/каталогов, а sudo используется "внутри" для запуска команд, кот.требуют привилегий...
(будем считать, что я уточнил ситуацию)

...

достаточно в /etc/sudoers раскомментировать секцию %wheel ALL=(ALL) NOPASSWD: ALL

а то я не знаю?! Ё :о)

...

далее, вы немного не туда поплыли (бывает), просто "поймите/убедите" себя, что "немного не туда"
если будет время, я уточню, более подробно опишу ситуацию, а пока... пока пусть будет так :о)

...

единственно, что можно уточнить
- ни каких серьезных вмешательсв в систему не будет делаться
- все, что было до этого настроено-разрешено, то и, как говориться, и будет далее!
- настройки

/etc/sudoers

так же, не будут рихтоваться... если разрешено, то "велкам", если нет, то "нет так нет"

...

по поводу "доступа" после "кривого вызова" ... поэтому и запускается главный скрипт от обычного юзера, что-бы этого не было, в частности

3. лог в кат. пользователя

...

т.е. сразу неверное направление:

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

...

... подняли настроение ...

на здоровье
тыць

6

sunjob пишет:

...если будет время, я уточню, более подробно опишу ситуацию, а пока... пока пусть будет так :о)

Давайте уточнять ситуацию, а то получится, как в том клипе с канатом.  ))

MSI H81M-ECO, Intel Core i3-4130T, Intel HD Graphics 4400 | MgaRemix-9 Budgie 10.8.1 x86_64 + Windows 10

7 (02.08.2020 19:41:26 отредактировано sunjob)

вот небольшая беседа, возможно станет понятнее?! :о)

p.s. ролик в тему!

8 (02.08.2020 21:55:11 отредактировано alex_q_2000)

sunjob пишет:

вот небольшая беседа, возможно станет понятнее?! :о)

В общем я понял (наверное)... Вы имели ввиду буквально то, что имели ввиду... )) Т.е. скрестить sudo и zenity для аутентификации и получения привилегий запуска.

Сначала и там было предложено с x-ами - pkexec (Вы же про zenity речь ведёте), затем обсуждение плавно снизошло до /etc/sudoers, который править Вы не хотите, ну а в конце народ предложил обернуть sudo в zenity. Потом пошли вариации кода и спор о передаче пароля через echo в конвейер и т.д. и т.п. Появляются 3 примера, выполнение которых у меня заканчивается так: [sudo] пароль для marsik: marsik is not in the sudoers file. This incident will be reported.

Помню в какой-то из ранних Mageia сам sudo отсутствовал, приходилось доустанавливать. Как Вы уже сами написали, у каждого свой "свисток". Думается, что правильным будет использовать именно этот "свисток", по крайней мере из соображений удобства и безопасности. Может быть действительно организовать некий поиск установленного в системе "свистка" и уже от этого плясать? Хотя, там вроде тоже это предлагали... Однако, я бы остановился на поиске "свистка"... Можно конечно и покостылить, но боюсь, что и в pkexec скоро эту дырку прикроют: pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY программа.

Кстати, в приведённой выше статье "PolicyKit - создание собственных правил" натурально написано... Цитата:

Примерно с 2007 года PolicyKit начал использоваться во всех наиболее популярных дистрибутивах Linux и их производных - в Debian, Ubuntu, Fedora, Red Hat, OpenSUSE, Gentoo, Slackware, Archlinux и многих других. Фактически он стал стандартом в своей области.

Может оно всё-таки есть и для Ваших slackware 12.2/14.*?

MSI H81M-ECO, Intel Core i3-4130T, Intel HD Graphics 4400 | MgaRemix-9 Budgie 10.8.1 x86_64 + Windows 10

9

привет!

...

Думается, что правильным будет ... организовать некий поиск установленного в системе "свистка"

ваше право! можно и из булки пистолет смастерить :о)

я бы остановился на поиске "свистка"

кто-ж вас переубедит-то?! :о)

Может оно всё-таки есть и для Ваших slackware 12.2/14.*?

дак сколько-же можно писать-то: нет-же!!! в старой нету! :о) (да и в других старых дистрах тоже)

спасибо

...

п.с.

Т.е. скрестить sudo и zenity для аутентификации и получения привилегий запуска.

не совсем это:

при наличие "sudo без пароля" добавляется ненужный диалог
+
хотелось-бы ввести пароль один раз, и далее больше не "дергать"

...

Вы не хотите ...

эпичненько! когда покупаем булку хлеба, мы-же не расчитываем что нам, там-же, в магазине будут вживлять ректальный зонд для контроля того, как мы правильно употребляем эту самую булку?! (надеюсь, аналогия понятнее? :о)

предложил обернуть sudo в zenity

это изначально "имелось в виду", более того, "продумано и сделано"! не был отработан механиз одноразовой аутентификаКции

хотелось-бы ввести пароль один раз, и далее больше не "дергать"

(в последствии метод изыскан на неск. площадках, манах, выкусах)

ну а все остальное это лишняя, ненужная, неподходящая, неидеальная, неуниверсальная ... пена ... :о)

еще раз спасибо

10 (03.08.2020 12:38:43 отредактировано alex_q_2000)

sunjob пишет:

(в последствии метод изыскан на неск. площадках, манах, выкусах)
ну а все остальное это лишняя, ненужная, неподходящая, неидеальная, неуниверсальная ... пена ... :о)
еще раз спасибо

Здравствуйте, sunjob. Хотите поскорее избавиться от "енотов"? А как же "енотовое братство"? У нас даже аватары схожи в разных форумах... ag  Не по-христиански это. Если универсальный, работающий везде без вмешательства в настройки разных ОС метод аутентификации и запуска (в том числе x-овых) приложений с привилегиями Вами изыскан, могли бы и поделиться. Я бы тоже его в загашник положил.

MSI H81M-ECO, Intel Core i3-4130T, Intel HD Graphics 4400 | MgaRemix-9 Budgie 10.8.1 x86_64 + Windows 10

11

... спокойствие, только спокойствие! ...

12 (05.08.2020 14:56:15 отредактировано alex_q_2000)

sunjob пишет:

... спокойствие, только спокойствие! ...

Тогда продолжаем костылить... bq

#!/bin/bash

#Запуск редактора xed с привилегиями root и гуёвым окном zenity (sudo=Suxx, su=Rulezz!)
CMD="xed"

if [ "$EUID" != "0" ]; then
    PASS=$(zenity --password --title="Введите пароль root")
    echo "$PASS" | su -c "$CMD"; else "$CMD"
fi

http://images.vfl.ru/ii/1596614261/51d5b764/31258331_s.png http://images.vfl.ru/ii/1596614262/c9c893b5/31258332_s.png


Или ещё более эпично..bi  (прикольные в форуме смайлики оказывается)

Скрипт сам проверяет, с какими привилегиями запущен и после ввода правильного пароля в окно zenity перезапускается с привилегиями root:

#!/bin/bash

if [ "$EUID" != "0" ] ; then
    PASS=$(zenity --password --title="Введите пароль root")
    echo "$PASS" | su -c "$0"
    exit
fi

#Чтобы убедиться, что Мы с привилегиями, пишем в корень файл...
echo "bla-bla-bla" > /file1.txt
MSI H81M-ECO, Intel Core i3-4130T, Intel HD Graphics 4400 | MgaRemix-9 Budgie 10.8.1 x86_64 + Windows 10

13 (15.10.2020 04:18:34 отредактировано sunjob)

только вернулся из долгой командировки с комсодрома :о)
в процессе, чичас выпью чашечку кофЯ, приму душь и... спать !!!  (шутка... уже выспался)

думаю, надо закончить эту пердушку и отдать в "продакш" :о)

будут мымсли, обязательно выскажусь :о), спасибо

п.с.
> прикольные в форуме смайлики оказывается
колобки, едренть их налево!

фокусы с 'su' - у меня не прокатывают, а вот старый код, в набросках валялся, почти то-же самое :о)

zenity --password --title="input pass" | sudo -S kwrite

все-таки не хорошо пароль в явном виде в явной переменной хранить...

...

### UPDATE ###

все, баста, карапузики, кончилися танцы!

простая утилита для работы с флешкой
позволяет: форматировать, создавать и восстановливать образы флешек, поддерживается сжатие

особенности: простая, поддерживает block-списки, "защищающие" локальные и "прочие" серьезные диски от форматирования, написана на бабаше

окончательный вариант проекта тут
usb_flash_tool
README