V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
stevenyou
V2EX  ›  问与答

为什么 sudo chmod u+s /usr/bin/vim 之后, vim 还是不能以 root 权限打开文件

  •  
  •   stevenyou · 2014-05-23 13:55:53 +08:00 · 5216 次点击
    这是一个创建于 3598 天前的主题,其中的信息可能已经有所发展或是发生改变。
    http://en.wikipedia.org/wiki/Setuid

    是不是centos 还有别的什么限制
    第 1 条附言  ·  2014-05-27 12:30:23 +08:00
    vim 打开之后显示的是RO,我之前以为是没有写的权限。 但是:w!是可以写文件的。 现在不太理解为什么显示RO。
    setuid的一个问题就是vim 无法正常打开 gzip 的文件了,我觉得是因为vim 会把.gz的文件copy到/tmp/然后让gzip 去解压后打开。由于gzip 没有setuid,所以没有权限读.gz文件。
    19 条回复    2014-06-01 18:33:06 +08:00
    loading
        1
    loading  
       2014-05-23 14:23:02 +08:00
    sudo vim xxx
    sudu chroot

    cp /usr/bin/vim /sbin
    loading
        2
    loading  
       2014-05-23 14:23:25 +08:00
    第二个搞错了。。。
    cyyever
        3
    cyyever  
       2014-05-23 14:33:10 +08:00
    你在执行这个命令时是root?那应该可以吧,或者which vim?
    stevenyou
        4
    stevenyou  
    OP
       2014-05-23 14:37:55 +08:00
    @cyyever 是root, 是在centos 6.4上,就是没有root权限,不知道怎么回事
    jamesxu
        5
    jamesxu  
       2014-05-23 14:55:16 +08:00
    @stevenyou 你要先用 ls -l 看看文件本身是什么权限,在用 lsattr 看看有没有隐藏的权限,一般来说 root 几乎可以修改任何文件,即便是 readonly,在 vim 中按 :wq! 也可以保存的。

    另外,不建议随便将一个可执行文件添加 SUID,这会造成很大的安全隐患。
    stevenyou
        6
    stevenyou  
    OP
       2014-05-23 15:09:47 +08:00
    stevenyou
        7
    stevenyou  
    OP
       2014-05-23 15:11:10 +08:00
    @jamesxu

    ll /usr/bin/vim
    -rwsr-xr-x 1 root root 1967072 Apr 5 2012 /usr/bin/vim
    jamesxu
        8
    jamesxu  
       2014-05-23 15:13:18 +08:00
    @stevenyou 不是看这个,是看你要打开的文件所拥有的权限
    stevenyou
        9
    stevenyou  
    OP
       2014-05-23 15:18:00 +08:00
    文件是普通的文件, sudo vim 可以打开写入
    duzhe0
        10
    duzhe0  
       2014-05-23 15:27:44 +08:00
    我怀疑是vim对自身的setsid位做了检测并自我限制了。因为这个操作太危险了, vim是可以当shell执行其它命令的,这相当于把root权限暴露给了系统上的所有用户。不要嫌麻烦, 还是老老实实sudo vim 吧
    cyyever
        11
    cyyever  
       2014-05-23 15:45:52 +08:00
    你这已经设置了 可能是vim自己用access判断,绕过去吧。
    cyyever
        12
    cyyever  
       2014-05-23 15:47:49 +08:00
    vim实际上是往一个副本写,在x时候再覆盖回去,所以只要你目录有写权限,应该没问题,因此你应该看看目录的权限
    cyyever
        13
    cyyever  
       2014-05-23 15:51:45 +08:00
    @jamesxu 没错,像我一般在做rpm包时如果很难绕过去,才临时setuid给install等程序,搞完就改回去。如果是在自己虚拟机,一般用root随便折腾。如果是生产机,该用普通用户就要用。
    walleL
        14
    walleL  
       2014-05-23 16:20:18 +08:00
    https://gist.github.com/jinxingxing/592bc0b3f2f1b1f3677c

    应该是要程序主动切换权限的, 只是文件权限上 setuid 不会有效
    msg7086
        15
    msg7086  
       2014-05-23 17:26:13 +08:00
    实测Debian下给cat或者vi加上setuid权限以后可以直接读写无权文件。
    edwardro
        16
    edwardro  
       2014-05-24 17:51:33 +08:00
    执行文件上加上setuid权限只代表此程序有调用setuid()这个函数的权限,是否调用setuid()切换到root取决于程序本身的实现。
    stevenyou
        17
    stevenyou  
    OP
       2014-05-27 12:30:16 +08:00
    @msg7086
    @edwardro
    @walleL
    vim 打开之后显示的是RO,我之前以为是没有写的权限。 但是:w!是可以写文件的。 现在不太理解为什么显示RO。
    setuid的一个问题就是vim 无法正常打开 gzip 的文件了,我觉得是因为vim 会把.gz的文件copy到/tmp/然后让gzip 去解压后打开。由于gzip 没有setuid,所以没有权限读.gz文件。
    edwardro
        18
    edwardro  
       2014-05-27 22:55:48 +08:00 via Android
    @stevenyou 可能是vim只在:w!的时候才会尝试调用setuid()。具体要看vim的源码了。

    gzip同样要看其实现是否会调用setuid(),否则加上setuid权限也没用。
    msg7086
        19
    msg7086  
       2014-06-01 18:33:06 +08:00
    @stevenyou 是因为这个文件对root也没有写权限,比如这个文件是只读的。

    root也受只读权限管辖,只不过root可以往只读文件里写数据。

    但是仍然需要bang来确认写入。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2790 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 11:49 · PVG 19:49 · LAX 04:49 · JFK 07:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.