如何以根用户身份运行Dolphin?


14

我目前正在使用dolphin 17.04.3,每当我以sudo身份运行它时,都会出现以下错误, Executing Dolphin as root is not possible.而没有解释原因或提供替代方法。那么,如何以root用户身份运行海豚来复制或删除文件?


您正在使用哪个版本的Ubuntu?
乔治·乌德森

1
您在使用Wayland吗?默认情况下,wayland不允许GUI程序以root身份运行。
ravery

不起作用。创建或移动文件的选项在上下文菜单中只是显示为灰色。请检查您的版本
Ankur S

我正在使用已安装kde的ubuntu 17.10和x11
Ankur S

2
“那么,如何以root用户身份运行海豚来复制或删除文件?” 请重新评估这个问题。使用命令行执行管理任务。它专门用于管理任务。图形工具不应用于管理任务。以管理员身份运行图形工具会在权限方面带来看不见的副作用,并且直到最近,开发人员都主动将其阻止。您是否真的认为与知道(或应该知道;))的人对抗,确切地说是图形文件操作工具可以做什么?
林茨温德

Answers:


11

短:

海豚17.04

Dolphin 17.04或更高版本具有检查功能:

if uid == 0 then show the "Executing Dolphin as root is not possible." and exit.

解决方法

您可以编辑源并禁用检查。然后,海豚将像以前一样工作。

海豚18.08

很少有审查要求

Dolphin 18.08.0正在使用这些更改,可以使用pkexec命令作为管理超级用户来启动Dolphin。

pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin

更多:KDE Foruns-如何使用Kubuntu或KDE neon以root身份运行Dolphin 18.08?- https://forum.kde.org/viewtopic.php?f=224&t=153655

在此处输入图片说明

背景:

早期-KDE论坛-如何以root身份运行Dolphin?:https://forum.kde.org/viewtopic.php?f = 224 t = 141836

出于安全原因:禁止在Linux上以root用户身份执行Dolphin- https ://cgit.kde.org/dolphin.git/commit/?id =0bdd8e0b0516555c6233fdc7901e9b417cf89

禁止在Linux上以root用户身份执行Dolphin基本上是MartinGrässlin编写的commit kate / 9adcebd3c2e476c8a32e9b455cc99f46b0e12a7e副本

禁止在Linux上以root用户身份执行kate和kwrite:https ://phabricator.kde.org/R40: 9adcebd3c2e476c8a32e9b455cc99f46b0e12a7e

更多提示

KDE Reddit-KDE App 17.04上的Dolphin根目录:https : //www.reddit.com/r/kde/comments/6785b1/dolphin_root_on_kde_app_1704/

绕过“无法以root身份执行Dolphin”并重新获得KDE Dolphin根特权:https : //www.reddit.com/r/kde/comments/6xs3mp/bypass_executing_dolphin_as_root_is_not_possible/

未来

KIO中的Polkit支持:https ://phabricator.kde.org/T6561

准备就绪后,Dolphin将在需要时显示密码查询。现在,使用已修补的Dolphin&KIO:

在此处输入图片说明


1
您能否详细介绍一下“出于安全原因”?
吉姆·麦克亚当斯'18

您阅读了phabricator.kde.org/…吗?相同/更多:MartinGrässlin-以root身份编辑文件:blog.martin-graesslin.com/blog/2017/02/editing-files-as-root
user26687

因此,简单的答案是“除非安装修补程序版本,否则您不能以root身份运行Dolphin”?

@ user47206:为什么不自己打补丁?;)请在下面查看我的答案!
WitchCraft

10

这不是一个答案,只是针对OP(copying or deleting files)所述目的的解决方法。

这个想法是为了

  1. 安装另一个没有该限制并且不带来很多依赖的文件管理器

  2. 在Dolphin中为此其他文件管理器创建“以root用户打开”上下文菜单。

可以使用其他桌面的主要文件管理器(Nautilus,Nemo,Caja,Thunar),但是它们确实带来了一些依赖性。甚至PCManFM和PCManFM-Qt都能做到这一点。如果您出于其他目的需要其中之一,那么添加一个可能是一个很好的解决方案。

我发现Krusader(我认为过去曾经在某些KDE系统中默认安装过)可以很容易地安装,在Kubuntu 18.04中没有任何依赖关系,并且可以用作root用户。

sudo apt install krusader

在其工具下具有“根”选项。

在此处输入图片说明

要求在gui中输入密码。

要在海豚中添加上下文菜单,请创建文件夹~/.local/share/kservices5/ServiceMenus,然后执行

kate ~/.local/share/kservices5/ServiceMenus/filemanager_root.desktop

并添加

[Desktop Action root]
Exec=/usr/lib/kde4/libexec/kdesu krusader
Icon=dolphin
Name=Open in Krusader file manger as administrator

[Desktop Entry]
Actions=root
Icon=krusader_root
MimeType=inode/directory
ServiceTypes=KonqPopupMenu/Plugin
Type=Service
X-KDE-Priority=TopLevel
X-KDE-StartupNotify=false

出于某种原因,kdesu krusader它不起作用,我从这里使用了解决方案..还是可以的konsole -e sudo krusader,但是显示了终端,而不是密码提示的gui。

然后,您将在Dolphin中看到:

在此处输入图片说明

带来对话

在此处输入图片说明

这是可行的..


4

根据以上答复,我已经制作了自己的版本。因此,要添加上下文菜单以root身份打开Dolphin,请按照以下步骤操作:

  • DolphinAsRoot.desktop在目录上创建一个名为例如的文件~/.local/share/kservices5/ServiceMenus/
  • 使用文本编辑器在其上放置以下内容:
[Desktop Entry]
Actions=root
Icon=system-file-manager-root
MimeType=inode/directory
ServiceTypes=KonqPopupMenu/Plugin
Type=Service
X-KDE-Priority=TopLevel
X-KDE-StartupNotify=false

[Desktop Action root]
Exec=/usr/bin/pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin
Icon=system-file-manager-root
Name=Open as administrator
  • 如果仍未显示在Dolphin的上下文菜单中,请转到“设置->配置Dolphin ...->服务”,然后激活您最近添加的选项。它应该在那里。如果没有,请关闭Dolphin甚至注销并登录您的会话。

仅此而已,我希望它能像帮助我一样帮助大家;)


0

我要做的就是将终端添加到工具栏(尽管快捷键绑定到F4),并根据需要使用命令行以sudo的方式执行操作。

像这样

是的,它可能不那么方便,但是它迫使您开始学习命令行,同时直观地了解命令的实际工作方式。

这是在Arch上,但是功能在Ubuntu上应该相同。希望能有所帮助。


0

这是Dolphin 17.x的解决方法:

export XDG_CURRENT_DESKTOP=KDE; LD_PRELOAD=/home/roger/Downloads/dolphin/usr/lib64/libkdeinit5_dolphin.so /usr/bin/dolphin

得到 libkdeinit5_dolphin.so这里

经过我的测试,它在Ubuntu仿生中工作正常。

资源


0

这很琐碎!

只要看一下kate和kwrite的源代码:

diff --git a/kate/main.cpp b/kwrite/main.cpp

直接在“ main”函数开始的第一行代码中,您将找到:

/**
 * Check whether we are running as root
 **/
if (getuid() == 0) // uid = user id = 0 ==> means if you are user 0 (aka root)
{
    std::cout << "Executing Kate as root is not possible. To edit files as root use:" << std::endl;
    std::cout << "SUDO_EDITOR=kate sudoedit <file>" << std::endl;
    return 0;
}

海豚没有什么不同,除了在libkdeinit5_dolphin.so中发生这种情况。

因此,以root身份运行是微不足道的,我们需要做的只是跳过if uid = 0检查。

我们这样做的方法是永久性地修补kate,kwrite和dolphin。
因此,我们要做的第一件事就是将二进制内容转储到文本文件中:

objdump -Crd /usr/bin/kate >> ~/kate.txt
objdump -Crd /usr/bin/kwrite >> ~/kwrite.txt

现在,您可以使用来查看文件gedit ~/kate.txt,如果搜索getuid,则会发现类似以下内容:

   2a985:   31 c0                   xor    %eax,%eax
   2a987:   89 bc 24 dc 00 00 00    mov    %edi,0xdc(%rsp)
   2a98e:   e8 ed ce ff ff          callq  27880 <getuid@plt>
   2a993:   85 c0                   test   %eax,%eax
   2a995:   0f 84 e9 1e 00 00       je     2c884 <__cxa_finalize@plt+0x1f5c>

现在,在左侧找到内存地址,在冒号(:)之后,您将看到二进制指令代码(hex),在其右侧,您将看到该代码的反汇编(又名“反汇编”) 。

