Спросите пароль, когда требуется root

Есть ли способ заставить программы запрашивать пароль, когда требуется root? Например, я хочу извлечь некоторые файлы с помощью File Roller в /usr/share/, где, по-видимому, требуется root, но вместо ошибки, которую он дает мне, я хотел бы запросить пароль.

3
задан 30 October 2011 в 15:27

4 ответа

Чтобы прямо ответить на ваш вопрос: Нет, насколько я знаю, нет способа заставить программу запросить пароль, вместо того, чтобы выполнить ее, если у нее недостаточно разрешений для выполнения операции. Есть два варианта:

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

  • Большинство других программ необходимо запускать с необходимыми привилегиями. Как уже упоминалось, для этого вам нужно использовать sudo [command] (в терминале), gksu [command] (в Gnome / Unity) или kdesu [command] (в KDE).

0
ответ дан 30 October 2011 в 15:27

Обычный способ - перейти в режим командной строки ( alt + F2 xterm или dash терминал), затем использовать gksudo file-roller и ввести свой пароль.

sudo и gksudo предоставят вам root-права.

0
ответ дан 30 October 2011 в 15:27

Есть ли способ заставить программы запрашивать пароль, когда требуется root?

Да - с помощью вспомогательных скриптов.

Вот пример с копией bash (cp). Копирование (резервное копирование) заключено в сценарий perl для проверки владельца файла. Скрипт использует команду perl stat / 1 /. Здесь скрипт вызывается из сервисного меню KDE / 2 /. Если файл принадлежит пользователю root / 3 /, тогда используется внешний интерфейс KDE для sudo / 4 /, /5/.

backup.pl:

использование: «backup.pl filename»

#!/usr/bin/perl -w

$FILENAME = $ARGV[0];

$MARKER = "_Backup_";

($DAY,$MONTH,$YEAR) = (localtime)[3,4,5];
$DAY_STAMP = sprintf '%04d%02d%02d', $YEAR+1900, $MONTH+1, $DAY;

for ( $I=0; $I<101; $I++ ) {
   if ( $I > 99 ) { die system ("kdialog --sorry '...too many copies'"); }
   $INDEX = sprintf '%02d', $I;
   $NEW_NAME = $FILENAME . $MARKER . $DAY_STAMP . $INDEX;
   last unless (-e $NEW_NAME);
}

$UID = (stat("$FILENAME"))[4];

@Q_COPY_COMMAND = ("\"", "cp", "$FILENAME", "$NEW_NAME", "\"");
@COPY_COMMAND = ("cp", "$FILENAME", "$NEW_NAME");

if ( $UID == 0 ) {
   system ("kdesudo bash -c @Q_COPY_COMMAND");
} else {
   system ("@COPY_COMMAND");
}

enter image description here

Ссылки:

  1. http://perldoc.perl.org/functions/stat.html
  2. http://techbase.kde.org/Development / Учебники / Создание_Konqueror_Service_Menus
  3. https://help.ubuntu.com/community/RootSudo
  4. http://kde-apps.org /content/show.php?content=72106
  5. https://launchpad.net/kdesudo
0
ответ дан 30 October 2011 в 15:27

Необходимо было бы запустить использование Ролика Файла gksu как упомянуто предыдущим пользователем. Когда Вы добавляете объекты к своей панели запуска, можно использовать команду, такую как faxanswer, который требует полномочий:

gksu faxanswer ttyS4

Если Вы используете тот Ролик Файла однажды для обновления материала в /usr/share, лучше просто использовать Команду выполнения, чем создают постоянный значок.

1
ответ дан 30 October 2011 в 15:27

Другие вопросы по тегам:

Похожие вопросы: