目录
1、权限管理
1)文件权限:读写执行
2)目录权限
3)目录与文件权限的RWX对比
2、文件隐藏属性:
1)命令:lsattr 描述:查看文件系统属性
2)echo命令:输出内容
3)文件权限的修改:
4)文件归属修改:
3、文件的特殊权限:
四位数字代权限
1.SUID权限:
2.SGID权限:
3.Sticky BIT权限:
4.ACL权限:
1)开启ACL权限
5.sudo命令:
6、权限总结
1.修改权限:chmod
2.修改所有者:chown
3.读写执行 :r w x
4 .umask
chmod: 超级用户和普通用户都可以使用
超级用户可以修改其他用户的文件权限
普通用户只能修改所有者为自己的文件权限
chown: 普通用户不能修改
超级用户可以修改
1.当目录权限为757时:
用户可以修改目录下文件并强制保存。强制保存后子文件的所有者和所属组会变为强制保存的用户。如果用户对于子文件没有读权限,那么不能查看文件内容,可以强制覆盖写入并保存。
2.目录权限为7时:
用户cd可以进入目录、
可以ls查看目录下子文件子目录、
可以在目录下创建文件、修改文件。
目录下的可执行文件可以运行。
3.755-w:目录下是否能够写入文件
用户cd可以进入目录、
可以ls查看目录下子文件子目录、
不能在目录下创建文件、也不能强制修改保存。
目录下的可执行文件可以运行。
不能在目录下创建文件和子目录。
4.753-r:能否查看目录子文件子目录
用户cd可以进入目录、
不能查看目录下子文件子目录、
可以在目录下创建文件、修改文件(可以强制写入)。
目录下的可执行文件可以运行。
5.756-x:能否进入目录。
不能切换到目录、
不能修改目录子文件、
查看目录下内容会有报错提示信息,但是会显示目录下子文件子目录。
不能在目录下创建子文件、子目录。
不能执行目录下可执行文件。
字符 |
数字 |
目录 |
文件 |
R |
4 |
查看目录下的文件与目录名称 |
查看文件内容 |
W |
2 |
在目录下增、删、改文件与目录名称 |
修改文件内容 |
X |
1 |
可以用cd命令进入目录 |
可执行。一般为程序或脚本 |
Linux下的文件还有一些隐藏属性,使用lsattr来显示。
用法:lsattr 选项 文件名
选项: -a #显示所有文件和目录
-d #若目标是目录,仅列出目录本身属性
用法:chattr [+- ] [选项] 文件或目录
选项:
i属性:
文件设置i属性,那么不允许对文件进行删除、改名,也不能添加和修改数据;
目录设置i属性,那么只能修改目录下文件的数据,但不允许建立和删除文件。
文件:不能写入,删除,可读
目录:不能创建文件,不能删改文件,可修改已有文件(但不会变更属
文件属性如,uid gid)
a属性:
文件设置a属性,那么只能在文件中增加数据,但是不能删
除也不能修改数据;
目录设置a属性,那么只允许在目录中建立和修改文件,但是不允许删除。
文件:只能在文件内增加数据(不能vim,只能echo),但无法修改已有数据
目录:只允许建立和修改文件,不能改变文件名,但不允许删除
e: Linux中绝大多数的文件都默认拥有e属性。表示该文件是使用ext
文件系统进行存储的,而且不能使用“chattr -e”命令取消e属性
目录读取原理:
目录中记录了文件的文件名和其inode号
目录中的inode1号对应block记录了文件内容的inode2
再通过inode2找到文件内容的block
追加内容给新文件: echo “xxx”>>文件 #将xxx内容添加到文件内
echo “xxx” > 文件 #内容覆盖文件
命令:chmod 描述:改变文件或目录权限。
用法:chmod 【选项】 权限 文件或目录
选项:-R #递归将权限应用于所有的子目录与子文件。
chmod命令参数中,u代表所有者,g代表所属组,o代表其他用户,a代表所有人。
命令:chown
描述:修改文件或目录的所有者与所属组。
用法:chown 【选项】 【所有者】:【所属组】 文件或目录
选项:-R #递归将权限应用于所有的子目录与子文件。
权 限 位 |
第一位含义 |
第二位含义 |
第三位权限 |
第四位权限 |
SUID(4)权限 SGID(2)权限 SBIT(1)权限 |
所有者权限 rwx SUID:s (有执行时s替换) S(有执行时S替换) 与x用同一位置 |
所属组权限 rwx GUID:s (有x时s替换) S(无x时S替换) 与x用同一位置 |
其他人权限 rwx SBIT:t(有x时t替换) T(无x时T替换) 与x用同一位置 |
在多用户多任务的Linux系统里,每个进程的运行都与运行的用户和组相关联。除了进程识别号(PID)以外,每个进程还有另外4个用户和用户组相关的识别号。他们分别是:实际用户识别号(real user ID,RUID)、实际组识别号(real group ID,RGID)、有效用户识别号(effect user ID,EUID)、有效组识别号(effect group ID,EGID)。EUID和EGID的作用在于确定一个进程对其访问的文件的权限和优先权。一般情况下,
EUID、EGID与RUID和RGID相同。设置了SUID和SGID情况除外。
当一个具有执行权限的文件设置SUID权限后,用户执行这个文件时将以文件所有者的身份执行。
特点:
只有可以执行的二进制程序才能设定SUID权限
命令执行者要对该程序拥有x(执行)权
命令执行者在执行该程序时获得该程序文件属主的身份
SUID权限只在该程序执行过程中有效,就是说身份改变只在执行过程中有效。
例:
可执行文件/usr/bin/passwd所属用户是root(UID为0),此文件被设置了SUID权限。当一个UID为1000、GID为1000的用户执行此命令时,产生的进程RUID和RGID分别是1000和1000,EUID是0、EGID是1000。
经过前边对passwd命令的学习,每个用户都可以使用passwd(该命令的绝对路径是/usr/bin/passwd)来修改自己的密码。系统用来记录用户名和密码的文件分别 为/etc/passwd和/etc/shadow,命令执行最终的结果是修改/etc/shadow中对应的密码。对于这个文件,只有root用户有读权限,而普通用户在修改密码时最终也会修改这个文件。
添加或删除SUID的命令格式为:
chmod u+s /usr/bin/passwd #添加SUID权限
chmod u-s /usr/bin/passwd #删除SUID权限
SGID权限的功能和SUID类似。如果某个二进制文件的用户组权限设置了SGID权限。则在执行该文件时,用户将获得该文件所属组的权限。
SGID也可以针对目录生效。在设置了SGID权限的目录下建立文件时,新创建的文件的所属组会继承上级目录的权限
我们在使用locate命令查找文件的时候,实际上是查询了/var/lib/mlocate/mlocate.db数据库。作为普通用户,能够正常使用locate命令的原因,就在于locate命令本身具有SGID权限。
添加或删除SGID的命令格式为:
chmod g+s /usr/bin/passwd
chmod g-s /usr/bin/passwd
除了二进制程序之外,SGID也能用在目录上,这也是常见的用途。当
目录设置了SGID的权限后它将具有如下功能:
1.用户在此目录下有效用户组将会变成该目录的用户组。
2.若用户在此目录下具有w的权限,那么在创建新文件之后文件的所属组与目录的属组相同。
总结:
SGID针对文件:
1)只有可执行的二进制程序才能设置SGID权限。
2)命令执行者要对该程序拥有x(执行)权限。
3)程序在执行过程中,程序的组会改变成程序文件的属组。
4)SGID权限同样只在该程序执行过程中有效,也就是说组身份的转变在程序执行过程中有效。
SGID针对目录:
1)普通用户必须对此目录拥有r和x权限才能进入此目录。
2)普通用户在此目录中的有效组会变成此目录的属组。
3)普通用户对此目录拥有w权限时,新建的文件的默认属组是这个目录的属组。
sticky权限只能用于设置在目录上,设置了这种权限的目录,任何用户都可以在该目录中创建或修改文件,但只有该文件的创建者、目录的拥有者和root可以删除自己的文件。在RedHat或CentOS系统中/tmp目录就拥有sticky权限。
特点:
谁创建谁删除
ACL(access control list)访问控制列表,可以对单一的用户或者组设置对文件或目录的独立rwx权限。
由于ACL是传统的Unix-like操作系统权限的额外支持项目,因此要使用ACL必须要有文件系统的支持才行。目前绝大部分的文件系统都支持ACL的功能,包括EXT3/EXT4,JFS,XFS等。
ext系列:
文件系统查询命令格式:dumpe2fs -h 分区设备名称
假如没有开启ACL权限,手动开启分区ACL权限。
此命令执行后是临时让/分区有ACL权限,重启后失效。
若永久开启ACL需要修改配置文件/etc/fstab文件:
xfs文件系统:
xfs文件系统是centos7中默认使用的文件系统(旧版本通常为ext系列),XFS文件系统默认开启ACL权限。因为是不同的文件系统,所以查询的方式也并不相同:
#在返回信息中:
第一条说明了:系统在219运行系统模式,其中就包含了ACL。
第二条说明了:具有ACL、安全属性、没有启用调试的SGI XFS。
dmesg 命令:
显示linux内核的环形缓冲区信息,我们可以从中获得诸如系统架构、cpu、挂载的硬件,RAM等多个运行级别的大量的系统信息。
setfacl:设置访问控制列表。
用法:setfacl 【选项】 {-m|-x} {u:username:rwx} 文件或目录
选项:
-b #删除所有ACL条目
-m #添加ACL条目
-x #删除指定用户的ACL权限
-R #实现目录上的ACL权限递归
-d #设置默认ACL权限(对目录生效)
例:为user1用户对anaconda-ks.cfg添加ACL权限:
(首先查看文件,此时没有ACL权限设置)
(设置ACL权限为rwx后,用getfacl命令查看)
(-x选项为删除某项的ACL权限,也就是某用户对文件(或目录)的ACL权限)
(给root家目录下anaconda-ks.cfg文件设置ACL权限)
(再设置两条用-b选项看效果)
(可以看到setfacl命令-b选项一次性清空了所有ACL权限)
在ACL权限里可以添加-R选项来递归设置ACL权限,具体格式是:
setfacl -R -m u:user:rwx /目录
mask:
在ACL权限里还有mask的相关设置,可以把mask理解为有效权限。它的意思就是用户或组的权限必须要存在于mask的权限设置范围内才能生效。下面请看实例:
(给user1用户在/test/目录赋予rwx的ACL权限)
(为test目录设置mask为r可读。再次查看发现ACL权限出现了变化。
user1的ACL权限在加上mask之后只有r权限。)
注: 为/test/添加默认最大权限(mask)为r,其他ACL权限不得超出此权限。但mask的设置必须遵循最后设置原则,其他ACL权限设置完成后最后设置mask默认ACL才能正常生效。
在生产环境中我们通常将mask默认设置成rwx,然后针对不同的用户和用户组规定他们权限
sudu命令必须要对文件有读权限才能提升为root
而如果要切换的用户是root就要知道root的密码。在系统中root的权限是最大的,如果很多人都知道root密码以后那么是非常不安全的。为了避免这种情况我们还可以使sudo命令,在使用sudo命令时只输入自己的密码即可。sudo的使用方式是在sudo后加上需要执行的命令。
1)sudo执行流程如下:
1.当用户执行sudo时系统会在/etc/sudoers文件中查找该用户是否有执行sudo的权限。
2.若用户具有执行sudo的权限后,系统会让用户输入自己的密码来确认。
3.密码输入成功,开始进行sudo后续的命令。但root执行sudo不需要输入密码(如果切换的用户与执行者的身份相同也不用输入密码)。
因为在sudo执行的时候要去检查/etc/sudoers文件,所以先要对/etc/sudoers文件进行修改,让该账号能够使用全部或部分的root命令功能。(可以用visudo命令打开文件进行修改,在退出时如果有语法错误会提示)
例:
(vim /etc/sudoers 添加user1的sudo权限)
格式为:
用户账号 登录者的来源主机名=(可切换的身份) 可执行的命令
所以上面两行的意思是:
1.用户账号:系统默认为root可以使用sudo命令。后添加user1用户。
2.可以被管理的服务器的网络地址,写自己或者ALL代表任何来源地址都可以管理本台服务器。
3.可切换身份:这个账号可以切换成什么身份来执行后续的命令。
4.可执行的命令:这个命令必须写绝对路径。
ALL:代表任何身份,任何主机,任何命令。
修改完成后切换用户查看sudo命令效果:
在/etc/sudoers配置文件中,也可以添加授权组使用sudo命令:
(在本机中还有user2用户,默认组为user2。添加组的时候在组名添加%即可。之后保存退出。)
(用户为user2,组为user2组使用sudo命令查看/etc/shadow文件)
(命令执行成功)
例:给user1用户授权重启命令,创建用户命令和修改用户密码命令。
( 授权user1用户拥有重启服务器,更改密码,创建用户的权限,但是隐患是被授权的user1用户可以用此命令修改root密码)
(在修改密码命令之后添加了
/usr/bin/passwd [A-Za-z]*,!/usr/bin/passwd"",!/usr/bin/passwd root)
第一条就是说用passwd命令可以修改的范围包括A-Z和a-z开头的用户名。
第二条,不能用passwd给“”(空)改名。
第三条,/usr/bin/passwd改名对象不能是root。
sudo和su命令的组合使用:
这样可以让user1不知道root用户密码的情况下使用“sudo su - root”切换用户身份至root。
权限 |
目录 |
文件 |
r读 |
查看目录下的文件与目录名称 |
查看文件内容 |
w写 |
在目录下增删,改,查文件与目录名称 |
修改文件内容 |
x执行 |
可以用cd进入到目录 |
可执行,一般为程序或脚本 |
i属性 |
不能进行创建文件,不能删除文件 可修改有权限的文件已有文件 |
只读 |
a属性 |
只允许建立和修改有权限的文件,不能改名,但不允许删除 |
只能追加数据 |
ACL(访问控制列表) |
让特定用户和组拥有目录的rwx |
让特定用户和组拥有文件的rwx |
SGID |
用户在此目录下有效用户组会变成改目录的用户组 |
SUID(对范围生效) |
用户执行这个文件时将以文件所有者身份执行(让用户有权限执行) (仅在执行程序时) |
SGID |
用户执行这个文件时将以文件所属组身份执行 |
sudo(对单个用户) |
在/etc/sudoers授权用户一部分权限,使用户可以在自己账户内执行一些root命令 |