现在,您看到那里调用了getuid,测试该值是否为零,然后跳转到if语句,即返回值是否等于零(je:如果相等则跳转)。

现在我们不想跳到if中,因此我们只删除那里的废话。但是,仅删除该废话将使地址更改6个字节,从而浪费了程序中进程中的所有相对跳转,从而浪费了程序。因此,您只需将跳转语句的整个长度替换为NOP(N o Op的缩写)即可。关合作)指令,又名0×90的指令码/六。

因此,您需要用0x90替换那里的每个跳转字节,以便您以前拥有的位置

0f 84 e9 1e 00 00

您将拥有

90 90 90 90 90 90

这可以简单地通过十六进制编辑器来完成。
因此,我们安装了一个:

sudo apt-get install wxhexeditor

现在,在十六进制编辑器中,搜索0f 84 e9 1e 00 00,然后将其替换为90 90 90 90 90 9090。如果只有0f 84 e9 1e 00 00出现,那么这很简单。只需将十六进制的字节更改为90 90 90 90 90 90并保存。完了 无论您是否是root,Kate或kwrite现在都将打开。

如果对海豚做同样的事情,您会意识到objdump -Crd /usr/bin/dolhin产生的拆卸时间很短。

如果运行ldd /usr/bin/dolphin,则会看到dolphin加载共享库libkdeinit5_dolphin.so

linux-vdso.so.1(0x00007ffc2fdf0000)libkdeinit5_dolphin.so => /usr/lib/x86_64-linux-gnu/libkdeinit5_dolphin.so(0x00007fb54e76c000)

因此,您在libkdeinit5_dolphin.so上执行objdump:

objdump -Crd /usr/lib/x86_64-linux-gnu/libkdeinit5_dolphin.so >> ~/libkdeinit5_dolphin.txt

现在打开objdump: gedit ~/libkdeinit5_dolphin.txt

搜索getuid,您将看到搜索结果之一是:

   41f95:   31 c0                   xor    %eax,%eax
   41f97:   89 7c 24 5c             mov    %edi,0x5c(%rsp)
   41f9b:   e8 50 b6 ff ff          callq  3d5f0 <getuid@plt>
   41fa0:   85 c0                   test   %eax,%eax
   41fa2:   0f 84 58 1a 00 00       je     43a00 <kdemain@@Base+0x1a90>
   41fa8:   48 8d 84 24 a0 00 00    lea    0xa0(%rsp),%rax

您会发现,这真是太棒了,就像kate和kwrite一样。
现在,/usr/lib/x86_64-linux-gnu/libkdeinit5_dolphin.so在您的十六进制编辑器中打开,搜索0f 84 58 1a 00 00并替换为90 90 90 90 90 90
点击保存,并完成。

海豚现在以根用户身份运行。

注意:最好为您修改的文件制作备份副本,以防万一。

另外,您可以下载kate,kwrite和dolphin的源代码,从源代码中删除该废话,然后编译并安装。但是由于愚蠢的cmake系统缺少一些愚蠢的废话模板,例如图标之类的愚蠢废话,可能是因为回购提供的cmake太旧了,所以这是行不通的。太糟糕了,如果它能正常工作,那就太简单了,不是吗。

但是,仅像我描述的那样修补可执行文件,速度就更快,因此无论如何,谁在乎。

您会看到,这并不简单,但是很简单。

PS:
现在,每当通过apt更新kate,kwrite或dolphin时,您的更改都将被覆盖。您需要重新应用它们。我将自动处理补丁程序,而不是让您胜任,还有您的joice编程语言;)

可以用纯扑吗?

另外,如果您想为vlc修补相同的废话,则可以使用sed进行操作:

sed -i 's/geteuid/getppid/' /usr/bin/vlc

只需将sed语句放入脚本中,以便在离线且无法访问互联网的情况下重新申请。

观看/收听vlc上的内容时,以kate,kwrite和dolphin为根的快乐黑客行为。

PS2:
笨拙的根检查在KDE v19.04中采用了Dodo的方式。
谁说过ñ进化是一件坏事。
进步-干杯!


0

不是解决方案,而是建议。...更改海豚和文件很有风险。Double Commander是一个很好的选择,可以在存储库中找到。它将没有root权限地安装。要获得root用户,只需在终端中输入“ sudo doublecmd”。在处理大量文件和数百万个文件时,它具有许多优点。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.