我目前正在使用dolphin 17.04.3
,每当我以sudo身份运行它时,都会出现以下错误,
Executing Dolphin as root is not possible.
而没有解释原因或提供替代方法。那么,如何以root用户身份运行海豚来复制或删除文件?
我目前正在使用dolphin 17.04.3
,每当我以sudo身份运行它时,都会出现以下错误,
Executing Dolphin as root is not possible.
而没有解释原因或提供替代方法。那么,如何以root用户身份运行海豚来复制或删除文件?
Answers:
短:
海豚17.04
Dolphin 17.04或更高版本具有检查功能:
if uid == 0 then show the "Executing Dolphin as root is not possible." and exit.
解决方法
您可以编辑源并禁用检查。然后,海豚将像以前一样工作。
海豚18.08
很少有审查要求
重新允许以root用户身份运行Dolphin(但仍不使用sudo):https : //phabricator.kde.org/D12795
以root用户身份运行时显示警告:https : //phabricator.kde.org/D12732
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:
这不是一个答案,只是针对OP(copying or deleting files
)所述目的的解决方法。
这个想法是为了
安装另一个没有该限制并且不带来很多依赖的文件管理器
在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中看到:
带来对话
这是可行的..
根据以上答复,我已经制作了自己的版本。因此,要添加上下文菜单以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
仅此而已,我希望它能像帮助我一样帮助大家;)
这很琐碎!
只要看一下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的方式。
谁说过ñ进化是一件坏事。
进步-干杯!