摘要:

最近遇到一个问题,在测试环境上发现使用su无法切换账户,但是这两个账户都是可以登录的,于是就开始百度,找到了解决问题的办法。


解决方案如下:


第一步:


使用root用户登录系统,或者有root权限的用户登录


第二步:


查看文件权限,例如

ll -a /bin/su
ll -a /usr/bin/passwd



观察显示结果,正确的结果为:


-rwsr-xr-x 1 root root 36936 Feb 17  2014 /bin/su*
-rwsr-xr-x 1 root root 47032 Feb 17  2014 /usr/bin/passwd*



错误的结果为:


-rwxr-xr-x 1 root root 36936 Feb 17  2014 /bin/su
-rwxr-xr-x 1 root root 47032 Feb 17  2014 /usr/bin/passwd



请注意rw

sr-xr-x 与rw

xr-xr-x是不同的


前者与后者的区别如下:

  1. s:当普通用户使用su的时候,采用的是owner的权限,几使用root去执行su内部需要执行的文件或命令
  2. x:当用普通用户执行su的时候,只能代表该用户,虽然执行了,但访问其他资源,比如密码文件等,可能就没有权限了。

关于密码文件可能也访问了别的命令或文件,道理同上。


第三步:


既然知道原因,那么修改文件权限即可

chmod 4755 /bin/su
chmod 4755 /usr/bin/passwd



第四步:


查看结果是否正确,可以正常切换用户。


虽然遇到的问题解决了,可是还有需对疑问:

  1. 有s权限吗,没见过啊?
  2. 还有别的特殊权限吗?
  3. 授权的时候755我理解啊,4775是什么意思啊,为什么是前边加4呢?

这几个问题还是困扰我的,于是我继续百度,去找到问题的答案。


第一、二个问题答案:


文件权限除了r、w、x外还有s、t、i、a权限:

s:文件属主和组设置SUID和GUID,文件在被设置了s权限后将以root身份执行。

例如:Linux修改密码的passwd便是个设置了SUID的程序,普通用户无读写/etc/shadow文件的权限确可以修改自己的密码。

ls -al /usr/bin/passwd
-rwsr-xr-x 1 root root 32988 2008-12-08 17:17 /usr/bin/passwd*



我们可以通过字符模式设置s权限:chmod a+s filename,也可以使用绝对模式进行设置:

设置suid:将相应的权限位之前的那一位设置为4;

设置guid:将相应的权限位之前的那一位设置为2;

两者都置位:将相应的权限位之前的那一位设置为4+2=6。

如:chmod 4755 filename   //设置SUID


注:在设置s权限时文件属主、属组必须先设置相应的x权限,否则s权限并不能正真生效(chmod命令不进行必要的完整性检查,即使不设置x权限就设置s权限,chmod也不会报错,当我们ls -l时看到rwS,大写S说明s权限未生效。

例如:

有执行权限:

无执行权限:


t :设置粘着位,一个文件可读写的用户并一定相让他有删除此文件的权限,如果文件设置了t权限则只用属主和root有删除文件的权限,通过chmod +t filename 来设置t权限。

注:经过测试发现,这个权限用于文件夹,如果文件夹没有这个权限,文件也无法添加这个权限

i:不可修改权限  例:chattr u+i filename 则filename文件就不可修改,无论任何人,如果需要修改需要先删除i权限,用chattr -i filename就可以了。查看文件是否设置了i权限用lsattr filename。

a:只追加权限, 对于日志系统很好用,这个权限让目标文件只能追加,不能删除,而且不能通过编辑器追加。可以使用chattr +a设置追加权限。


第三个问题答案:


如何设置以上特殊权限:

  • setuid:chmod u+s xxx
  • setgid:  chmod g+s xxx
  • stick :   chmod o+t xxx

或者使用八进制方式,在原先的数字前加一个数字,三个权限所代表的进制数与一般权限的方式类似,如下:

suid   guid    stick

1        1         1

所以:

  • suid的二进制串为:100,换算十进制为:4
  • guid的二进制串为:010,换算十进制:2
  • stick的 二进制串:001,换算十进制:1

于是也可以这样设:

  • setuid: chmod 4755 xxx
  • setgid: chmod 2755 xxx
  • stick : chmod 1755 xxx


参考:

关于Linux下s、t、i、a权限

Linux系统中的文件的s权限

linux下文件权限和特殊权限说明

su 切换不了用户

su: incorrect password