360 for Linux 与 setuid

前言

今日,国内著名安全类软件 360 正式进军 Linux 平台,目前已提供 Debian/Ubuntu/Deepin 以及中标麒麟的预编译二进制。而包括我在内的吃螃蟹者都不同程度地注意到了 360 for Linux 的二进制在正常状况下被设置了 setuid 位。即 4755 权限。如 http://www.v2ex.com/t/158380#reply27 以及 http://tieba.baidu.com/p/3499343332

图: 360 for Linux 的权限位

如图所示,这是我在 VirtualBox OSE 中安装的 Lubuntu 14.10 中的 360 for Linux 安装后的权限位, ls 已经将其标红并且显示权限位为 -rwsr-xr-x (4755) 。下面就 setuid 以及其作用展开一些推论。

什么是 setuid 以及相关的安全隐患

setuid 以及 setgid 是 UNIX 环境下的特殊权限位。当作用于可执行文件时,该权限位将导致无论以何用户启动,该可执行文件将拥有其所有者的权限。如 /usr/bin/sudo 的拥有者为 root 且权限为 4755, 那么即使一个非 root 用户执行了 sudo, 其依然会拥有 root 的权限,如读取 /etc/shadow 文件 (-r————, root:root) 的权限。对于用户而言,其最直接的意义在于合法的无密码提权。这使得一般使用该特性的程序都被小心设计以免不测。因为如果设计不当,攻击者可能可以在不需要任何密码的情况下轻松夺取对目标系统的最高权限。基于同样的原因,包括 Linux 在内的部分操作系统会忽略设置在脚本文件上的 setuid/setgid 位。对于普通用户而言,一个被 setuid/setgid 了的恶意可执行文件将能够在不盗取密码的情况下破坏整个系统(尤其是当类似 TOMOYO Linux 的强制访问控制系统没有正确设置时)。因而一般情况下开发者以及系统管理员都会谨慎处理这一特殊权限。如在 Debian 中,可以通过对 man 程序设置 setuid 位来加快 man-db 索引但是由于可能带来的安全隐患该选项必须在安装过程中由用户启用。

360 for Linux 对 setuid 应用的利弊分析

setuid 位最直接的用处是允许 360 for Linux 在不被用户注意的情况下以 root 权限允许。一方面,这将免除用户每次开机都要输入密码的麻烦;另一方面,由于用户无法察觉,该程序可能在有意无意之中对系统造成无法修复的破坏或者成为其他恶意软件入侵系统的跳板(比如 Windows 上的 Sony BMG CD 反拷贝程序由于设计不良就成为了其他恶意软件的跳板)。同时,如果该程序留有(可能存在)的后门,用户也无法从 UNIX 权限系统得到应有的保护。

图:部分使用了 setuid 的程序。这些程序并非全部都需要该权限位,部分程序可以改用 PolicyKit 来实现提权。

PolicyKit 与无密码提权一些想法

图: GNOME PackageKit 使用 PolicyKit 进行有密码提权以删除软件包

图: Windows UAC 对需要 Administrator 权限的 Acronis True Image 进行提权前提示用户输入凭据

我们必须承认,无密码提权在一定程度上方便了用户,但与此同时这种行为也埋下了安全隐患。比如在 AOSC OS2 时代, AnthonOS 默认 sudo 可以进行无密码提权但是这一设定以及因为潜在的安全风险被禁止了。

在很多时候,密码是给用户知情权与选择权。用户知道一个程序要提权并且用户也有选择去拒绝他所不信任的提权请求。同时,如果用户如果对某个先前的决定反悔或发现其为误操作,此时也可以阻止该行为的继续以避免损失。

360 这种行为则涉嫌向用户隐瞒自身的提权行为。这也许只是为了方便用户,也有可能有其他企图。

而如果只是为了避免在 Windows Vista 时代的尴尬,也就是每次开机都出现授权弹窗,也不一定需要使用 setuid 这一有严重安全隐患的方法。 PolicyKit 提供了一套将程序分离为以特权权限运行和以非特权权限运行的两部分并且进行互相沟通的机制。比如 GNOME PackageKit 本身以非特权运行,其通过 PolicyKit 发起需要特权的请求并由 PolicyKit 决定是否需要用户参与提权。而在 Windows 平台上,Avira 旗下的安全产品的主界面并不需要以特权启动,而仅在更改设定或关闭/开启监控时通过 UAC 进行提权,避免了开机时弹出交互式授权对话框的尴尬。

结语

综上所述, 360 for Linux 使用 setuid 可能有其原因。但是鉴于 setuid 本身巨大的隐患,建议用户现阶段慎重使用该软件。我本人也呼吁现在与或即将与奇虎有合作的厂商对 360 for Linux 本身进行全面的安全审计以防被居心叵测者利用或者可能存在后门。与此同时,我本人也建议 360 for Linux 使用标准的 PolicyKit 架构,实现特权部分与非特权部分的分离,并且给用户适当的提示以满足其知情权和选择权。

