运维开发网
广告位招商联系QQ:123077622
 
广告位招商联系QQ:123077622

redhat7 文件的权限-笔记

运维开发网 https://www.qedev.com 2020-04-03 15:19 出处:51CTO 作者:15128179570
redhat7文件权限的操作

文件权限

Linux中一切都是文件,但是每个文件的类型不尽相同,linux系统使用不同的字符来加以区分,常见的字符如下:

字符 含义
- 普通文件
d 目录文件
l 链接文件
b 块设备文件
c 字符设备文件
p 管道文件

每个文件都有所有者和所有组,并且有各自的权限,读(r)写(w)执行(x),对于文件和目录rwx含义是不用的

  • 文件:

    r 读取文件内容的权限

    w 修改文件内容的权限

    x 执行文件内容的权限

  • 目录:

    r 查看目录下文件的权限

    w 穿件、删除、修改目录下文件的权限

    r 进入目录的权限

示例如下:

lrwxrwxrwx.   1 root root    7 Feb  7 19:53 bin -> usr/bin
dr-xr-xr-x.   3 root root 4096 Feb  7 12:08 boot

文件的特殊权限

SUID

SUID是一种对二进制程序进行设置的特殊权限,可以上二进制程序的执行者临时拥有属主的权限(仅对拥有执行权限的二进制程序有效)

命令是chmod u+s 文件名,将所有者的权限由rwx变成rws,其中x变成s表示拥有了SUID权限,如果原本所有者的权限是rw-就会变成rwS,其中-会变成大写的S

例如passwd命令:

[[email protected] /]# ll /bin/passwd 
-rwsr-xr-x. 1 root root 27832 Jan 30  2014 /bin/passwd

SGID

SGID主要实现两种功能:

  • 让执行者临时拥有属组的权限(对拥有执行权限的二进制程序进行设置)
  • 在某个目录中创建的文件自动继承改目录的用户组

    命令是chmod g+s 文件名,将所有组的权限由rwx变成rws,其中x变成s表示拥有了SGID权限,如果原本所有组的权限是rw-就会变成rwS,其中-会变成大写的S

    示例:

    创建一个目录test,属主和属组是test,将目录的权限设置为777,其他用户都可以在test目录下创建自己的文件,属主和属组都是用户自己

    设置SGID后,其他用户在test目录下创建的文件,属组将会变成test

    [[email protected] /]# chmod 777 /test
    [[email protected] /]# ls -l /test
    drwxrwxrwx.   2 test test    6 Feb  7 20:36 test
    [[email protected] /]# su -l developer -c "touch /test/a.txt"
    [[email protected] /]# chmod g+s /test
    [[email protected] /]# ls -l /test
    drwxrwsrwx.   2 test test    6 Feb  7 20:36 test
    [[email protected] /]# su -l developer -c "touch /test/b.txt"
    [[email protected] /]# ls -l test/
    -rw-r--r--. 1 developer developer   0 Feb  7 20:37 a.txt
    -rw-r--r--. 1 developer test 0 Feb  7 20:37 b.txt

SBIT

对一个目录设置了SBIT权限后,改目录中的文件只能被其所有者执行删除操作,其他用户没有删除权限。

命令是 chmod o+t 目录名 ,文件的其他人权限部分的x执行权限会被替换成t或者T,原本有x执行权限则会写成r,原本没有x执行权限则会被写成T。

例如系统中的/tmp目录,所有用户都可以在/tmp目录下创建文件,但是不能删除其他用户创建的文件。

文件的隐藏属性

chattr命令

chattr命令用于设置文件的隐藏权限,格式为“chattr [参数] 文件名” 。如果想要把某个隐藏功能添加到文件上,则需要在命令后面追加 "+参数" ,如果想要把某个功能移除文件,则需要追加 "-参数"。命令参数如下表:

redhat7 文件的权限-笔记

redhat7 文件的权限-笔记

示例:

对一个普通文件进行操作,创建、覆盖、追加、删除都是可以的:

[[email protected] ~]# touch aa.txt
[[email protected] ~]# echo "hello" >aa.txt 
[[email protected] ~]# echo "hello" >>aa.txt 
[[email protected] ~]# rm -f aa.txt

对一个文件加上隐藏权限a,只能追加文件,不能覆盖和删除文件

[[email protected] ~]# touch bb.txt
[[email protected] ~]# chattr +a bb.txt 
[[email protected] ~]# echo "hello" >bb.txt 
-bash: bb.txt: Operation not permitted
[[email protected] ~]# echo "hello" >>bb.txt 
[[email protected] ~]# rm -f bb.txt 
rm: cannot remove ‘bb.txt’: Operation not permitted

lsattr 命令

lsattr命令用于显示文件的隐藏权限,格式为"lsattr [参数] 文件"。在linux系统中,文件的隐藏权限必须使用lsattr命令来查看

[[email protected] ~]# lsattr bb.txt 
-----a---------- bb.txt
[[email protected] ~]# ls -l bb.txt 
-rw-r--r--. 1 root root 6 Feb 10 11:00 bb.txt

文件访问控制列表

上面讲的一般权限、特殊权限、隐藏权限的一个共性---权限是针对某一类用户设置的,如果想对一个指定的用户进行单独的权限控制,就需要用到文件的访问控制列表(ACL)。给予普通文件或者目录设置ACL其实就是针对指定的用户或者用户组设置文件或者目录的操作权限。如果针对某个目录设置了ACL,则目录中的文件会继承其ACL;如果对文件这事了ACL,则文件不再继承其所在目录的ACL。

例如:

使用普通用户Linuxprobe进入root用户的家目录中,会提示没有权限

[Linux[email protected] ~]$ cd /root
-bash: cd: /root: Permission denied
[Linux[email protected] ~]$ 

setfacl 命令

setfacl 命令用户管理文件的ACL规则,格式为"setfacl [参数] 文件名"。文件的ACL提供的是在所有者、所有组、其他人的读、写、执行权限之外的特殊权限控制,使用setfacl命令可以针对单一用户或用户组、单一文件或目录来进行读、写、执行权限的控制。针对目录需要使用 -R 参数;针对文件使用 -m 参数;如果要删除某一个文件的ACL,则使用 -b 参数。

示例:

设置用户在/root目录上的权限,使普通用户Linuxprobe可以进入/root目录:

[[email protected] ~]# setfacl -Rm u:Linuxprobe:rwx /root
[[email protected] ~]# su - Linuxprobe
Last login: Mon Feb 10 11:10:08 CST 2020 on pts/2
[Linux[email protected] ~]$ cd /root/
[Linux[email protected] root]$ ls
anaconda-ks.cfg  bb.txt  initial-setup-ks.cfg

删除ACL权限:

setfacl -b /root

getfacl 命令

getfacl命令用户显示文件上设置的ACL信息,格式为"getfacl 文件名"。

[[email protected] ~]# getfacl /root/
getfacl: Removing leading '/' from absolute path names
# file: root/
# owner: root
# group: root
user::r-x
user:Linuxprobe:rwx
group::r-x
mask::rwx
other::---

扫码领视频副本.gif

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号