> 文章列表 > linux权限管理

linux权限管理

linux权限管理

权限管理

文件的权限针对三类对象进行定义

  • owner属主,缩写u
  • group属组,缩写g
  • other其他,缩写o

1、文件的一般权限

(1)r,w,x的作用及含义:

权限 对文件影响 目录影响
r(read:读) 可以读取文件内容
可以列出目录的内容,即目录下的文件的文件名
w(write:写)
可以更改文
件的内容
可以创建或者删除目录中的任一文件(只有w权限无法创建删除文件,需要和x权限一起使用)
x(execute:执行)
可作为可执行文件
可以切换到目录
- 没有权限

PSroot账户不受文件权限的读写限制,执行权限受限制

(2)相应二进制可表示对应权限:

所属者/所属组/其他用户权限的字符表示
二进制表示
八进制表示
--- 000 0
--x 001 1
-w- 010 2
-wx 011 3
r-- 100 4
r-x 101 5
rw- 110 6
rwx 111 7

如图:

(3)常见普通权限组合

  • 目录:r-x;rwx;---
  • 文件(文本文件):r-x;rw-;rwx;r--;---

2、修改权限

(1)修改文件或目录的权限 --- chmod

  • 格式1:chmod  [选项]  [ugoa][+-=][rwx]  文件或目录..
  • 格式2:chmod  [选项]  nnn  文件或目录...
  • 常用选项:
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

(2)修改文件或目录的属主和属组

<1> chown:可同时修改属主和属组

  • 格式: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:只能修改文件的所属组

  • 格式: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

(3)例:student用户可读可写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用户进行读写

3、文件的特殊权限

(1)SUID(u+s)权限

<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:

  • SUID仅对二进制文件有效
  • 执行过程中,调用者暂时获得该文件所有者权限
  • 该权限只在执行过程中有效

(2)SGID(g+s)权限

<1> 作用

  • 文件:如果 SGID 设置在二进制文件上,则不论用户是谁,在执行该程序时,程序所属组将会变成该程序文件的所属组
  • 目录:若SGID设置在A目录上,则A目录内所建立的文件和目录的所属组,将会是A目录的所属组

<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

(3)Sticky Bit--SBit(o+t):只针对目录有效, 对文件没有效果

<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用户在该目录下只可针对自己创建的文件进行“删除/重命名/移动”操作

4、ACL权限

(1)含义若想指定一个用户想访问一个组中的文件,而该组中无此用户,则可用ACL权限指定该用户,赋予其相应权限。

(2)命令:

<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 --- 删除默认权限

例:复制文件权限

5、umask(权限掩码)

(1)作用设置新建文件或目录的默认权限

(2)默认umask:

在Linux系统中,当用户创建一个新的文件或目录时,系统都会为新建的文件或目录分配默认的权限,该默认权限与umask值有关,其具体关系是:

  • 新建文件的默认权限=0666-umask值
  • 新建目录的默认权限=0777-umask值
[root@tianqinwei test]# umask --- 查看默认umask值
0022

(3)例:umask默认值为033,则对应的文件和目录的默认权限是什么?

则文件对应默认权限是644;目录对应默认权限为744