需要 root 权限时询问密码

需要 root 权限时询问密码

有没有办法让程序在需要 root 权限时要求输入密码?例如,我想使用 File Roller 将一些文件提取到/usr/share/显然需要 root 权限的地方,但它不会给我错误,而是希望提示输入密码。

答案1

直接回答您的问题:不,据我所知,没有办法让程序在没有足够的权限执行操作时要求输入密码而不是失败。有两种选择:

  • 一些程序知道某些操作需要管理权限,并在执行某些操作之前要求输入密码(例如,软件中心在安装程序之前要求输入密码)。

  • 大多数其他程序需要以必要的权限启动。正如所提到的,您需要使用sudo [command](在终端中)、gksu [command](在 Gnome/Unity 中)或kdesu [command](在 KDE 中)来实现这一点。

答案2

通常的方法是进入命令行模式(alt + F2 xterm,或 dash 终端),然后使用gksudo file-roller并输入您的密码。

sudo 和 gksudo 将授予您 root 权限。

答案3

您必须使用gksu上一个用户提到的方法启动 File Roller。将项目添加到启动栏时,可以使用需要权限的命令(例如 faxanswer):

gksu faxanswer ttyS4

如果您使用文件打包器来更新内容/usr/share,最好只使用运行命令,而不是创建永久图标。

答案4

有什么方法可以让程序在需要 root 权限时询问密码吗?

是的——使用帮助脚本。

以下是使用 bash 复制 (cp) 的示例。复制 (备份) 包含在 perl 脚本中,用于检查文件的所有者。该脚本使用 perl stat /1/ 命令。此处从 KDE 服务菜单 /2/ 调用该脚本。如果文件归 root 所有 /3/,则使用 sudo 的 KDE 前端 /4/、/5/。

备份.pl:

用法:“backup.pl 文件名”

#!/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");
}

在此处输入图片描述

链接:

  1. http://perldoc.perl.org/functions/stat.html
  2. http://techbase.kde.org/Development/Tutorials/Creating_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

相关内容