文件的一般权限
以下图为例
文件的权限针对三类对象进行定义
owner:所属主
group:所属组
other:其他
每个文件针对三类访问者定义了三种主要权限
r:read 读
w:write写
x:excute执行
1、修改文件或目录的权限—chmod(change mode)命令
命令格式 1:chmod [选项] [ugoa][+-=][rwx] 文件或目录...
命令格式2:chmod [选项] nnn 文件或目录...
常用的选项-R ,递归修改指定目录下所有文件、子目录的权限。
ugoa :表示权限设置所针对的用户类别,可以是其中字母中的一个或组合,u(user)表示文件或目
录的属主(所有者);g(group)表示属组内的用户;o(others)表示其他用户;a(all)表示所有用户(即 u+g+o)。
+或-或= :表示设置权限的操作动作,+代表添加某个权限;-代表取消某个权限;=表示只赋予给定 的权限,并取消原有的权限。
rwx :用字符形式表示的所设置的权限,可以是其中一个字母或组合。
nnn :用三位八进制数字表示的权限。
2、对于文件和目录来说,r,w,x有着不同的作用和含义:
权限 | 对文件的影响 | 对目录的影响 |
r | 可以读取文件内容 | 可以列出目录的内容 |
w |
可以更改文件的内容 | 可以创建出目录或者删除目录中的任一文件 |
x | 可以作为可执行文件 | 可以切换到目录 |
文件可能出现的权限:---、r--、r-x、rwx
目录可能出现的权限:---、r-x、rwx
3、修改文件或目录的属主和属组
(1) 修改文件或目录的所属者
命令格式 :chown [选项] 新属主[:[新属组]] 文件或目录……
选项:-R 可递归设置指定目录下的全部文件(包括子目录和子目录中的文件)的所属关系。
(2)修改文件或目录的属组
命令1:chown [选项] :新属组 文件或目录……
命令2:chgrp [选项] 新属组 文件或目录……
在Linux系统中,用户对文件或目录的访问权限除了r、w、x三种一般权限外,还有SET UID(SUID)、SET GID(SGID)、Sticky Bit(粘滞位)三种特殊权限,用于对文件或目录进行更加灵活方便的访问控制。
1、SUID 权限的含义:是为了让一般用户在执行某些程序的时候, 在程序的运行期间, 暂时获得该程
序文件所属者的权限。
分析:xiaolant用户要更改自己的密码
■ xiaolan 在执行 passwd 修改自己的密码时, 其修改的密码, 最终是需要保存到 /etc/shadow 这个文件中, 而这个文件的权限是 --------- ,它的拥有者是 root ,也只有 root 可以“ 强制” 存储, 其他 用户连看都不行。
■ 可偏偏 xiaolan 去执行 passwd (/usr/bin/passwd) ,却可以更新自己的密码。
这就是因为有 s 权限的存在,当 s权限在拥有者的权限位上时, 即如-rwsr-xr-x 这样时, 称为 SUID 。SUID 即 Set UID , UID 指的是拥有者的的 ID, 而这个程序 (/usr/bin/passwd) 的拥有者为 (root) 。
[root@server ~]# which passwd
/usr/bin/passwd
[root@server ~]# ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 33544 Dec 13 2019 /usr/bin/passwd
注意:
1、suid仅对二进制文件有效。
2、在执行过程中,调用者会暂时获得该文件的所有者权限。
3、该权限只在程序执行的过程中有效。
查询系统中设置了uid的文件
[root@server ~]# find / -perm /4000
find: ‘/proc/3094’: No such file or directory
find: ‘/proc/3096/task/3096/fd/5’: No such file or directory
find: ‘/proc/3096/task/3096/fdinfo/5’: No such file or directory
find: ‘/proc/3096/fd/6’: No such file or directory
find: ‘/proc/3096/fdinfo/6’: No such file or directory
/usr/bin/fusermount
/usr/bin/fusermount3
/usr/bin/chage
/usr/bin/gpasswd
/usr/bin/newgrp
/usr/bin/mount
2、SGID 权限
SGID 可以用在两个方面:
■ 文件: 如 果 SGID 设置在二进制文件上, 则不论用户是谁,在执行该程序的时候,程序的所属组将 会变成该程序文件的所属组。
■ 目录, 如 果 SGID 是设置在 A 目录上, 则在 A 目录内所建立的文件或目录的所属组, 将会是此 A 目录的所属组。
一 般来说, SGID 多用在特定的多人团队的项目开发上,在系统中用的很少。
查询系统中的SGID文件
[root@server ~]# find / -perm /2000
find: ‘/proc/3856/task/3856/fd/5’: No such file or directory
find: ‘/proc/3856/task/3856/fdinfo/5’: No such file or directory
find: ‘/proc/3856/fd/6’: No such file or directory
find: ‘/proc/3856/fdinfo/6’: No such file or directory
/run/log/journal
/run/log/journal/dde53448173647fea22cb7b257aee038
/usr/bin/write
/usr/bin/locate
/usr/sbin/lockdev
/usr/libexec/utempter/utempter
/usr/libexec/openssh/ssh-keysign
[root@server ~]#
3、Sticky Bit权限
Sticky Bit (SBit) 当前只针对目录有效, 对文件没有效果。其对目录的作用是:
■ 在 具 有 SBit 的目录下, 用户若在该目录下具有 w 及 x 权限 , 则当用户在该目录下建立文件或目 录时, 只有文件拥有者与 root 才有权力删除。
例如:当 student 用户属于 A 目录的组成员或属于 other ,且拥有 wx 权限时, 可以对该目录内任何人 建立的目录或文件进行“ 删除/重命名/移动” 等操作。 如果将 A 目录加上了 Sticky Bit 权限, 则 student 用户只能针对自己建立的文件或目录进行“ 删除/重命名/移动” 等操作。
4、设置文件和目录的特殊权限
为文件或目录添加三种特殊权限同样可以通过chmod命令来实施,使用“u±s”、“g±s”、“o±t”的字符权限模 式分别用于添加和移除SUID、GUID、sticky权限。
若使用数字形式的权限模式,可采用“nnnn”格式的四位八进制数字表示,其中:后面三位是一般权限的数 字表示,前面第一位则是特殊权限的标志数字:
0——表示不设置特殊权限
1——表示只设置sticky
2——表示只设置GUID权限
3——表示只设置SGID和sticky权限
4——表示只设置SUID权限
5——表示只设置SUID和sticky权限
6——表示只设置SUID和SGID
7——表示同时设置SUID、GUID、sticky3种权限
ACL 权限分配:给指定的用户指定目录分配指定的权限。
1、ACL权限管理命令
查看ACL权限
设定ACL权限
语法:setfacl 选项 文件名
选项:
-m:设定 ACL 权限。如果是给予用户 ACL 权限,则使用u:用户名:权限 格式赋予;如果是给予组 ACL 权限,则使用g:组名:权限" 格式赋予;
-x:删除指定的 ACL 权限;
-b:删除所有的 ACL 权限;
-d:设定默认 ACL 权限。只对目录生效,指目录中新建立的文件拥有此默认权限;
-k:删除默认 ACL 权限;
-R:递归设定 ACL 权限。指设定的 ACL 权限会对目录下的所有子文件生效;
[root@server ~]# mkdir /home/file2
[root@server ~]# ll /home
total 4
drwx------. 3 admin temp 78 Nov 2 09:30 admin
drwx------. 3 alex alex 78 Nov 2 09:27 alex
drwxr-xr-x+ 2 root root 6 Nov 3 05:10 file1
drwxr-xr-x. 2 root root 6 Nov 3 05:37 file2
drwx------. 3 laoliu laoliu 78 Nov 3 05:10 laoliu
drwx------. 4 myuser myuser 133 Nov 2 03:52 myuser
drwx------. 15 rehl rehl 4096 Oct 30 03:41 rehl
drwx------. 3 sarah sarah 78 Nov 2 09:23 sarah
drwx------. 3 user group 78 Nov 2 04:01 user
drwx------. 4 xiaolan xiaolan 113 Nov 1 22:51 xiaolan
drwx------. 3 zhangsan zhangsan 78 Oct 31 10:48 zhangsan
[root@server ~]# setfacl -m u:laoliu:rx /home/file2
[root@server ~]# ll /home
total 4
drwx------. 3 admin temp 78 Nov 2 09:30 admin
drwx------. 3 alex alex 78 Nov 2 09:27 alex
drwxr-xr-x+ 2 root root 6 Nov 3 05:10 file1
drwxr-xr-x+ 2 root root 6 Nov 3 05:37 file2
drwx------. 3 laoliu laoliu 78 Nov 3 05:10 laoliu
drwx------. 4 myuser myuser 133 Nov 2 03:52 myuser
drwx------. 15 rehl rehl 4096 Oct 30 03:41 rehl
drwx------. 3 sarah sarah 78 Nov 2 09:23 sarah
drwx------. 3 user group 78 Nov 2 04:01 user
drwx------. 4 xiaolan xiaolan 113 Nov 1 22:51 xiaolan
drwx------. 3 zhangsan zhangsan 78 Oct 31 10:48 zhangsan
[root@server ~]#
2、最大有效权限 mask
给用户或用户组设定 ACL 权限其实并不是真正我们设定的权限,是与 mask 的权限“相与”之后的权限才 是用户的真正权限,一般默认mask权限都是rwx,与我们所设定的权限相与就是我们设定的权限。
在设定玩acl之后我们可以查看权限
[root@server ~]# getfacl /home/file2
getfacl: Removing leading '/' from absolute path names
# file: home/file2
# owner: root
# group: root
user::rwx
user:laoliu:r-x
group::r-x
mask::r-x
other::r-x
[root@server ~]#
设置新建文件或目录的默认权限
在Linux系统中,当用户创建一个新的文件或目录时,系统都会为新建的文件或目录分配默认的权限,该默认权限与umask值有关,其具体关系是:
新建文件的默认权限=0666-umask值
新建目录的默认权限=0777-umask值
[root@server ~]# touch /root/file
[root@server ~]# mkdir /root/ceshi
[root@server ~]# ll -d ceshi file
drwxr-xr-x. 2 root root 6 Nov 9 01:37 ceshi
-rw-r--r--. 1 root root 0 Nov 9 01:35 file
[root@server ~]#
1、设置文件的扩展属性
命令格式 :chattr [ -R ] [+-=acdijsuADS] 文件或目录名
命令 | 效果 |
-R | 递归设置指定文件几目录下的所有文件和子目录属性 |
-V | 详细显示目录和文件的属性设置情况 |
+、-、= | 增加、取消、设置文件或目录属性 |
a | 只允许向文件中追加数据,不允许任何进程覆盖重写文件的内容 |
A | 设置不允许系统更新文件的最后访问时间 |
i | 不可修改属性 |
c | 压缩属性 |
s | 安全删除属性 |
u | 可恢复性的删除 |
2、查看文件的扩展属性
命令格式 :lsattr [-adR] 文件名或目录名
-a:列出目录中的所有文件(包括隐藏文件)。
-d:列出目录文件的扩展属性。
-R:以递归的方式列出目录的属性及其内容。
实验
1、设置权限,要求如下:
(1)创建g1组,要求创建一个属于redhat用户g1组的文件redhat.txt
(2)新建/sc目录,所属组为group组,root用户和group组用户可在该目录下创建文件,其他人无任何权限
(3)新建/cw目录为财务部存储目录,只能对财务部人员可以写入,并且财务部人员所建立的文件都自动属于mygroup组中
(4)设置 helen用户对于/sc和/cw目录可以读,写,执行
(5)设置/test目录为公共存储目录对所有用户可以读,写,执行,但用户只能删除属于自己的文 件(t权限)
(6)在/test/dir里创建的新文件自动属于temp组
(1)创建g1组,要求创建一个属于redhat用户g1组的文件redhat.txt
[root@server ~]# groupadd g1
[root@server ~]# useradd redhat -g g1
[root@server ~]# su - redhat
[redhat@server ~]$ touch redhat.txt
[redhat@server ~]$ ll
total 0
-rw-r--r-- 1 redhat g1 0 Nov 11 05:29 redhat.txt
[redhat@server ~]$
(2)新建/sc目录,所属组为group组,root用户和group组用户可在该目录下创建文件,其他人无任何权限
[root@server ~]# mkdir /sc
[root@server ~]# chron .group /sc
[root@server ~]# chown root:group /sc
[root@server ~]# ll /sc -d
drwxrws--- 2 root group 6 Nov 11 05:30 /sc
(3)新建/cw目录为财务部存储目录,只能对财务部人员可以写入,并且财务部人员所建立的文件都自动属于mygroup组中
[root@server ~]# mkdir /cw
[root@server ~]# chowm :mygroup /cw
[root@server ~]# chown :mygroup /cw
[root@server ~]# chmod 070 /cw
[root@server ~]# chmod g+s /cw
[root@server ~]# ll /cw -d
d---rws--- 2 root mygroup 6 Nov 11 05:34 /cw
[root@server ~]# touch /cw/ceshi
[root@server ~]# ll /cw/ceshi -d
-rw-r--r-- 1 root mygroup 0 Nov 11 05:36 /cw/ceshi
[root@server ~]#
(4)设置 helen用户对于/sc和/cw目录可以读,写,执行
[root@server ~]# setfacl -m u:helen:rwx /sc
[root@server ~]# setfacl -m u:helen:rwx /cw
[root@server ~]# su - helen
[helen@server ~]$ ll /sc -d
drwxrws---+ 2 root group 6 Nov 11 05:30 /sc
[helen@server ~]$ ll /cw -d
d---rws---+ 2 root mygroup 19 Nov 11 05:36 /cw
[helen@server ~]$
(5)设置/test目录为公共存储目录对所有用户可以读,写,执行,但用户只能删除属于自己的文 件(t权限)
[root@server ~]# chmod o+t /test
[root@server ~]# ll /test -d
drwxr-xr-t. 146 root root 8192 Oct 30 00:37 /test
[root@server ~]#
(6)在/test/dir里创建的新文件自动属于temp组
[root@server ~]# chown :temp /test/dir
[root@server ~]# chmod g+s /test/dir
[root@server ~]# touch /test/dir/ceshi
[root@server ~]# ll /test/dir/ceshi -d
-rw-r--r-- 1 root temp 0 Nov 11 06:38 /test/dir/ceshi
[root@server ~]#