zoukankan      html  css  js  c++  java
  • 谁说抓包必须用root

    一 背景

    曾经在相当长的一段时间内认为抓包就必须是root用户,直到后面了解到了setsid和capability,这篇文章算是个总结。

    二 特殊权限位

    2.1 SET位权限

    在linux中,有些命令,比如passwd修改密码命令,本身是属于root用户的,执行的时候需要操作只有root才可以操作的文件或使用的资源,那普通用户怎么办?这就是SET权限位的作用,即“没有取得特权用户要完成一项必须要有特权才可以执行的任务”,比较绕的一句话,passwd修改密码,本身的执行过程是需要特权的,但是我们只是普通用户,却需要使用这个命令来完成修改密码的功能,解决办法就是设置SET位权限。

    先看下passwd命令,如下:

    ll /usr/bin/passwd
    -rwsr-xr-x 1 root root 27856 Aug  9  2019 /usr/bin/passwd

    注意到权限位中的小s了吗?说明passwd这个可执行文件设置了SET权限位。 执行文件设置了SUID或SGUID后,任何用户执行该文件,就将获取该执行文件属主,或属主组对应的身份执行。

    suid(set User ID,set UID)的意思是进程执行一个文件时通常保持进程拥有者的UID。然而,如果设置了可执行文件的suid位,进程就获得了该文件拥有者的UID。 sgid(set Group ID,set GID)意思也是一样,只是把上面的进程拥有者改成进程组就好了。

    命令如下:

    chmod u+s  filename   #设置setuid位 等同chmod 4777 filename 777表示ugo的权限
    chmod u-s  filename  # 去掉setuid位  等同chmod 0777 filename 777表示ugo的权限
    chmod g+s filename   #设置sgid位  也可以chmod 2777 filename  777表示ugo的权限
    chmod g-s filename    #去掉sgid位  也可以chmod 0777 filename  777表示ugo的权限

    ls -al下会有如下的显示:

    -rwsr-xr-x 表示设置了suid,且拥有者有可执行权限
    -rwSr--r-- 表示suid被设置,但拥有者没有可执行权限
    -rwxr-sr-x 表示sgid被设置,且群组用户有可执行权限
    -rw-r-Sr-- 表示sgid被设置,但群组用户没有可执行权限
    GID设置
    GID设置
    去掉UID和GID
    去掉UID和GID

    2.2 粘滞位权限

    粘滞位权限即sticky,目录设置粘滞位权限位后,即使用户对这个目录具有写的权限,但是仍然不能删除这个目录里面其他用户创建的文件,当然root用户可以删除任何目录。适用场景就是我们常见到的/tmp目录,这个目录需要任何用户都可以进行写日志,但是每个用户又只能删除自己用户下的日志,不能删除其他用户的日志。

    设置粘滞位 注意到,设置粘滞位的目录,最后一位从x变成了t。 命令如下:

    chmod +t dirname #即可设置 粘滞位
    chmod -t dirname  #即可以去掉粘滞位设置

    用四位八进制来表示粘滞位的话,第一位为1表示粘滞位。遵循12位权限表示法:

    11 10 9 8 7 6 5 4 3 2 1 0
    S  G  T r w x r w x r w x

    S表示SUID权限;G表示GUID权限;T表示Ticky即粘滞位权限。 可以对照下面的权限理解下:

    -rwsr-sr-x 的值为: 1 1 0  1 1 1  1 0 1  1 0 1 

    2.3 其他特殊权限

    在一些场景下,比如你的linux机器中病毒了,有时候病毒文件竟然无法用root用户删除,这时候要看下是否有i属性,查看办法:

    lsattr filename       #查看是否有i属性
    chattr +i filename #添加i属性
    chattr -i filename  #去掉i属性

    演示 i属性,设定文件不能被删除、改名、设定链接关系,同时不能写入或新增内容。 只有root用户可以添加i属性,非root用户不能添加i属性。

    有时候我们希望可以追加,但是无法删除,这时候可以用a属性,演示如下:

    chattr +a filename #添加a属性
    chattr -a filename  #删除a属性
    演示如下
    演示如下

    2.4 抓包设置SET权限

    如果我们用普通用户执行tcpdump,由于程序执行需要的权限普通用户不具备,所以报错,如下: 普通用户执行抓包程序 执行如下权限:

    chmod u+s /usr/sbin/tcpdump

    再运行抓包程序,正常了: 设置SUID的抓包程序

    三 capability 是什么

    上面看,好像已经解决了抓包问题,干嘛还需要capability,这是什么东东?首先SET位设置权限比较粗,如果万一被设置SET位权限的程序有安全漏洞,就有很大的风险。根本原因在于没有把root的权限细分。linux的2.6内核增加了capability,可以对权限进行细分。 例如:能力CAP_SYS_MODULE表示用户能够加载(或卸载)内核模块的特权操作。我们可以根据程序的需要,通过root用户赋予程序相应的权限。

    比如我们刚才可以给tcpdump程序赋予抓包涉及的权限:

    setcap cap_net_admin,cap_net_raw=eip /usr/sbin/tcpdump

    这样设置后,我们没有设置set位,tcpdump普通用户仍然可以适用它来进行抓包: 设置权限

    具体权限可以参考:

    CAP_CHOWN:修改文件属主的权限
    CAP_DAC_OVERRIDE:忽略文件的DAC访问限制
    CAP_DAC_READ_SEARCH:忽略文件读及目录搜索的DAC访问限制
    CAP_FOWNER:忽略文件属主ID必须和进程用户ID相匹配的限制
    CAP_FSETID:允许设置文件的setuid位
    CAP_KILL:允许对不属于自己的进程发送信号
    CAP_SETGID:允许改变进程的组ID
    CAP_SETUID:允许改变进程的用户ID
    CAP_SETPCAP:允许向其他进程转移能力以及删除其他进程的能力
    CAP_LINUX_IMMUTABLE:允许修改文件的IMMUTABLE和APPEND属性标志
    CAP_NET_BIND_SERVICE:允许绑定到小于1024的端口
    CAP_NET_BROADCAST:允许网络广播和多播访问
    CAP_NET_ADMIN:允许执行网络管理任务
    CAP_NET_RAW:允许使用原始套接字
    CAP_IPC_LOCK:允许锁定共享内存片段
    CAP_IPC_OWNER:忽略IPC所有权检查
    CAP_SYS_MODULE:允许插入和删除内核模块
    CAP_SYS_RAWIO:允许直接访问/devport,/dev/mem,/dev/kmem及原始块设备
    CAP_SYS_CHROOT:允许使用chroot()系统调用
    CAP_SYS_PTRACE:允许跟踪任何进程
    CAP_SYS_PACCT:允许执行进程的BSD式审计
    CAP_SYS_ADMIN:允许执行系统管理任务,如加载或卸载文件系统、设置磁盘配额等
    CAP_SYS_BOOT:允许重新启动系统
    CAP_SYS_NICE:允许提升优先级及设置其他进程的优先级
    CAP_SYS_RESOURCE:忽略资源限制
    CAP_SYS_TIME:允许改变系统时钟
    CAP_SYS_TTY_CONFIG:允许配置TTY设备
    CAP_MKNOD:允许使用mknod()系统调用
    CAP_LEASE:允许修改文件锁的FL_LEASE标志

    后面的=eip表示可继承的,准许的和有效的,可以看下英文解释:

    http://www.andy-pearce.com/blog/posts/2013/Mar/file-capabilities-in-linux/

  • 相关阅读:
    OpenCV 2.48配置
    win进入当前文件夹,启动当前文件夹的程序
    C++程序运行效率的10个简单方法
    银行国际清算业务平台架构
    股票证券交易系统架构分析与设计
    负载均衡|六种负载均衡算法
    Intelli IDEA快捷键(配合IdeaVim)(转)
    [易学易懂系列|golang语言|零基础|快速入门|(三)]
    [易学易懂系列|golang语言|零基础|快速入门|(二)]
    [易学易懂系列|golang语言|零基础|快速入门|(一)]
  • 原文地址:https://www.cnblogs.com/seaspring/p/13899930.html
Copyright © 2011-2022 走看看