LINUX.ORG.RU

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

 , , , ,


1

1

сначало тема называлась так
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,gui

спасибо

### UPDATE ###

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

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

★★★★

Последнее исправление: sunjob (всего исправлений: 4)

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

Ну в 14.2 таки есть галочка про сохранить пароль (вызывается kdesud для этого).

vodz ★★★★★
()
Последнее исправление: vodz (всего исправлений: 1)

«sudo» для «операций»

Так и настрой sudoers, чтобы он не спрашивал пароль, для твоего скрипта.

andytux ★★★★★
()
Ответ на: комментарий от Extraterrestrial

Вся современная настроечная гуйня в гноме и кедах работает через PolicyKit. Например, gnome-disks запускается без пароля, но на большинство операций выскакивает окошко с запросом пароля рута или юзера-админа. На некоторое время разрешение запоминается (видимо, для каждого типа операций отдельно) и пароль не спрашивается.

legolegs ★★★★★
()
Последнее исправление: legolegs (всего исправлений: 1)

всем сразу

pkexec
PolicyKit

no -->

slackware 12.2

...

zenity + sudo

в курсе, но время активной сессии «конечно» и зовисит от «настроек»

...

14.2 таки есть галочка про сохранить пароль

тоже в курсе -->

зоопарк, на каждый desktop свой свиток
slackware 12.2

...

настрой sudoers

слишком серьезно и глубоко, нужно решения в пользовательском окружении -->

для «обычного» пользователя с «обычным sudo»

...

sudo -A / --askpass

интересный пендиль, сенк

...

наиболее подходит zenity / sudo -S / sudo -A но остается «таймаут» и воможный повтор ввода пароля, при длит. операция

вопрос: плюсы/минусы сохранения пароля внутри скрипта в переменной?!

sunjob ★★★★
() автор топика

Не знаю, можно так или нет, но если спросить пароль у юзеров и сохранить его в переменной, и потом уже использовать для sudo.

skyman ★★★
()
Ответ на: комментарий от skyman

можно так сделать, поэтому и спросил на склолько это «фи-кака». ведь, по идее, не кашерно хранить «чуть ли не в открытую» пароль :о)

плюсы/минусы сохранения пароля внутри скрипта в переменной?!

sunjob ★★★★
() автор топика
Последнее исправление: sunjob (всего исправлений: 1)
Ответ на: комментарий от sunjob

на склолько это «фи-кака»

Вопрос в другом: Что будешь делать, если введёшь не тот пароль (с учётом его сохранения в переменной)? Ситуация резко обострится. Будет фейл не одного, а всех sudo.

anonymous
()
Ответ на: комментарий от anonymous

вопрос как раз в этом! :о)

плюсы/минусы сохранения пароля внутри скрипта в переменной?!

есть какие-то способы валидации пароля?

sunjob ★★★★
() автор топика
Последнее исправление: sunjob (всего исправлений: 2)
Ответ на: комментарий от sunjob

Ну и пусть хранится. Главное - не открытым текстом в самом скрипте.

Ну выполни sudo id, и проверь результат команды. Успешно - всё гуд, пароль правильный. Нет - неправильный. Завершай скрипт или спрашивай снова.

skyman ★★★
()
Последнее исправление: skyman (всего исправлений: 1)
Ответ на: комментарий от skyman

меня смущало вот что: если пароль не верный, то все равно отработает без проблем (если sudo без подтверждение пароля)

echo pass_no_true | sudo -S whoami
--> 
root

echo pass_no_true | sudo -S id
-->
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),7(lp),10(wheel),16(dialout),1000(beep)

пока все в голове варится, до «железки» добраться времени пока нет, собираю инфу :о)

sunjob ★★★★
() автор топика
Последнее исправление: sunjob (всего исправлений: 3)
Ответ на: комментарий от skyman

наверно, я плохо обьясняю :о) тут, ситуация «паховая»... во время ввода был принят «неверный» пароль, он запоминается в переменной, и потом «используется»... вот этот момент смущает! ясен пень, что в предыдущ.коде отработается все равно нормально, но сам факт того, что пароль запомнился «неправильный»... как то заставляет задуматься! какие подводные камни, что еще можно ожидать от кода... итд итп...

как-то так... хочется четкого понимания картины... хотя-бы в голове :о)

sunjob ★★★★
() автор топика
Ответ на: комментарий от sunjob

накой вообще запоминать пароль в переменной? sudo -v/sudo -k и собственный кэш sudo - вполне себе хранилище

ananas ★★★★★
()
Ответ на: комментарий от sunjob

man sudo

Security policies may support credential caching to allow the user to run sudo again for a period of time without requiring authentication. By default, the sudoers policy caches credentials on a per-terminal basis for 5 minutes. See the timestamp_type and timestamp_timeout options in sudoers(5) for more informa‐ tion. By running sudo with the -v option, a user can update the cached credentials without running a command.

ananas ★★★★★
()
Ответ на: комментарий от ananas

т.е. вы предлагаете кажные 5 ... нет, кажные 4.5 минуты запускать команду валидации?! или я не правильно понял?

sunjob ★★★★
() автор топика
Последнее исправление: sunjob (всего исправлений: 1)
Ответ на: комментарий от anonymous

ну т.е. да? именно это и предлогается?! спасибо, принял в копилку ! :о)))

p.s. но не катит... :о)

sunjob ★★★★
() автор топика
Последнее исправление: sunjob (всего исправлений: 1)
Ответ на: комментарий от sunjob

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

ananas ★★★★★
()
Ответ на: комментарий от ananas

возьмите за аналог gparted или как. иную подобную «шнягу» по сохранению/восстановлению имиджа диска ... или что ни-будь еще «какое иное счастье», вы же умные, сами придумайте :о)

хотя, «это тут» ни при чем... мы же рассматриваем общую задачу, балагурим, просто обмениваемся опытом... за что спасибо!!!

ну а по поводу вашего решения, сами-же видите, что «не совсем оно то, что надо» (при некоторых уточнениях)

да, я не придираюсь... спасибо за пендили :о)

п.с. под рукой пока нет конечной девелоп-железки, пока все в образах, в голове итд...

наброски проекта usb_flash_tool

sunjob ★★★★
() автор топика
Последнее исправление: sunjob (всего исправлений: 3)
Ответ на: комментарий от ananas

можно просто делать в начале скрипта

Почему не во white вместе с zenity+sudo пхнуть? И не в начало, а периодически?

anonymous
()
Ответ на: комментарий от anonymous

а нахрена периодически перезапускать скрипт?

ananas ★★★★★
()
Ответ на: комментарий от ananas

ну... «очевидный первоначальный пендиль-то» не проблема

вот «таймаут» - это да! пока вижу решение в сохранении пароля в переменной...

sunjob ★★★★
() автор топика
Ответ на: комментарий от sunjob

exec sudo -A -- $0 $@ перезапустит твой скрипт с правами рута. никаких дополнительных sudo (и, соответственно, паролей) больше не понадобится

а если охота перманентно пароль хранить - secret-tool в помощь

ananas ★★★★★
()
Ответ на: комментарий от ananas

я и так могу запускающим скриптом через судо стартонуть основной скрипт... :о) или вообще через *.desktop/sudo

а шо делать с пользовательским логом, который будет писаться в рутовский каталог, с правами рута...? а потом захочется посмотреть его... итд итп... :о)

sunjob ★★★★
() автор топика
Последнее исправление: sunjob (всего исправлений: 3)
Ответ на: комментарий от sunjob

а лог вообще не проблема, если ты его пишешь

есть logger. есть exec > "/wherever/you/want/log.file" 2>&1

выбирай, что больше нравится

ananas ★★★★★
()
Ответ на: комментарий от ananas

ни то ни другое не нравиться :о)

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

да и потом, я видимо, многое не допонимаю, если основной скрипт будет запущен под судо, то и все команды внутри будут выполняться с правами рута... разве не прийдется немного дополнительно напрячься, что бы нормально слить юзеру лог-файл с нормальными правами доступа, в каталог пользователя? (могу ошибаться, поправьте)

sunjob ★★★★
() автор топика
Последнее исправление: sunjob (всего исправлений: 2)
Ответ на: комментарий от sunjob

ну вылысыпедь тогда квадратные колеса, бог в помощь

ananas ★★★★★
()
Ответ на: комментарий от sunjob

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

в случае с перенаправлением через exec спокойно можно выставить файлу правильных владельца и права доступа

ananas ★★★★★
()
Ответ на: комментарий от anonymous

нет, для пользователя...

но у меня немного другой велописед, из-за того, что при использовании zenity-GTK3 на моих тестовых машинах в эхо очень много мусора высиралось, от чего логи становились нечитаемые

поэтому, я использую свою внутреннюю, в скрипте, функцию логирования...

sunjob ★★★★
() автор топика
Ответ на: комментарий от ananas

если вы про

exec > «/wherever/you/want/log.file»

то я ответил, по поводу «своей функции логирования»...

или я не правильно понимаю ситуацию, тогда, не стесняйтесь, тыкайте, мокайте, пинайте :о)

спасибо

