权限简介
Linux下文件的权限类型一般包括读,写,执行。对应字母为 r、w、x。Linux下权限的粒度有拥有者、群组、其它组三种。每个文件都可以针对三个粒度,设置不同的rwx(读写执行)权限。通常情况下,一个文件只能归属于一个用户和组, 如果其它的用户想有这个文件的权限,则可以将该用户加入具备权限的群组,一个用户可以同时归属于多个组。
更改文件权限
使用chmod命令可以更改文件的权限。
mode格式
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 表示只有当该档案是个子目录或者该档案已经被设定过为可执行。
[file...]
文件列表(单个或者多个文件、文件夹)
数字格式
在这种使用方式中,首先我们需要了解数字如何表示权限。 首先,我们规定 数字 4 、2 和 1表示读、写、执行权限,即 r=4,w=2,x=1 。此时其他的权限组合也可以用其他的八进制数字表示出来,即:
rwx = 4 + 2 + 1 = 7
rw = 4 + 2 = 6
rx = 4 +1 = 5
每个文件都可以针对三个粒度,设置不同的rwx(读写执行)权限。即我们可以用三个8进制数字分别表示拥有者、群组、其它组( u、 g 、o)的权限详情,并用chmod直接加三个8进制数字的方式直接改变文件权限。语法格式为 :
chmod <abc> file...
其中a,b,c各为一个数字,分别代表User、Group、及Other的权限。
相当于简化版的 chmod u=权限,g=权限,o=权限 file...
而此处的权限将用8进制的数字来表示User、Group、及Other的读、写、执行权限.
更改文件拥有者
chown命令也可以将文件拥有者加以改变,一般只有系统管理员(root)拥有此操作权限,而普通用户则没有权限将自己或者别人的文件的拥有者设置为别人。
chown [可选项] user[:group] file...
说明:
[可选项] : 同上文chmod
user : 新的文件拥有者的使用者
group : 新的文件拥有者的使用者群体(group)
取消文件的权限
umask可用来设定[权限掩码]。[权限掩码]是由3个八进制的数字所组成,将现有的存取权限(默认是777)减掉权限掩码后,即可产生建立文件时预设的权限。
umask [-S][权限掩码]
参数说明:
-S 以文字的方式来表示权限掩码。
Linux附加权限
linux除了设置正常的读写操作权限外,还有一类附加权限,包括 SET位权限(suid,sgid)和粘滞位权限(sticky)。
suid
suid/sgid是为了使“没有取得特权用户要完成一项必须要有特权才可以执行的任务”而产生的。
suid的意思是进程执行一个文件时保持进程拥有者的UID,如果设置了可执行文件的suid位,进程就获得了该文件拥有者的UID。
suid权限位位于所有者的执行权限位上,如果一个文件具有suid权限,则所有者执行位为s,suid的数字法表示为4。设置方式如下:
chmod u+s file
chmod 4755 file
sgid
sgid的意思是进程执行一个文件时保持文件拥有组的GID,如果设置了可执行文件的sgid位,进程就获得了该文件拥有组的GID。
sgid权限位位于所有组的执行权限位,如果一个文件具有suid权限,则所有组的执行位为s,sgid的数字法表示为2。设置方式如下:
chmod g+s file
chmod 2755 file
sticky
粘滞位权限即sticky。一般用于为目录设置特殊的附加权限,当目录被设置了粘滞位权限后,即便用户对该目录有写的权限,也不能删除该目录中其他用户的文件数据,此目录的文件只能被所有者删除。
sticky权限位位于其他的执行权限位上,如果文件设置了sticky还设置了x位,其他组用户的权限的可执行位为t,如果没有设置x位,它将表示为T。sticky数字法表示为1。
chmod o+t dir
chmod 1777 dir
ACL访问控制列表
ACL访问控制列表可以实现更加灵活的权限管理,打破了三类用户的权限管理。
添加ACL权限
setfacl -m u:wang:0 file 使wang账户对指定file文件无权限
setfacl -m u:mage:rw file 使mage账户对指定file文件有读写权限
setfacl -m g:g1:rw file 使g1组对指定file文件有读写权限
getfacl file 查看指定file文件的ACL权限
ACL权限执行顺序类似于用户获取文件权限的顺序,getfacl顺序从上到下执行,一旦生效,下面的将不再生效(如果属于多个组,权限累加)
删除ACL权限
setfacl -x u:wang file 删除wang账户对指定file文件的ACL权限
setfacl -x g:g1 file 删除g1组对指定file文件的ACL权限
ACL权限下的mask
设置用户对指定文件所能拥有的最大权限(限高作用)
setfacl -m mask::r file 使指定文件file所拥有的最大权限位读r
setfacl -x mask::r file 取消指定文件file的最大权限限制mask
setfacl -b f1 取消f1文件所有的ACL权限
ACL生效顺序:所有者、自定义用户、自定义组、其他人
备份和恢复ACL权限
getfacl -R /tmp/dir1>acl.txt 将dir1目录下ACL权限备份
setfacl -R –set-file=acl.txt /tem/dir 恢复dir1目录下ACL权限
文件权限操作的常用命令
chown:设置文件所有者(普通用户无法修改文件所有者)
chgrp:设置文件所属组(普通用户要想该所属组,前提是文件所有者为自己,自己在所属组中)
chattr:给指定文件添加保护,避免root账户误操作
+i 锁定文件,不能删除,不能改名,不能更改内容
-i 解锁+i
+a 锁定文件,不能删除,不能改名,但可追加内容(追加重定向)
-a 解锁+a
+A 指定文件读时间atime不再更改
lsattr:查看指定文件是否有锁定状态
setfacl:设置文件ACL权限
-m mask::r file 使指定文件file所拥有的最大权限位读r
-x mask::r file 取消指定文件file的最大权限限制mask
-b f1 取消f1文件所有的ACL权限
-R –set-file=acl.txt /tem/dir 恢复dir1目录下ACL权限
getfacl:查看文件ACL权限