Linux文件服务器权限:基本权限、特殊权限、隐藏权限、高级权限,这里先说前三者权限
基本权限
[root@desktop0 ~]# ll
-rw-------. 1 root root 8619 May 7 2014 anaconda-ks.cfg
第一个字符表示文件类型,后面的字符以三三分,分别表示所有者的权限,所属组的权限,其他用户的权限
第一个字符:1文件类型 - 普通文件 d 目录 l 链接 b 块设备 c 字符设备
后面三三分类的每一个占位符分别为read(r),write(w),execute(e)
修改文件所有者和所在组
chown student anaconda-ks.cfg 将anaconda-ks.cfg修改为student用户
修改所在组
chgrp student anaconda-ks.cfg
chown :root anaconda-ks.cfg
同时修改所属者和所在组
chown student:student anaconda-ks.cfg
修改某个目录下的所有文件或目录的所有者
chown -R root /etc -r:recursive 递归
使用户不属于某个组
gpasswd -d 用户名 组名
修改文件权限:
字母方式:
如:chmod u=rwx,go=rw anaconda-ks.cfg 将anaconda-ks.cfg文件的所有者权限修改为rwx,将所属组和其他用户修改为rw权限
如:chmod u+x anaconda-ks.cfg 将anaconda-ks.cfg文件的所有者权限添加执行权限
如:chmod a-x anaconda-ks.cfg 所有用户对anaconda-ks.cfg都将没有执行权限
如:chmod a=rwx anaconda-ks.cfg 所有用户对anaconda-ks.cfg都拥有rwx权限
数字方式:
r == 4 w == 2 r == 1
chmod 644 anaconda-ks.cfg 将anaconda-ks.cfg的所有者修改为rw权限,将所属组和其他用户修改为r权限
权限优先顺序:
如果UID匹配,就应用用户(user)权限,如果GID匹配,就应用所在组(group)权限,否则就应用(other)权限
默认情况下,root用户创建一个文件的默认权限为644(满权限666-022),创建一个目录的权限为755(满权限777-022);
普通用户创建一个文件的权限为664(满权限666-002),创建一个目录的权限为775(满权限777-002),
可以分别用root用户和普通用户使用umask命令查看一个值:root用户为0022,普通用户为0002
022转换为二进制是 000 010 010 取反后是 111 101 101 ,文件的满权限是666,二进制是110 110 110,两者相与结果为:110 100 100 转换为十进制为644
特殊权限:
setuid = u+s
针对文件,必须是应用程序,且有x权限,以拥有者决定
[root@desktop0 ~]# ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 27832 Jan 30 2014 /usr/bin/passwd
可以看到root用户有一个s权限
[root@desktop0 ~]# ll /etc/shadow
----------. 1 root root 1148 Jan 7 2015 /etc/shadow
我们修改student用户密码需要修改/etc/shadow文件,但是查看该文件任何用户都没用任何权限,之所以student用户能修改密码,是因为修改该文件走的是所有者的权限,即root用户权限,即使没用基本权限,对root来说一样可以修改。这就是student用户的特殊权限
再举一个例子:当student用户cat /etc/shadow时没有任何权限(因为/etc/shadow本来对用户就没有任何权限),这时我们切换到root用户,使用命令chmod u+s /usr/bin/cat,再切换回student用户,就可以cat出shadow中的内容
find / -perm -4000 -ls 查找系统中所有u+s的程序
setgid = g+s
针对文件,必须是应用程序,且有x权限,以所属组决定
针对目录,必须对用户有wx权限,内部新文件所属组将和目录所属组一样
举例:假设student用户属于manager组,现在用student用户创建一个public文件夹,使用test用户(属于test组)在public中创建一个文件test.txt,可以看到test.txt所属组是test组,然后切换到root用户,使用chmod g+s /public/ 将public所属组添加特殊权限,然后切换到test用户,在public下创建student.txt文件,ll查看该文件,结果该文件的所属组继承了student所属组,所属组为manager,而不是test组
举例:ll /usr/bin/touch,可以看到所属组是root,当我们使用chmod g+s /usr/bin/touch后,其他用户使用touch创建的文件的所属组也是root(该特殊权限就是将文件交给了root来创建)
sticky bit = 0+t:为了解决不合理的现象,如:chmod 777 /public,如:任何用户可以删除任何用户创建的文件
针对目录,且他人必须有wx权限,只有root和拥有者才能删除文件
基本权限对于超级用户来说是没用的,即使没用基本权限,也可以操作
隐藏权限:为了提高系统的安全性,不是所有的目录都能使用chattr,如:./dev /tmp /var
文件系统级的权限
修改文件系统级属性命令:chattr
主要参数:
+ 激活某个属性
- 失效某个属性
= 指定某个属性
a 表示append only,追加,对文件使用该属性表示只允许在该文件中增加数据而不允许删除数据
i 表示immutable,不可改变,激活了该属性的文件不能修改,更不能删除,即使root用户强制操作也不行 如:chattr +i /etc/hosts
S 表示Sync,一旦修改了该文件,系统立即把修改的文件存盘
可以使用lsattr 文件名 查看拥有的属性