п.с. к стати, если не изменяет память, я об этом писал в тесктовиках и скрипте (в комментах) в проекте на сорсфорже

sunjob ★★★★
() автор топика
Последнее исправление: sunjob (всего исправлений: 2)
Ответ на: комментарий от sunjob

при перенаправлении с exec можно и свои фильтры навтыкать. как пример - https://sanana.kiev.ua/index.php/archives/64

кроме того, exec по идее наследует открытые файловые дескрипторы, так что перенаправление можно сделать перед exec sudo и тем самым сразу заполучить правильные пермишены лога

если под «мусором zenity-GTK3» понимается выхлоп gtk-шных ворнингов, могу посоветовать yad вместо zenity. ну или просто подавление stderr (2> /dev/null)

ananas ★★★★★
()
Ответ на: комментарий от ananas

за инфу, сенк, будет секундачка почитаю

по поводу мусора - ну там не только варнинги, там черт ногу сломает все это разгребать :о) решил что будет удобнее все-таки сделать отдельно логирование

про yad в курсе, но решил все-таки зенитю юзать, т.к. яд заброшен раньше, чем зинитя, а это, как говорил Довыдов - Факт...

по идее наследует открытые файловые дескрипторы,

вроде разобрались, что тут без проблем

перенаправление можно сделать перед exec sudo

вот этот вариант не понятен (сенк... за сранее)

stderr (2> /dev/null)

да, вроде как пробовал, что-то не понравилось опять таки :о) ошибки было-бы неплохо, все-таки видеть... :о) что-то еще не проканало... голова опухла от всего этого колдовства :о)

спасибо запендили

sunjob ★★★★
() автор топика
Последнее исправление: sunjob (всего исправлений: 3)
Ответ на: комментарий от ananas

ну... будем знакомы :о)

yad-0.40.0.tar.xz	2017-11-18
или я не там смотрю? (по описанию яд, конечно-же, перевешивал, но дата последней версии наталкивала на соотв. мымсли... парируй, заяй! что на это скажешь?) ... надо будет потестировать и яд более пристально, если голова не лопнет :о)

ананас с ядом - интересное сочетание! :о)

...

мне вот с logger-ом некоторые моменты не понятны т.е. я не могу лог отправить в кастом-файл с кастомным сообщением?

-f, --file file

Log the contents of the specified file.  This option cannot be combined with a command-line  message.

sunjob ★★★★
() автор топика
Последнее исправление: sunjob (всего исправлений: 6)
Ответ на: комментарий от sunjob

или я не там смотрю?

я не знаю, где вы смотрите, но - https://github.com/v1cont/yad, последний релиз 6.0 был в апреле

я не могу лог отправить в кастом-файл с кастомным сообщением?

нет, эта опция для отправки содержимого файла в syslog. но указывая свои priority и msgid можно спокойно выгребать и фильтровать сообщения на уровне настройки сислога или грепать их из общих логов

ananas ★★★★★
()
Ответ на: комментарий от ananas

они такие... :о)

...

нет, эта опция для отправки содержимого файла в syslog. но указывая свои priority и msgid можно спокойно выгребать и фильтровать сообщения на уровне настройки сислога или грепать их из общих логов

мать моя... вот так вечером спросишь у незнакомца закурить, а он тебе такую тираду выдасть... все, амбда! психушка обеспечена

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

sunjob ★★★★
() автор топика
Ответ на: комментарий от sunjob

вопрос был в частности про кастомный пользовательский лог (в хомятнике юзверя)

вот пример того, о чем я говорил

(victor@ksakep)~/tmp/log $> ll                                                                                                          [sh]
итого 4.0K
-rwxr-xr-x 1 victor users 139 июл 31 16:22 t.sh*
(victor@ksakep)~/tmp/log $> cat t.sh                                                                                                    [sh]
#! /bin/bash

if [[ $(id -u) != 0 ]]; then
    exec > $(pwd)/logfile 2>&1
    exec sudo -- $0 $@
fi

echo -n "message to log from "
id -un
(victor@ksakep)~/tmp/log $> ./t.sh                                                                                                      [sh]
(victor@ksakep)~/tmp/log $> ll                                                                                                          [sh]
итого 8.0K
-rw-r--r-- 1 victor users  25 июл 31 16:22 logfile
-rwxr-xr-x 1 victor users 139 июл 31 16:22 t.sh*
(victor@ksakep)~/tmp/log $> cat logfile                                                                                                 [sh]
message to log from root
(victor@ksakep)~/tmp/log $>                                                                                                             [sh]

лог пользовательский, но пишет в него рут

ananas ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.