借助 setuid 解决 Mac OS X 下普通用户启动 htop 不显示进程完整路径问题

htop 是一个常用的查看进程和系统资源使用的工具(类似 top),在 Mac 下可以通过 homebrew 安装 htop-osx(但是安装的这个版本是很多年前的0.8版本的 fork)。

但是 Mac 下的 htop 有个小问题,普通用户执行的时候不显示进程路径:

QQ20151017-0@2x

以 root 执行的时候显示则是正常的(Linux 下的 htop 并没有这个问题)

可以使用 setuid 解决这个问题:

sudo chown root /usr/local/Cellar/htop-osx/0.8.2.7/bin/htop
sudo chmod 4555 /usr/local/Cellar/htop-osx/0.8.2.7/bin/htop

简单说明一下两条命令的含义,第一条是将文件属主变成 root,第二句是增加 setuid 权限位,setuid 是 Unix 文件的隐藏权限位的一项,setuid 开启的时候任何用户执行时都将以文件拥有者的身份进行执行,sudo 就是使用了 setuid 的这个特性,setuid 是特殊权限位的第一位也就是对应二进制的4,4555即-r-sr-xr-x,这样普通用户执行 htop 的时候就会以 root 身份执行,可以从 ps 等命令观察到,更多关于特殊权限位的信息参见 鸟哥

ps aux | grep htop                                    
root             9077   4.8  0.0  2475520   2036 s002  S+    8:04下午   0:00.10 htop

本来我是想编译一个 github 上的新版本看看的,然而遇到了两个问题,一是 brew 里并没有可以安装的 libncursesw5-dev 包以至于需要启用 –disable-unicode 参数(感觉会少些功能),二是即是不管 libncursesw ,编译也会出错:QQ20151017-1@2x

感觉并不像依赖出了什么问题,在 Debian 7 下测试是一切正常的,(所以说我不喜欢编译安装东西······)


UPDATE 2015.11.2

github 上提了个 issue,现在这个编译错误已经修复

 


本文链接:https://www.starduster.me/2015/10/17/display-path-in-htop-on-macosx/
本站基于 Creactive Commons BY-NC-SA 4.0 License 允许并欢迎您在注明来源和非商业使用前提下自由地对本文进行复制、分享或基于本文进行创作。
请注意:受限于笔者水平,本站内容可能存在主观臆断或事实错误,文中信息也可能因时间推移而不再准确,在此提醒读者结合自身判断谨慎地采纳。

3 条评论


    1. 所以我不喜欢 Gentoo ·····而且 portage 还算是比较方便了

      回复

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据