目录
从REHL6 开始,新增加文件系统扩展属性:
命令:chattr
参数: a 只能追加内容 ; i 不能被修改
+a: 只能追加内容 如: echo aaa >> hack.sh
+i:即Immutable,系统不允许对这个文件进行任何的修改。如果目录具有这个属性,那么任何的进程只能修改目录之下的文件,不允许建立和删除文件。
注:immutable [ɪˈmju:təbl] 不可改变的 ; append [əˈpend] 追加
-i :移除i参数。 -a :移除a参数
chmod [可选项] <mode> <file...>用于改变属主
参数说明:
[可选项]
-c, --changes like verbose but report only when a change is made (若该档案权限确实已经更改,才显示其更改动作)
-f, --silent, --quiet suppress most error messages (若该档案权限无法被更改也不要显示错误讯息)
-v, --verbose output a diagnostic for every file processed(显示权限变更的详细资料)
--no-preserve-root do not treat '/' specially (the default)
--preserve-root fail to operate recursively on '/'
--reference=RFILE use RFILE's mode instead of MODE values
-R, --recursive change files and directories recursively (以递归的方式对目前目录下的所有档案与子目录进行相同的权限变更)
--help 显示此帮助信息
--version 显示版本信息
[mode]
权限设定字串,详细格式如下 :
[ugoa...][[+-=][rwxX]...][,...],
其中
[ugoa...]
u 表示该档案的拥有者,g 表示与该档案的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示所有(包含上面三者)。
[+-=]
+ 表示增加权限,- 表示取消权限,= 表示唯一设定权限。
[rwxX]
r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该档案是个子目录或者该档案已经被设定过为可执行。
使用字符设定
修改权限用的命令:chmod
作用:修改文件,目录的权限
语法:chmod [对谁操作] [操作符] [赋于什么权限] 文件名
对谁操作:
u----> 用户user,表示文件或目录的所有者
g---->用户组group,表示文件或目录所属的用户组
o---->其它用户others
a---->所有用户all
操作符:
+ #添加权限 ; - # 减少权限 ; = #直接给定一个权限
权限:r w x
[file...]
文件列表(单个或者多个文件、文件夹)
用户:
UGOA:所有者--用户组--其它用户--包括前面三者 a:所有用户
一、权限
对于文件来说
r:读
w:写
x:执行
对于目录来说:
r:读(看到目录里面有什么,可以列出目录的内容) ls
w:在目录里面新建文件,删除,移动 touch dir rm mv cp
x:进入 cd,访问文件需要取决于里面文件的权限
常见几种文件权限组成
- rwx --- ---:文件所有者对文件具有读取、写入和执行的权限。
- rwx r-- r--: 文件所有者具有读、写与执行的权限,用户组里用户及其他用户则具有读取的权限
- rw- rw- r-x:文件所有者与同组用户对文件具有读写的权限,而其他用户仅具有读取和执行的权限。
drwx--x--x: 目录所有者具有读写与进入目录的权限,其他用户近能进入该目录,却无法读取任何数据。
drwx------: 除了目录所有者具有完整的权限之外,其他用户对该目录完全没有任何权限。
说明:最前面一位不是权限,是文件类型,-为文件 d为文件夹
往后三位为一组,第一组代表所有者,第二组代表相同用户组的用户,第三组代表其他用户(如果没有三个权限则采用“-”代替,一定凑够三位)
八进制数字表示权限
权限 二进制值 八进制值 描述
--- 000 0 没有任何权限
--x 001 1 只有执行权限
-w- 010 2 只有写入权限
-wx 011 3 有写入和执行权限
r-- 100 4 只有读取权限
r-x 101 5 有读取和执行权限
rw- 110 6 有读取和写入权限
rwx 111 7 有全部权限
r=4 w=2 x=1
rw- 的值是多少? 答: 4+2=6
rwx r-x r-x 的值是多少? 答: rwx=4+2+1=7 ; r-x=4+1=5 rwx r-x r-x=7 5 5
如果将则前三位SGT也转换成一个二进制数,则
suid 的八进制数字是4
sgid 的代表数字是 2
sticky 位代表数字是1
这样我们就可以将十二位权限三位三位的转化为4个八进制数。其中最高的一位八进制数就是suid,sgdi,sticky的权值。
第二位为 拥有者的权值
第三位为 所属组的权值
最后一位为 其他组的权值
如:“4755”表示设置SUID权限,“6755”表示同时设置SUID、SGID权限(755才是权限,且755需要分开理解 7 5 5)
-rw-r-sr-- = 0 1 0 1 1 0 1 0 0 1 0 0 = 2644
-rwsr-xr-x = 1 0 0 1 1 1 1 0 1 1 0 1 = 4755
-rwsr-sr-x = 1 1 0 1 1 1 1 0 1 1 0 1 = 6755
-rwsr-sr-t = 1 1 1 1 1 1 1 0 1 1 0 1 = 775(实际0755)
umask命令允许你设定文件创建时的缺省模式,对应每一类用户(文件属主、同组用户、其他用户)存在一个相应的umask值中的数字
文件默认权限=666 ,目录默认权限=777
666 - 022 = 644
777 - 022 = 755
注: UID大于199 且用户的组名和用户名一样,那么 umask值为002,否则为022.
注: -gt 在shell中表示大于; id -g 显示用户组ID ,id -gn显示组名。
权限的算法:一般情况是:目录默认权限-umask 值
二、文件的特殊权限
文件的特殊权限:suid sgid sticky
1、SUID(set uid设置用户ID):限定:只能设置在二进制可执行程序上面。对目录设置无效
功能:程序运行时的权限从执行者变更成程序所有者的权限
2、SGID:限定:既可以给二进制可执行程序设置,也可以对目录设置
功能:在设置了SGID权限的目录下建立文件时,新创建的文件的所属组会继承上级目录的所属组
3、Stickybit:粘滞位权限是针对目录的,对文件无效,也叫防删除位
SUID属性一般用在可执行文件上,当用户执行该文件时,会临时拥有该执行文件的所有者权限。使用”ls -l” 或者”ll” 命令浏览文件时,如果可执行文件所有者权限的第三位是一个小写的”s”,就表明该执行文件拥有SUID属性
(取代x,如果原来的权限位没有x执行权限,那么加了SGID权限后,权限位则为大S,否则为小s,最后一组其他那里,如果没有x则为T,有x为t)
SGID:
限定:既可以给二进制可执行程序设置,也可以给目录设置。
功能:在设置了SGID权限的目录下建立文件时,新创建的文件的所属组会继承上级目录的权限
Stickybit
限定:只作用于目录,是一种保护权限。
功能:目录下创建的文件只有root、文件创建者、目录所有者才能删除。
总得来说:设置了suid就是当使用者使用了这个文件成为进程时,拥有这个文件属主的权限
SUID:
功用:用户运行某个程序时,如果该程序有SUID权限,那么程序运行为进程时,进程的属主不是发起者,而是程序文件所属的属主
例: 系统中的tmp目录就是这样
[root@Jaking11 ~]# ll -d /tmp/
drwxrwxrwt. 11 root root 4096 Jan 24 19:41 /tmp/
用法:
chmod o+t /tmp/test/
正常权限和附加权限可以用4位八进制数表示。类似于正常权限的数字权限赋值模式(使用三位八进制数字赋值)
chmod <abc> file...
我们可以进一步使用4位八进制数字同时赋值正常权限和附加权限。
chmod <sabc> file...
其中s是表示附加权限的把八进制数字,abc与之前一致,分别是对应User、Group、及Other(拥有者、群组、其他组)的权限。因为SUID对应八进制数字是4,SGID对于八进制数字是2,则“4755”表示设置SUID权限,“6755”表示同时设置SUID、SGID权限。
我们进一步将上小节的例子中的二进制数转变为八进制表示形式,则
-rw-r-sr-- = 0 1 0 1 1 0 1 0 0 1 0 0 = 2644
-rwsr-xr-x = 1 0 0 1 1 1 1 0 1 1 0 1 = 4755
-rwsr-sr-x = 1 1 0 1 1 1 1 0 1 1 0 1 = 6755
-rwsr-sr-t = 1 1 1 1 1 1 1 0 1 1 0 1 = 7755
对比范例:
设置 netlogin 的权限为拥有者可读写执行,群组和其他权限为可读可执行
chmod 755 netlogin
设置 netlogin 的权限为拥有者可读写执行,群组和其他权限为可读可执行,并且设置suid
chmod 4755 netlogin
chmod 4755与chmod 755对比多了附加权限值4,这个4表示其他用户执行文件时,具有与所有者同样的权限(设置了SUID)。
为什么要设置4755 而不是 755?
假设netlogin是root用户创建的一个上网认证程序,如果其他用户要上网也要用到这个程序,那就需要root用户运行chmod 755 netlogin命令使其他用户也能运行netlogin。但假如netlogin执行时需要访问一些只有root用户才有权访问的文件,那么其他用户执行netlogin时可能因为权限不够还是不能上网。这种情况下,就可以用 chmod 4755 netlogin 设置其他用户在执行netlogin也有root用户的权限,从而顺利上网。
文件拓展权限ACL
文件与目录设置不止基础权限:r,w,x,特殊权限:suid,sgid,sticky,还有文件扩展权限ACL,ACL的全称是 Access
Control List (访问控制列表) ,一个针对文件/目录的访问控制列表。它在UGO权限管理的基础上为文件系统提供一个额外的、更灵活的权
限管理机制。它被设计为UNIX文件权限管理的一个补充。ACL允许你给任何的用户或用户组设置任何文件/目录的访问权限。
ACL的作用:让特定用户对特定文件拥有特定权限。
setfacl命令:
用法: setfacl [-bkndRLP] { -m|-M|-x|-X ... } file ...
-m, --modify-acl 更改文件的访问控制列表
-M, --modify-file=file 从文件读取访问控制列表条目更改
-x, --remove=acl 根据文件中访问控制列表移除条目
-X, --remove-file=file 从文件读取访问控制列表条目并删除
-b, --remove-all 删除所有扩展访问控制列表条目
-k, --remove-default 移除默认访问控制列表
--set=acl 设定替换当前的文件访问控制列表
--set-file=file 从文件中读取访问控制列表条目设定
--mask 重新计算有效权限掩码
-n, --no-mask 不重新计算有效权限掩码
-d, --default 应用到默认访问控制列表的操作
-R, --recursive 递归操作子目录
-L, --logical 依照系统逻辑,跟随符号链接
-P, --physical 依照自然逻辑,不跟随符号链接
--restore=file 恢复访问控制列表,和“getfacl -R”作用相反
--test 测试模式,并不真正修改访问控制列表属性
-v, --version 显示版本并退出
-h, --help 显示本帮助信息
#查看acl
[root@localhost ~]# getfacl test
# file: test
# owner: root
# group: root
user::r-x
user:tank:rwx #effective:---
group::r-x #effective:---
mask::---
other::---
修改
[root@localhost ~]# setfacl -m u:zhangy:rw- test #修改文件的acl权限,添加一个用户权限
[root@localhost ~]# getfacl test
# file: test
# owner: root
# group: root
user::r-x
user:zhangy:rw- #多出来一个用户
user:tank:rwx
group::r-x
mask::rwx
other::---
[root@localhost ~]# setfacl -m g:zhangying:r-w test #添加一个组
[root@localhost ~]# getfacl test
# file: test
# owner: root
# group: root
user::r-x
user:zhangy:rw-
user:tank:rwx
group::r-x
group:zhangying:rw-
mask::rwx
other::---
设置组的话只需要把setfacl -m u::rwx 中的u改为g即可,大致差不多。
设置mask的话,setfacl -m u::rwx 中的u改为m,并且这个可不针对用户和组哦,其他的大致差不多。
在使用-R时,记得放在-m前面,否则不可以地
使用-d的话,就会把默认的都加上去,针对目录哦。