为什么 sudo chmod u+s /usr/bin/vim 之后, vim 还是不能以 root 权限打开文件 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
stevenyou
V2EX    问与答

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

  •  
  •   stevenyou 2014-05-23 13:55:53 +08:00 5867 次点击
    这是一个创建于 4165 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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     Solana     2406 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 15:33 PVG 23:33 LAX 08:33 JFK 11:33
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86