如何以 root 身份运行 Dolphin?

如何以 root 身份运行 Dolphin?

我目前使用Dolphin 17.04.3,每当我将其作为运行时sudo,它都会出现以下错误:

Executing Dolphin as root is not possible.

没有解释原因,也没有给出替代方案。

如何运行 Dolphin 来root复制或删除文件?

答案1

短的:

海豚 17.04

Dolphin 17.04 或更高版本有一个检查:

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

解决方法

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

海豚 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 基本上是 Martin Grässlin 编写的提交 kate/9adcebd3c2e476c8a32e9b455cc99f46b0e12a7e 的副本

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

更多提示

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

绕过“无法以 root 身份执行 Dolphin”并重新获得 KDE Dolphin root 权限: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:

在此处输入图片描述

答案2

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

这个想法是

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

  2. 在 Dolphin 中为这个其他文件管理器创建一个“以 root 身份打开”上下文菜单。

可以使用其他桌面的主要文件管理器(Nautilus、Nemo、Caja、Thunar),但它们确实会带来一些依赖关系。即使是 PCManFM 和 PCManFM-Qt 也存在依赖关系。如果您出于其他目的需要其中一个,那么添加它可能是一个很好的解决方案。

我发现克鲁萨德(我认为过去它曾经在某些 KDE 系统中默认安装)可以轻松安装,在 Kubuntu 18.04 中没有任何依赖项,并且可以以 root 身份使用。

sudo apt install krusader

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

在此处输入图片描述

在 GUI 中要求输入密码。

要在 Dolphin 中添加上下文菜单,请创建文件夹~/.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 中看到:

在此处输入图片描述

带来对话

在此处输入图片描述

这是一个有效的方法。

答案3

我根据上面的回复制作了自己的版本。因此,要添加上下文菜单到以 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 或甚至注销并重新登录您的会话。

就是这样,我希望它能像帮助我一样帮助大家;)

答案4

这很简单!

只需查看 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;
}

Dolphin 没有什么不同,只不过这发生在 libkdeinit5_dolph.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>

现在,在左侧,您可以找到内存地址,在冒号(:) 后面,您将看到二进制指令代码(十六进制),在其右侧,您将看到该代码的反汇编(即它的含义)。

现在,您会看到,它调用 getuid,测试其是否为零,并跳转到 if 语句,也就是说,如果返回值等于零(je:如果相等则跳转)。

现在我们不想跳转到 if 中,所以我们只需删除那里的垃圾即可。但仅仅删除那些垃圾就会将地址改变 6 个字节,从而破坏程序中任何相关的跳转,并因此破坏程序。因此,您只需将整个跳转语句替换为 NOP(o操作eration)指令,即指令代码/十六进制中的 0x90。

因此你需要用 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 90。如果 0f 84 e9 1e 00 00 只出现一次,并且确实存在,那么这非常简单。只需将十六进制中的字节更改为 90 90 90 90 90 90 并保存即可。完成。无论您是否是 root 用户,Kate 或 kwrite 现在都会打开。

如果你对海豚做同样的事情,你会发现objdump -Crd /usr/bin/dolphin它会产生一个非常短的反汇编过程。

如果你运行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
点击保存,就完成了。

Dolphin 现在以 root 身份运行。

注意:最好对您修改的文件进行备份,以防万一。

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

但是,正如我所描述的那样,只需修补可执行文件就会更快,所以无论如何谁会在乎。

您瞧,这并不是一件简单的事情,但却是件很简单的事情。

PS:
现在,任何时候通过 apt 更新 kate、kwrite 或 dolphin,您的更改都将被覆盖。您需要重新应用它们。我将把自动修补过程交给您,以及您的编程语言 joice ;)

这可以在纯 bash 中完成吗?

另外,如果您想修补 vlc 以解决同样的问题,您可以使用 sed 来实现:

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

只需将该 sed 语句放入脚本中,这样如果您处于离线状态并且没有互联网访问,就可以重新应用。

快乐地进行黑客攻击 - 使用 kate、kwrite 和 dolphin - 以 root 身份 - 同时在 vlc 上观看/收听某些内容。

PS2:
糟糕的根检查在 KDE v19.04 中消失了。
谁说n进化是一件坏事。
为了进步——干杯!

相关内容