权限 | 对文件影响 | 对目录影响 |
r(read:读) | 可以读取文件内容 |
可以列出目录的内容,即目录下的文件的文件名
|
w(write:写)
|
可以更改文
件的内容
|
可以创建或者删除目录中的任一文件(只有w权限无法创建删除文件,需要和x权限一起使用)
|
x(execute:执行)
|
可作为可执行文件 |
可以切换到目录
|
- | 无 | 没有权限 |
PS:root账户不受文件权限的读写限制,执行权限受限制
所属者 / 所属组 / 其他用户权限的字符表示
|
二进制表示
|
八进制表示
|
--- | 000 | 0 |
--x | 001 | 1 |
-w- | 010 | 2 |
-wx | 011 | 3 |
r-- | 100 | 4 |
r-x | 101 | 5 |
rw- | 110 | 6 |
rwx | 111 | 7 |
如图:
u g o a
|
权限设置所针对的用户类别。
u(user)表示文件或目录的属主(所有者);g(group)表示属组内的用户;o(others)表示其他用户;a(all)表示所有用户(即u+g+o)
|
+ 或 - 或 =
|
设置权限的操作动作,+代表添加某个权限;-代表取消某个权限;=表示只赋予给定的权限,并取消原有的权限
|
rwx
|
用字符形式表示的所设置的权限,可以是其中一个字母或组合
|
nnn
|
用三位八进制数字表示的权限
|
例1:修改文件a1的权限
[root@tianqinwei test]# ll --- 查看文件权限
total 0
-rw-r--r--. 1 root root 0 Mar 6 17:45 a1
[root@tianqinwei test]# chmod o-r a1 --- 对其他用户去掉可读权限
[root@tianqinwei test]# ll a1
-rw-r-----. 1 root root 0 Mar 6 17:45 a1
[root@tianqinwei test]# chmod g=--- a1 --- 将所属组权限改为---
[root@tianqinwei test]# ll a1
-rw-------. 1 root root 0 Mar 6 17:45 a1
[root@tianqinwei test]# chmod 640 a1 --- 用数字来修改权限,参考上方二进制转为八进制
[root@tianqinwei test]# ll a1
-rw-r-----. 1 root root 0 Mar 6 17:45 a1
[student@tianqinwei test]$ cat a1 --- 验证,普通用户对a1没有权限
cat: a1: Permission denied
[root@tianqinwei ~]# ll -d /root/
drwxrwxrwx. 16 root root 4096 Mar 6 18:18 /root/
[root@tianqinwei test]# chmod a-w /root/ --- 将/root/用户,所属组,其他用户的写权限全都修改
[root@tianqinwei test]# ll -d /root/
dr-xr-xr-x. 16 root root 4096 Mar 6 18:18 /root/
例2:将文件a2改为所属组和其他用户可读可写
[root@tianqinwei test]# chmod g=rw-,o=rw- a2 --- 中间部分命令用逗号隔开(系统会把o部分认为是文件名称,所以用空格分隔会报错)
[root@tianqinwei test]# ll a2
-rw-rw-rw-. 1 root root 0 Mar 6 17:45 a2
[student@tianqinwei test]$ cat a2 --- 验证,可对文件进行可读操作
azsdfgarhae5rhjndtgnsrt6jnjmrfsngxer5dyhusrtn
<1> chown:可同时修改属主和属组
例:修改文件a2所属主,所属组
[root@tianqinwei test]# ll a2
-rw-rw-rw-. 1 root root 46 Mar 6 18:05 a2
[root@tianqinwei test]# chown student a2 --- 修改所属主
[root@tianqinwei test]# ll a2
-rw-rw-rw-. 1 student root 46 Mar 6 18:05 a2
[root@tianqinwei test]# chown :student a2 --- 修改所属组
[root@tianqinwei test]# ll a2
-rw-rw-rw-. 1 student student 46 Mar 6 18:05 a2
[root@tianqinwei test]# chown root:root a2 --- 同时修改所属主和所属组
[root@tianqinwei test]# ll a2
-rw-rw-rw-. 1 root root 46 Mar 6 18:05 a2
<2> chgrp:只能修改文件的所属组
例:修改文件a3所属组
[root@tianqinwei test]# ll a3
-rw-r--r--. 1 root root 39 Mar 6 18:05 a3
[root@tianqinwei test]# chgrp student a3
[root@tianqinwei test]# ll a3
-rw-r--r--. 1 root student 39 Mar 6 18:05 a3
[root@tianqinwei test]# ll a3 --- 查看a3文件的权限以及所属主和组
-rw-r--r--. 1 root student 39 Mar 6 18:05 a3
[root@tianqinwei test]# chmod 600 a3 --- 将文件所属组和其他用户的所有权限取消
[root@tianqinwei test]# ll a3
-rw-------. 1 root student 39 Mar 6 18:05 a3
[root@tianqinwei test]# chown student:root a3 --- 将文件的所属主改为student,所属组改为root
[root@tianqinwei test]# ll a3
-rw-------. 1 student root 39 Mar 6 18:05 a3
则此时文件仅可由student用户进行读写
<1> 含义:为了让一般用户在执行某些程序的时候, 在程序的运行期间, 暂时获得该程序文件所属者的权限
如:
[root@tianqinwei test]# ll /usr/bin/passwd
--- 当用户使用passwd命令的时候,短暂拥有该命令所有者root的权限,
所以此时普通用户就可在shadow上进行操作修改,且只能在二进制执行文件上使用
-rwsr-xr-x. 1 root root 34512 Aug 13 2018 /usr/bin/passwd
[root@tianqinwei test]# ll /etc/shadow
----------. 1 root root 1309 Oct 21 08:51 /etc/shadow
student 用户在执行 passwd 修改自己的密码时, 其修改的密码, 最终是需要保存到 /etc/shadow 这个文件中,而这个文件的权限是 --------- ,它的拥有者是 root ,也只有root 可以“ 强制” 存储, 其他用户连看都不行。可student 去执行 passwd (/usr/bin/passwd) ,却可以更新自己的密码
<2> 例:将文件a1和a2得到权限修改为SUID(u+s)
[root@tianqinwei test]# ll
total 12
-rwxrwxrwx. 1 root root 241 Mar 6 18:05 a1
-rw-rw-rw-. 1 root root 46 Mar 6 18:05 a2
[root@tianqinwei test]# chmod u+s a1 --- 将用户权限修改为u+s
[root@tianqinwei test]# chmod u+s a2
[root@tianqinwei test]# ll
total 12
-rwsrwxrwx. 1 root root 241 Mar 6 18:05 a1 --- 若该文件是可执行文件,显示为s
-rwSrw-rw-. 1 root root 46 Mar 6 18:05 a2 --- 若改文件是不可执行文件,显示为S
有 s 权限的存在,当 s权限在拥有者的权限位上时, 即如 -rwsr-xr-x 这样时, 称为SUID 。SUID 即 Set UID , UID 指的是拥有者的的 ID, 而这个程序 (/usr/bin/passwd) 的拥有者为(root)
PS:
<1> 作用:
<2> 例:将用户haha放入student组中,在该组中将权限更改为SGID,使得haha用户也可创建或删除文件
[root@tianqinwei test]# useradd haha --- 添加用户haha
[root@tianqinwei test]# gpasswd -a haha student --- 添加用户haha到student组中
Adding user haha to group student
[root@tianqinwei test]# tail -2 /etc/group
student:x:1000:haha
haha:x:1001:
[root@tianqinwei test]# ll -d /test
drwxr-xr-x. 2 root root 36 Mar 6 18:05 /test
[root@tianqinwei test]# chown :student /test --- 将目录/test所属组改为student
[root@tianqinwei test]# ll -d /test
drwxr-xr-x. 2 root student 36 Mar 6 18:05 /test
[root@tianqinwei test]# chmod g+s /test --- (g+s的效果:只要在所属组中的用户,都可在该目录下创建或删除文件,操作的文件都在student这个组中)
[root@tianqinwei test]# chmod g+w /test --- 给所属组添加可写权限
[root@tianqinwei test]# ll -d /test
drwxrwsr-x. 2 root student 36 Mar 6 18:05 /test
验证:
[student@tianqinwei test]$ touch ss
[haha@tianqinwei test]$ touch dd
[root@tianqinwei test]# ll
-rw-rw-r--. 1 haha student 0 Mar 6 20:07 dd --- haha用户创建出的文件所属主为haha,所属组为student
-rw-rw-r--. 1 student student 0 Mar 6 20:07 ss --- student用户创建出的文件所属主为student,所属组为student
<1> 含义:具有 SBit 的目录下, 用户若在该目录下具有 w 及 x 权限 , 则当用户在该目录下建立文件或目录时, 只有文件拥有者与 root 才有权力删除
<2> 例:将目录 /test 其他用户的权限更改为SBit
[root@tianqinwei test]# ll -d /test
drwxrwsrwx. 2 root student 56 Mar 6 20:07 /test
[root@tianqinwei test]# chmod o+t /test
[root@tianqinwei test]# ll -d /test
drwxrwsrwt. 2 root student 56 Mar 6 20:07 /test --- o用户在该目录下只可针对自己创建的文件进行“删除/重命名/移动”操作
<1> 查看权限:getfacl [文件名]
<2> 设定权限:setfacl 选项 文件名
-m
|
设定 ACL 权限。如果是给予用户 ACL 权限,则使用 (u:用户名:权限 )格式赋予;如果是给予组 ACL 权限,则使用( g:组名:权限) 格式赋予
|
-x
|
删除指定的ACL权限 |
-b | 删除所有的ACL权限 |
-d | 设定默认ACL权限。只对目录生效,目录中新建立的文件有此默认权限 |
-k | 删除默认ACL权限 |
-R | 递归设定ACL权限。指设定的ACL权限会对子目录下所有文件生效 |
复制文件权限:getfacl file-a | setfalc --set-file=- file-B
例:文件权限为rwx rw- ---,文件所属主为wu,文件所属组为csa。若让组外用户xixi对此目录中文件可读可写,且不让其他用户拥有权限,命令为:setfacl -m u:xixi:rw- cs
例:查看文件权限
[student@tianqinwei test]$ getfacl a --- 查看a文件的权限
# file: a
# owner: root
# group: root
user::rwx
group::r--
other::r--
例:设置ACL权限
[root@tianqinwei test]$ setfacl -m u:student:rwx
[root@tianqinwei test]# setfacl -m u:student:rwx a
[root@tianqinwei test]# getfacl a
# file: a
# owner: root
# group: root
user::rwx
user:student:rwx
group::r--
mask::rwx
other::r--
例:组设置:student组读、写、执行(setfacl -m g:student:7 a )
例:删除权限
[root@tianqinwei test]# setfacl -x u:student a --- 删除student用户针对a文件的权限
[root@tianqinwei test]# setfacl -b a
[root@tianqinwei test]# setfacl -d -m u:student:rwx mm --- 删除所有用户的权限
[root@tianqinwei test]# getfacl mm
# file: mm
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
default:user::rwx
default:user:student:rwx
default:group::r-x
default:mask::rwx
default:other::r-x
[root@tianqinwei test]# setfacl -k -m u:student:rwx mm --- 删除默认权限
例:复制文件权限
在Linux系统中,当用户创建一个新的文件或目录时,系统都会为新建的文件或目录分配默认的权限,该默认权限与umask值有关,其具体关系是:
- 新建文件的默认权限=0666-umask值
- 新建目录的默认权限=0777-umask值
[root@tianqinwei test]# umask --- 查看默认umask值
0022
则文件对应默认权限是644;目录对应默认权限为744
常用:
例:针对a文件进行修改
[root@tianqinwei test]# chattr +i a
[root@tianqinwei test]# lsattr a
----i------------- a
该限制对root用户起作用
[root@tianqinwei test]# mv a b
mv: cannot move 'a' to 'b': Operation not permitted
[root@tianqinwei test]# chattr +a a
[root@tianqinwei test]# lsattr a
-----a------------ a
[root@tianqinwei test]# echo asxdcfv > a
-bash: a: Operation not permitted
[root@tianqinwei test]# echo asxdcfv >> a
[root@tianqinwei test]#