18文件权限管理

mac2022-06-30  24

一. 文件权限概述

尽管在Linxu系统中一切都是文件,但是每个文件的类型不尽相同,因此Linux系统使用了不同的字符来加以区分。

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

Linux 中规定义了文件的所有者、所有组以及其他人对文件所拥有的可读(r)、可写(w)、可执行(x)等权限。

对于一般文件来说,权限比较容易理解:“可读”表示能够读取文件的内容;“可写”表示能够编辑、新增、修改、删除文件的实际内容;“可执行”则表示能够运行一个脚本程序。

但是,对于目录文件来说,其权限设置就不那么容易了。

可读 表示能够读取目录内的文件列表 可写 表示能够在目录内新增、删除、重命名文件 可执行 表示能够进入该目录 [root@rockman 0620]# ls -l total 8 #文件类型为:普通文件;所有者权限:读写执行;同组权限:读;其他人权限:读 -rw-r--r--. 1 root root 28 Jun 20 09:32 atcopy.txt

二. 文件的特殊权限

主要包括SUID、SGID与SBIT的特殊权限位。这是一种对文件权限进行设置的特殊功能,可以与一般权限同时使用,以弥补一般权限不能实现的功能。

SUID

SUID是一种对二进制程序进行设置的特殊权限,可以让二进制程序的执行者临时拥有属猪的权限。

SGID

SGID主要实现如下两种工能:

让执行者临时拥有属组的权限(对拥有执行权限的二进制程序进行设置);

在某个目录中常见的文件自动继承该目录的用户组(只可以对目录进行设置);

SBIT

SBIT特殊权限位可确保用户只能删除自己的文件,而不能删除其他用户的文件。换句话说,当对某个目录设置了SBIT粘滞位权限后,那么该目录中的文件就只能被其所有者执行删除操作了。

三. 文件的隐藏权限

隐藏权限,指被隐藏起来的权限,默认情况下不能直接被用户发觉。(不是隐藏文件的权限!!!)

chattr 命令

chattr命令用于设置文件的隐藏权限,格式为“chattr [参数] 文件”。

如果想要把某个隐藏功能添加到文件上,则需要在命令后面追加“+参数”,如果想要把某个隐藏功能移出文件,则需要追加“-参数”。

chattr命令中可供选择的隐藏权限参数:

i 无法对文件进行修改;若对目录设置了改参数,则仅能膝盖其中的子文件内容而不能新建或者删除文件 a 仅允许补充(追加)内容,无法覆盖/删除内容(Append Only) S 文件内容在变更后立刻同步到硬盘(sync) s 彻底从硬盘中删除,不可恢复(用0填充原文件所在硬盘) A 不在修改这个文件或目录的最后访问时间(atime) b 不在修改文件或目录的存取时间 D 检查压缩文件中的错误 d 使用dump命令备份时忽略忽略本文件/目录 c 默认将文件或者目录进行压缩 u 当删除改文件后依然保留其在硬盘中的数据,方便日后恢复 t 让文件系统支持尾部合并 X 可以直接访问压缩文件中的内容 #创建一个普通文件,可以直接删除掉 [root@localhost 0623]# echo "for test file" > test.txt [root@localhost 0623]# rm test.txt rm: remove regular file ‘test.txt’? y [root@localhost 0623]# ls #创建一个普通文件,加上 a 隐藏属性(只允许追加),则无法删除 [root@localhost 0623]# echo "for test file" > test.txt [root@localhost 0623]# chattr +a test.txt [root@localhost 0623]# rm test.txt rm: remove regular file ‘test.txt’? y rm: cannot remove ‘test.txt’: Operation not permitted #创建一个普通文件,移出 a 隐藏属性,则可以删除 [root@localhost 0623]# chattr -a test.txt [root@localhost 0623]# rm test.txt rm: remove regular file ‘test.txt’? y [root@localhost 0623]# ls [root@localhost 0623]# lsattr 命令

lsattr命令用于显示文件的隐藏属性,格式为“lsattr [参数] 文件”。Linux系统中,文件的隐藏权限必须使用lsattr命令查看,平时使用的ls之类的命令则看不出端倪。

[root@localhost 0623]# ls -al test.txt -rw-r--r--. 1 root root 10 Jun 23 11:03 test.txt [root@localhost 0623]# chattr +a test.txt [root@localhost 0623]# lsattr -al test.txt test.txt Append_Only [root@localhost 0623]# lsattr test.txt -----a---------- test.txt [root@localhost 0623]#

四. su命令与sudo 服务

su 命令

在学习中,使用root更加方便,但是在生产环境中还是要对安全多一份敬畏之心,不要用root管理员去做所有事情。因为一旦执行了错误的命令,可能会直接到时系统崩溃。

尽管Linux系统为了安全考虑,使得许多系统命令和服务只能被root管理员使用,但是这也让普通用户受到了更多的权限束缚,从而导致无法顺利完成特定的工作任务。

su命令可以解决切换用户身份的需求,使得当前用户在不退出登录的情况下,顺畅地切换到其他用户。

[root@localhost 0623]# id uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 #su命令之后的减号(-),意味着完全切换到新用户,即把环境变量信息也变更为新用户的相应信息,而不是保留原始的信息。 [root@localhost 0623]# su - hk Last login: Fri Jun 8 09:55:59 CST 2018 on tty1 [hk@localhost ~]$ id uid=1000(hk) gid=1000(hk) groups=1000(hk) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 [hk@localhost ~]$

尽管像上面这样使用su命令之后,普通用户完全可以切换到root管理员身份来完成相应工作,但是这将暴露root管理员密码,从而增大了系统密码被黑客获取的几率,这病不是最安全的方案。

sudo 服务

sudo命令把特定命令的执行权限赋予给指定用户,这样既可以保证普通用户能够完成特定的工作,也可以皮面泄露root管理员密码。我们要做的就是合理配置sudo服务,以便兼顾系统的安全性和用户的便捷性。

sudo 命令用于给普通用户提供额外的权限来完成原本root管理员才能完成的任务,格式为“sudo [参数] 命令名称”。

总的来说,sudo命令具有如下功能: 限制用户执行指定的命令 记录用户执行的每一条命令 配置文件(/etc/sudoers)提供集中的用户管理、权限主机等参数 验证密码后的5分钟内(默认值)无需再让用户再次验证密码

当然,如果担心直接修改配置文件会出现问题,则可以使用sudo命令提供的visudo命令来配置用户权限。

转载于:https://www.cnblogs.com/rock-cc/p/9216841.html

最新回复(0)