原文发布时间:2014-01-02

本文来自云栖合作伙伴“linux中国”

360 for Linux 与 setuid相关推荐

  1. linux系统浏览器安装失败怎么办,360浏览器Linux版测试期已过并删除配置文件也不能安装使用的解决...

    360浏览器Linux版是有测试期的,为三个月,如果你的试用期已过,但是无法正常使用,或者你已经删除了360浏览器配置文件,但还是不能使用,请按如下解决方法处理. 前言 通常来说,从提示过期后你只要删 ...

  2. linux 启动最快浏览器,360浏览器linux版竟然比谷歌的chrome浏览器还快

    360浏览器linux版准确的说是360浏览器ubuntu版,基于chromium技术,因为它只提供支持ubuntu系列的deb包,目前推出的2018年8月24日更新版(browser360-beta ...

  3. linux 进程 setuid,Linux SetUID(SUID)文件特殊权限用法详解

    在讲解<权限位>一节时提到过,其实除了 rwx 权限,还会用到 s 权限,例如: [root@localhost ~]# ls -l /usr/bin/passwd -rwsr-xr-x. ...

  4. linux 进程 setuid,linux特殊权限位之setuid、setgid和sticky

    我们登陆到系统之后,创建一个普通文件或者目录的时候,会有一个默认的权限.普通文件是644,目录文件是755,想必大家都知道这个是由umask这个值决定的.我们可以直接执行umask命令查看,linux ...

  5. linux 360网卡开热点,扔掉360:Linux下无线网卡作WiFi路由器(转薄荷开源网)

    这个话题很多人感兴趣,毕竟现在是无线互联时代.手机一族到外面去,首先关心的就是有没有 WiFi.Windows 7 用户可以安装 360 的软件,把笔记本电脑配置成路由器,供手机或其他电脑上网. 在 ...

  6. Linux笔记——SetUID,SetGID,黏着位权限

    导言 思考:为什么普通用户可以更改密码? 解: 更改密码涉及到的文件是/etc/passwd./etc/shadow,但是这两个文件对普通用户的权限如下所示: [ych@centos01 ~]$ ll ...

  7. linux c setuid函数解析

    在讨论这个setuid函数之前,我们首先要了解的一个东西就是内核为每个进程维护的三个UID值.这三个UID分别是实际用户ID(real uid).有效用户ID(effective uid).保存的设置 ...

  8. 360浏览器linux版本_360安全浏览器崩溃解决方案

    360安全浏览器崩溃解决方案方案一:打开360安全浏览器,按键盘上的F1调出浏览器医生界面,点击一键修复即可.如图所示:方案二:360浏览器打开了太多标签占用内存,并且随着浏览器开着的时间越长,占用内 ...

  9. linux类似360软件,linux下有什么类似鲁大师查看电脑配置的软

    满意答案 drqyna 2017.05.26 采纳率:40%    等级:11 已帮助:5455人 linux如何查看系统的硬件配置如何在linux系统下查看系统配置?在图形模式下我们可以很方便的利用 ...

最新文章

  1. 返回空的List集合
  2. Java NIO类库Selector机制解析--转
  3. Reverse Vowels of a String (反转字符串中的母音)
  4. jquery的$.extend和$.fn.extend作用及区别(—)
  5. el table 固定表头和首行_el-table表头根据内容自适应,解决表头错位和固定列错位(完美解决)...
  6. POJ3278(BFS)
  7. 常系数线性微分方程的直接解法-利用特征方程
  8. 天梯赛L2-014 列车调度(set和简单贪心)
  9. 使用JAVASCRIPT实现弹出框,过一段时间自动消失
  10. Python自动化整理文件,还增加了可视化GUI界面
  11. Q73:蒙特•卡罗积分(Monte Carlo Integration)
  12. 点击类名方法名如何连接到相应的Android源代码
  13. php中array_merge()与$arr1+$arr2两个数组直接相加的区别
  14. 【C++】在线IDE
  15. kodi 自动升级_如何设置您的Kodi库以自动更新
  16. NS3网络仿真项目(三)—— Events Simulator
  17. 300元打造智能影音中心
  18. Coursera 学习记录:细菌分组(通过冒泡排序实现两组有差异的分类)
  19. 链游公会打金热背后:多由矿工转型 存在多重风险
  20. pyltp学习笔记——中文语言处理工具

热门文章

  1. 分组 java_Java 代码实现分组
  2. 绑定对话框和选项按钮
  3. 一文搞懂Java的ClassPath
  4. JDK长期支持版本【LTS】说明
  5. 输入序列就可以预测 - 在线版miRanda靶基因预测来了
  6. Advanced.Aircraft.Analysis.v2.5.1.53 1CD(飞机设计性能分析软体)
  7. 【Linux】七、DHCP服务器配置与管理
  8. 腾讯会议下载文档的方式
  9. 谁来阻击腾讯?(转载)
  10. Robotic Pick-and-Place of Novel Objects in Clutter with Multi-Affordance Grasping...