RHEL里面执行ls命令时,可以看见第一个字母来判断类型。
常见的类型有
d (目录)
- (普通文件)
c (设备文件 字符型)
b (设备文件,块文件)
l ( 软连接,快捷方式)
例如,目录和普通文件
设备文件
软连接
设备文件,块文件(硬盘)
首先看看如何更改文件的所有者 chown, -R表示递归的处理所有的子目录和子文件,-v表示输出详细的变化结果
更改文件或者目录的组
具体的权限可以通过中间9位2进制数值来设置,分别代表u(所有者),g(组)和 o (其他人)的 r (读)w(写)x(执行)权利
可以用 rwxrwxrwx来表示对应拥有的权限,如果没有权限,标记-
简单的例子,可以用u+或者g-来添加或删除权限
a=u+g+o
值得注意的是对于目录的权限设定,必须至少具有读和执行的权限才能正常访问。如果只具有X,那么只能cd 进去,但是无法ls内容。
例如,新创建的xx目录,默认是755权限
去掉其他用户的读权限以后
beanxyz用户可以cd该目录,但是无法读取内容
改回来就回复正常访问了
前面说了默认创建的文件权限是644,目录权限是755, 这是怎么回事呢,这是通过umask过滤造成的。
文件的默认权限本应该是666,而目录是777,umask的默认值为0022,通过对应位的过滤,就变成了644和755.
文件 (666) 110 110 110 umask(222) 000 010 010 ----------------------------------------------- 110 100 100 (644)
目录 (777) 111 111 111 umask (222) 000 010 010 ------------------------------------------------ 111 101 101 (755)
类似的给定一个需要的默认权限,如何倒推回去?
比如我需要创建的默认文件和目录权限都是444,那么我的umask应该是多少?
如下所示,对于文件而言,每个用户的第三位本身就是没有权限的,因此不论是否过滤,都是0,对于Umask而言,第三位的部分是0 是1都不影响结果; umask可以是333,323,222,223,232,332等等任意组合
对于目录而言,结果是唯一,只能是333;
综上所述,umask的选择应该是333
文件 (666) 110 110 110 umask(???) 011 011 011 ----------------------------------------------- 100 100 100 (444)
目录 (777) 111 111 111 umask (???) 011 011 011 ( 333) ------------------------------------------------ 100 100 100 (444)
权限设置还有两个特殊的属性位, s位和t位;
s位位于二进制的可执行程序的U位的时候,简称SUID,这个时候其他人执行这个程序,具有和所有者相同的权限;
例如用户可以通过passwd更改自己的密码,而实际的密码是保存在/etc/shadow中的,用户执行passwd的时候其实是通过所有者root的权限对shadow文件进行了修改
s位位于目录的G位的时候,简称GUID,这个时候的作用是所有新创建的子目录和文件会自动的继承这个组
例如创建一个testgroup组,加到test目录上
然后修改g位
创建新文件和目录
查看属性
最后还有一个特殊的属性位是t 位,他一般是位于目录的o位置,锁定文件不可删除。只有root和所有者可以删除。比如系统自带的/tmp就是这样
简单的记忆 SUID 4, SGID 2, SBIT 1
因此,如果将一个可执行文件设置为 -rwsr-xr-x,可以标记为4755
最后看看隐藏的特殊属性
chattr 可以设置一些特设性质,比如+a 只能增加不可减少
+i 不可对文件进行任何修改
lsattr可以查看特殊属性