本章目录:
一.解释linux的安全模型
二.解释用户账号和组群账号的目的
三.用户和组管理命令
四.理解并设置文件权限
五.默认权限
六.特殊权限
七.ACL
一.解释linux的安全模型
1.安全3A:1)认证(Authentication):证明自己是谁
(1)用户名密码(不安全)
(2)一次性密码
(3)指纹,人脸识别
(4)数字证书
2)授权(Authorization):当认证通过之后,管理每个账户的权限,决定每个账户能做什么
3)审计(Accounting):统计每个账户做过什么
2.安全上下文:(服务??)
1)进程的发起者 命令(工具) 对象(ps -ef:查看所有的进程信息)
(1)进程的发起者:使用命令(工具)的人
(2)命令(工具):
(3)对象:
(4)访问文件的权限和工具使用权限没有关系,文件的访问权限只和文件的uid有关,在用户拥有文件的相关权限的时候才会考 虑使用权限的工具
二.解释用户账号和组群账号的目的
1.用户user:1)Linux系统给每个Linux用户分配一个编号,Linux系统通过编来识别用户,这个编号叫做uid
2)管理员(root):uid:0
3)普通用户:uid:1-65535
(1)系统用户:
a.每个服务都要有进程来启动,监听,这个进程需要一个用户的身份去打开,再打开之后还需要一个用户的身份去访问服务 的配置文件,数据文件等内容,这样的用户叫做系统用户
b.为了安全,系统用户不可登录,不可交互,后台只是以这个用户的身份读取数据和配置文件,所以系统用户的shell类型 为/sbin/nologin
c.每安装一个服务,服务的安装包中都会创建一个只对这个服务有权限的服务用户,只能启动这个服务的进程,访问数据文 件和配置文件
d.uid:1-499(Centos6),1-999(CentOS7)
(2)登陆用户:
a.可以交互,自己创建的用户
b.uid:500+(Centos6),1000+(Centos7)
2.组group:
3.Linux组类型:
1)主要组(私有组):
(1)每个用户有且只有一个组(创建用户时自动创建,默认只有这个用户一个成员并同名)
(2)每个文件要有一个组,这个用户创建文件时,默认文件的组继承用户所在的主要组
(3)多个用户可以属于同一个主要组(不推荐),一般主要组只有只有一个用户,不与其他用户共享文件
2)附加组(附属组):
(1)一个用户可以有附加组,也可以没有附加组,有附加组的话也可以有多个附加组
(2)当这个用户创建的文件不想参与共享的时候,就不加入附加组
(3)当这个用户创建的文件想要参与共享的时候,就将这个用户加入附加组
(4)主要组不要被当作附加组,所有的共享都是通过创建额外的附加组去实现
3)单纯以组的类型来看,主要去和附加组没有区别,主要组和附加组的区别主要在于用户怎么看待这个组
4.用户和组的配置文件
1)/etc/passwd:用户登录的时候通过这个配置文件获取登陆时的基本内容,可以通过修改这个配置文件的内容进行相应的修改
(1)第一列:用户的登录名
(2)第二列:用户加密的密码位
a.*:密码被锁定,无法登陆
b.!!:密码已经过期
c.x:代表密码被映射到/etc/shadow文件;
a)因为这个文件的权限为"-rw-r--r--",即每个人都可以读取这个文件(因为每个用户都要从这个文件获取一些和自身有关的信 息)导致不安全;
将密码加密后保存在/etc/gshadow这个文件中,这个文件的权限为"----------",只有root才可以读取这个文件,提高安全性
b)peconv:将passwd当中的密码映射到了/etc/shadow,
c)pwunconv 取消映射,加密后的密文密码仍然放在/etc/passwd当中
d.第三列:用户的uid
e.第四列:用户的gid(主要组的id号,附加组的id号放在/etc/group文件当中)
f.第五列:描述用户的信息(非必需),没有固定的长度,可以用各种符号,但是不能有":"
g.第六列:用户的家目录
h.第七列:用户登陆的shell(如果是空,代表最传统的sh shell)
2)/etc/shadow:可以通过修改这个配置文件的内容进行相应的修改
(cat /etc/shadow |grep 关键字,只看包含这个关键字的行信息;date -s 'YYYY-mm-dd HH-MM-SS':修改软时间的格式)
(1)第一列:用户名
(2)第二列:密码位(格式:$加密类型$salt$密码加密后的字符串)
a.有密码:
a)加密类型:
b)salt:随机数,每次更改创建密码salt都会发生变化,从而导致加密后的密码字符串不一样
c)密码加密后的字符串:
b.其他情况:
a)*:密码被锁定,无法登陆
b)!!:密码已经过期
c)x:代表密码被映射到/etc/shadow文件;
(3)第三列:密码上次修改的日期(date +%s:从unix诞生日1970.1.1到现在经过了多少秒;$[]:代表运算) 计算方式是从unix 诞生日1970.1.1到上次修改密码经过了多少天
(4)第四列:密码的最小存活期
从上次修改密码的时间开始,在这个位指定的天数内不能修改密码
(5)第五列:密码的最大存活期
a.从上次修改密码的时间开始,经过这个位指定的天数之后,密码不可以使用
b.99999代表永久,Password expire和Password inactive均会显示"never"
(6)第六列:密码过期多少天之前提醒用户
(7)第七列:密码的失效时间
a.密码过期导致的账户过期
b.从上次修改密码开始,经过这个位指定的天数之后会出现账户过期,无法修改密码(只能通过root修改)
(8)第八列:密码的失效时间:
a.直接指定账户过期的时间
b.从1970.1.1开始,经过这个位指定的天数之后会出现账户过期,无法修改密码(只能通过root修改)
(9)第九列:保留列
3)/etc/group:
(1)第一列:组名字
(2)第二列:组的密码位,当用户需要临时获得某个主要组的身份的时候需要输入组密码
(3)第三列:gid
(4)第四列:组成员
a./etc/group主要存储附加组的内容
b.如果在创建用户的时候什么都不指定,会自动创建一个和该用户同名的主要组,该用户是这个主要组的成员;
但是在/etc/group文件中并不显示,因为/etc/group主要存储附加组内容;
在创建的时候,并没有任何其他用户将该用户看作附加组;
c.id;命令"group 用户",查看一个用户属于哪些附加组,哪个主要组;groupmems -l -g 查看一个附加组有哪些成员
4)/etc/gshadow:
(1)第一列:组名字
(2)第二列:组密码
(3)第三列:组的管理员
(4)第四列:组的成员(只有把这个组当成附加组的成员才会列出)
5.chage -l 用户名:
1)功能:
2)显示的内容:
(1)Last password change(密码上次修改时间):上次修改密码的具体的时间日期
(2)Password expires(密码过期时间):
a.经过/etc/shadow第三列指定的时间计算后的具体时间日期
b.这个日期是使用密码的最后期限,在这一天密码可以使用,下一天就不可以使用了
c.一旦过了这个时间,再次进入这个用户的时候会要求强制修改密码,不修改无法登陆
(3)Passwd inactive(密码的失效时间):经过/etc/shadow第七列指定的时间计算后的具体时间日期
(4)Account expires(账户过期时间):
a.经过/etc/shadow第八列指定的时间计算后的具体时间日期
b.在这个时间日期当天就会出现账户过期
(5)Minmum number of days between password change(最小存活期):同/etc/shadow的第四列
(6)Maximum number of days between password change(密码最大存活期):同/etc/shadow的第五列
(7)Number of days os warning before password change():同/etc/shadow的第六列
6.chage [选项 要修改成的参数]+用户:(推荐使用"chage+用户"命令,逐项修改)
1)-d LAST_DAY(0代表下次登陆强制修改密码)
2)-E --expiredate EXPIRE_DATE
3)-I --inactive INACTIVE
4)-m --mindays MIN_DAYS
5)-M --maxdays MAX_DAYS
6)-W --warndays WARN_DAYS
7)–l 显示密码策略
7.passwd修改密码:
1)语法和功能
(1)语法:passwd[+选项]+[用户名]
(2)功能:是将密码按一定的加密方式加密后,把加密的密文写入到/etc/shadow文件中
2)root和普通用户修改密码的区别:
(1)root用户修改密码不需要验证旧密码,直接输入新密码;普通用户需要验证旧密码,在输入新密码
(2)root可以任意创建密码;普通用户创建密码有复杂性要求
(3)修改密码和改谁的密码没有关系,和谁改有关系???
3)选项:
(1)只使用passwd:修改当前用户的密码;所有用户均可以
(2)passwd 用户名:修改指定用户的密码;只有root才可以在passwd后加参数,修改指定用户的密码,普通用户不可以
(3)-l+用户名:锁定指定用户
a.在锁定指定用户之后,会在/etc/shadow文件中的密码位的$最前面多出"!!",即使密码正确也无法登陆
b)在root下重新为用户修改密码后就会解除锁定
c)也可通过修改该配置文件修改
(4)-u:解锁指定用户
(5)-e+用户名:
a.强制用户下次登录修改密码
b.实质就是将/etc/shadow文件中的第三列置为0,代表着下次登陆必须修改密码
c.使用"chage -l 用户名"命令。前三行会显示为"password must be changed"
(6)n mindays: 指定最短使用期限
(7)-x maxdays:最大使用期限
(8)-w warndays:提前多少天开始警告
(9)-i inactivedays:非活动期限
(10)--stdin:
a.从标准输入接收用户密码,只需要设置一次即可,避免交互式
b.例:echo "密码" | passwd --stdin 用户名
三.用户和组管理命令
1.用户管理命令:1)创建用户
(1)语法:useradd+[选项+][用户名+]
(2)/etc/default/useradd:
a.这个文件是创建用户时候默认的配置文件
b.文件内容:
a)GROUP=100:表示使用useradd -N时默认使用的组为GIP为100的组
b)HOME=/home:自动创建家目录时,从哪个目录下创建与用户同名的家目录
c)INACTIVE=-1:用户是否设置密码过期后,多少天帐户过期,为-1时,不会触发帐户过期
d)EXPIRE=:是否指定一个帐户过期时间,为空表示帐户默认永不过期
e)SHELL=/bin/bash :使用useradd创建用户时,如不使用-s 指定则默认的用户shell为/bin/bash
f)SKEL=/etc/skel:
(a)自动创建家目录时,从哪个目录拷贝模板文件
(b)这是一个模板目录,包含以下的文件:
.
..
.bash_logout:退出时执行的脚本
.bash_profile:用户自定义的变量
.bashrc:用户自定义的变量
.bash_history:
.mozilla:火狐浏览器的。。。
当用户家目录创建之后就会把这些模板文件拷贝到相应的家目录之下,用户拥有一套自己的这些文件
g)CREATE_MAIL_SPOOL=yes:
(a)创建用户时是否在/var/spool/mail下为用户与用户同名的邮箱文件。
(b)每个用户都有一个邮箱文件,/var/mail
(c)创建邮箱文件的时候把邮箱文件也同时创建了
(d)收邮件从"/var/mail/用户名"这个文件中接收邮件
(e)创建用户的时候是否创建空的邮箱文件无所谓,接收邮件的时候还会自动创建
c.查看和修改/etc/default/useradd文件中的内容:
a)useradd -D:查看/etc/default/useradd文件中的内容(相当于"cat /etc/default/adduser")
b)useradd –D -s SHELL:指定
c)useradd –D –b BASE_DIR:
d)useradd –D –g GROUP:
d.自己创建家目录的过程:
(a)mkdir /home/家目录名字
(b)chown 用户名.用户名 /home/家目录名字/:修改家目录的所属人,所属组
(c)chmod 700 /home/家目录名字
(d)cp -r /etc/skel.[^.]* /home/家目录名字:递归拷贝的时候,由于在/etc/skel/目录下有"..",会把上一级目录/etc/中所有 文件拷贝过去,所以要使用通配符
(e)chown 用户名.用户名 /home/家目录名字/.*
(3)选项:
a.-u+用户的uid: 创建用户的时候指定用户的uid,
b.-o 配合-u使用:
a)不检查UID的唯一性,当创建的用户指定的uid已经存在的时候,仍然可以创建
b)Linux系统识别用户是按照编号识别,即使创建了指定的uid已经存在的用户时候,切换到该用户下,仍然显示已经存在的uid指定的用户名,因为在/etc/passwd文件中,Linux系统先识别排在前面的uid对应的用户名
c.-g+组名/gid+用户名(不推荐使用):
a)创建用户的时候指定用户所属主要组
b)主要组要事先存在
c)指定的可以为组名,也可以gid
d.-G+组1[,组2,组3...]:
a)创建用户的时候指定附加组
b)附加组需要事先存在
c)可以指定组名也可以指定gid
e.-c+"注释信息":用户的注释信息(可有可无)
f.-d+/home/家目录名字+用户名:
a)以指定的路径为家目录
b)创建用户的时默认家目录为"/home/用户名"这个目录
c)新创建的家目录的基名要事先不能存在
d)新创建的家目录的目录名事先要存在
g.-s+SHELL所在的路径+用户名:
a)指明用户的默认shell程序
b)在/etc/shells文件查看系统所拥有的shell
h.-N+用户名:
a)在创建用户的时候不创建于自己用户名同名的主要组,使用users组做主要组
b)通过查看"/etc/default/useradd"文件可以查看
i.-r+用户名:
a)创建系统用户 CentOS 6: ID<500,CentOS 7: ID<1000
b)一般使用"useradd -s -r /sbin/nologin 用户名"创建系统用户
2)更改用户的信息
(1)语法:usermod+选项+要修改为的内容+用户名
(2)选项:
a.-u+修改后的uid+用户名: 修改用户的uid为某一个值
b.-g+修改后的组名/gid+用户名: 修改用户的主要组
c.-G+组1[,组2,...]:设置用户的附加组,原来的附加组将会被覆盖;若保留原有的附加组,则要同时使用-a选项
d.-s+修改后的SHELL+"用户名":修改用户的shell
e.-c+修改后的描述信息+用户名:新的注释信息
f.-d HOME:
a)只是会更改/etc/passwd文件中的家目录信息,其他均不会更改,这样无法登陆
b)还要手工将原来家目录的内容移动到新的家目录中或者加上"-m"选项
g.-l+新用户名字+原用户名字:更改用户的名字
h.-L+用户名:同"password -l"的功能
i.-U: 同"password -u"的功能
j.-e+YYYY-MM-DD: 指明用户账号过期日期
k.-f INACTIVE: 设定非活动期限
3)删除用户
(1)语法:userdel+用户名
(2)用户被删除,家目录和邮箱依然被保存
(3)user -r 用户名:删除用户名和邮箱文件
4)id:显示用户的信息
(1)语法:id[+选项]+用户名
(2)选项:
a.id(从内存中读取):显示当前用户自己的信息(会比"id+用户名"多显示context信息)
包括:uid,gid,用户所有所属于的组(如果没有附加组,则只显示主要组)
b.id+用户名(从文件中读取):显示指定用户的信息(即使用户名是自己,也不会显示context信息)
c.-u+用户名: 显示uid
e.-g+用户名: 显示gid
f.-G+用户名: 显示用户所属的所有组的id(第一个为主组的id)
g.-n: 显示名称,需配合ugG使用
5)su:切换用户
(1)su:直接切换为root
(2)su 用户名:完整的切换
(3)su - 用户名:不完整的切换
(4)su - 用户名 -c 要执行的命令:以指定用户的身份暂时执行一些命令,但是用户不会切换
(5)root su至其他用户无须密码;非root用户切换时需要密码
2.用户组的管理命令
1)创建组:
(1)语法:groupadd+[选项+]组名
(2)选项:
a.-g+gid+组名:创建指定gid的组(单纯的创建一个组,不区分主要组和附加组)
b.-r+gid+组名: 创建系统组:CentOS 6: id<500;CentOS 7: id<1000
2)组属性修改:groupmod
(1)语法:groupmod 选项 组名
(2)选项:
a.-n newname 组名 修改组名
b.-g newgid 组名 修改组id
2)删除组:groupdel 组名
3)gpasswd的使用
(1)更改组密码:gpasswd+组名+组密码
(2)newgrp+组名:
a.普通用户执行,非附加组成员的普通用户在正确输入组密码后可以使用该命令临时变更主要组
b.id查询显示当前已经临时变更主要组的用户的信息,因为这是从内存中读取的
c.id+用户名查询显示真正的用户的信息,因为这是从文件中读取的
d.此时进入的是一个子shell,一个新的环境,在这个子shell内主要组临时变更
e.如果是这个附加组的成员执行这条命令的时候,主要组也会临时变更,而成员的原来的主要组会变成附加组,但是不需要输 入密码
(3)其他用法:
a.gpasswd -a 用户 组名: 将用户添加至指定组中(只能一个一个加)
b.gpasswd -d 用户 组名: 从指定组中移除用户user(只能一个一个移除)
c.gpasswd -A 用户1[,用户2...]:
(a)设置有管理权限的用户列表
(b)可以添加多个管理员
(c)管理员可以更改组密码,单个添加和删除组中的用户
管理员可以执行的命令:gpasswd+组名+组密码
gpasswd-a+用户+组名
gpasswd-d+用户+组名
(d)管理员不属于他管理的组,没有组成员的权限
d.gpasswd -M 用户1 用户2 ......+组名:将多个用户加入一个组中(仅root执行)
e.gpasswd-M "" 组名:将这个组设置为空,即删除这个组中的所有的用户(仅root执行)
4)组属性修改:groupmems(只有root才可以执行)
(1)语法:groupmems 主选项 复选项
(2)使用方法:
a.groupmems -g 组名 -a:用户名 将某用户以附加组方式加入到某组当中
b.groupmems -g 组名 -d:用户名 将某用户从指定组当中踢出
c.groupmems -g 组名 -p:清空所有组成员
d.groupmems -g 组名 -l:查看指定组有哪些成员(仅显示附加组)
5)groups [用户名]... 查看用户所属组列表
(1)groups:当前用户属于哪一个组
(2)groups+用户名:查看指定用户属于哪一个组
四.理解并设置文件权限
1.修改文件的所有人和所属组1)修改文件的所有人:chown
(1)语法:chown [选项] [所有人][:/.][所属组+] 文件名1 [文件名2......]
(2)选项:chown+所有人+文件名1+[+文件名2+......]:
a.只修改文件的所有人
b.文件的所有人只有root才能更改
(3)chown+所属组+文件名1+[+文件名2+......]:
a.只修改文件的所属组
b.普通用户如果修改一个文件的所属组,则这个用户必须属于要修改成的那个组
(4)chown 所有人:/.所属组 文件名1 [文件名2+......]:同时修改文件的所有人和所属组
(5)-R: 递归修改
(6)chown [OPTION]... --reference=RFILE FILE...
2)修改文件的属组:chgrp
(1)语法:chgrp+[选项]+组名+文件名
(2)选项:chagrp+组名+文件名:
a.修改文件的所属组
b.文件的所属组只有root和文件的所有人才能更改
c.普通用户如果修改一个文件的所属组,则这个用户必须属于要修改成的那个组
d.-R 递归
e.chgrp [OPTION]... --reference=RFILE FILE...
2.文件的权限设置:
1)文件的权限主要针对三类对象进行定义:
(1)owner: 属主, u
(2)group: 属组, g
(3)other: 其他, o
2)每个文件针对每类访问者都定义了三种权限:
(1)r: Readable
(2)w: Writable
(3)x: eXcutable
3)文件和目录"r,w,x"的意义:
(1)文件:
a.当仅r权限作用在文件上的时候,用户可以读取该文件的内容:cat,less,more,head,tail
b.当仅w权限作用在文件上的时候,用户可以修改文件的内容:>>(不需要读的修改,一般日志可以用这个权限)
c.当仅x权限作用在文件上的时候,无作为.(因为要执行文件必须能够一行一行地读取文件并执行)
d.当rw权限作用在文件上的时候,用户即能读与能修改:cat,less,more,head,tail,vim,nano > >>
e.当rx权限作用在文件上的时候,用户可以执行该文件
f.当wx权限作用在文件上的时候,权限等同于仅w权限.
g.文件的常见权限是r-- rw- rwx
(2)目录:
a.当仅r权限作用在目录上的时候,用户只可以短列出目录下的文件名(ls)
b.当仅w权限作用在目录上的时候,无作为.
c.当仅x权限作用在目录上的时候,用户只可以进入该目录,并且在知道具体文件名且具有相关权限的情况下,可以访问子文件.
d.当rw权限作用在目录上的时候,权限等同于仅r权限
e.当rx权限作用在目录上的时候,用户进入,长列出.
f.当wx权限作用在目录上的时候,用户可以进入且可以创建及删除文件,但不能使用文件名通配符(因为通配需要r权限)
g.目录的常见权限r-x rwx
4)修改文件的权限:
(1)chmod [u][g][o]=[r][w][x] 文件名/目录名:设置文件或目录的权限
(2)chmod a+/-[u][g][o] 文件名/目录名:所有位加上或减去指定权限
(3)chmod xxx 文件名/目录名:
xxx:r->4;w->2;x->1
1->x;2->w;3->wx;4->r;5->rx;6->rw;7->rwx
(4)chmod -R 文件名/目录名:递归设置权限
(5)chmod [OPTION]... --reference=RFILE FILE...:参考RFILE文件的权限,将FILE的修改为同RFILE
(6)chmod X 文件名/目录名X:只给目录及已有部分x权限的文件加上x权限,不给三个权限位完全没有x的文件加x
五.默认权限
六.特殊权限
1.SUID, SGID, Sticky
1)前提:
a.三种常用权限:r, w, x;所有人,所属组,其它
b.安全上下文的进一步分析:
a)进程有属主和属组;文件有属主和属组
b)任何一个可执行文件能不能启动为进程,取决进程的发起者对程序文件是否拥有执行权限
c)当一个可执行文件启动为进程之后,其进程的所有人为进程的发起者,进程的所属组为进程的发起者所属的组
d)当一个进程访问文件时候的权限,取决于进程的发起者
(a)如果进程的发起者是文件的所有人:则应用文件所有人权限
(b)如果进程的发起者在文件的所属组内;则应用文件所属组权限
(c)如果进程的发起者既不是文件的所有人,也不在文件所属组内,应用文件的“其它”权限
2)可执行文件上SUID权限:
(1)功能:
a.当对一个可执行的二进制文件作用了suid权限之后,任何人在执行该二进制文件时临时拥有其所属人的权限
b.当一个可执行的二进制文件启动为进程之后,其进程的所有人为原文件的所有人
c.SUID只对二进制可执行程序有效:
(a)因为二进制文件无法更改内容,所有的二进制文件不能再回到源代码
(b)如果要修改java,C等语言写的程序,需要修改源代码,重新编译后生成新的文件,新的文件与原文件并没有任何关系
(c)解释型语言:shell,Python等语言写的脚本不需要编译,直接可以执行
d.SUID设置在目录上无意义,目录不是二进制文件
f.在文件的所有人权限的x位上,用"s"替代
(2)权限设定:
a.chmod u+s/4xxx 文件名
b.chmod u-s/0xxx 文件名????
3)可执行文件上SGID权限:
(1)功能:
a.当SGID权限作用在可执行的二进制文件上的时候
(a)当对一个可执行的二进制文件作用了SGID权限之后,任何人在执行该二进制文件时临时拥有其所属组的权限
(b)当一个可执行的二进制文件启动为进程之后,其进程的所属组为原文件的所属组
(c)SGID只对二进制可执行程序文件有效:
因为二进制文件无法更改内容,所有的二进制文件不能再回到源代码
如果要修改java,C等语言写的程序,需要修改源代码,重新编译后生成新的文件,新的文件与原文件并没有任何关系
解释型语言:shell,Python等语言写的脚本不需要编译,直接可以执行
(d)在文件的所属组权限的x位上,用"s"替代
b.当SGID作用在目录上的时候
(a)当对于一个目录作用了SGID权限之后,任何人在该目录下创建的文件的所属组与该目录的所属组相同
(b)当对于一个目录作用了SGID权限之后,任何人在该目录下创建的目录的所属组与该目录的所属组相同,而且该目录依然拥有SGID权限
(c)用户要对 这个目录有"w"权限
(d)在目录的所属组权限的x位上,用"s"替代
(2)权限设置:
a.chmod g+s/2xxx 文件名2774
b.chmod g-s/0xxx 文件名
4)Sticky权限:
(1)功能:
a.当对于一个目录作用了sticky权限之后,该目录下的文件仅其文件的所属人,或目录的所属人及root才能删除
b.目录的所有人可以删除的原因:因为目录的所有人可以任意修改目录或者目录下文件的权限
c.Operation not permitted:操作不配允许,操作问题
d.Permission denied:权限不被允许,权限的问题
(2)权限设定
a.chmod o+t/1xxx 文件名
b.chmod o-t/0xxx 文件名
5)多种权限综合设定:
(1)即有SUID又有SGID:6xxx
(2)即有SUID又有Sticky:5xxx
(3)即有SGID又有Sticky:3xxx
(4)全有7xxx
6)注意:权限位原本有x的,加上特殊权限后,s或t显示为小写,原本无x,s或t显示为大写。
2.设定文件特定属性
1)chattr+i+文件:
(1)不能删除文件,改名文件,更改文件内容(包括root也不可以执行,但是root可以更改此权限)
(2)执行删除,改名,更改文件内容的操作时会出"Operation not permitted"
(3)主要是防止误操作
2)chattr+a+文件:只能向文件中追加内容
3)lsattr:显示特定文件的属性
七.ACL
1.ACL(Access Control List):1)实现灵活的权限管理
2)除了文件的所有者,所属组和其它人,可以对更多的用户设置特定的权限
3)CentOS7 默认创建的xfs和ext4文件系统具有ACL功能
CentOS7之前版本,默认手工创建的ext4文件系统无ACL功能,需手动增加
4)新创建的分区无ACL,在新创建的分区中开启ACL的步骤
第一步:tune2fs -l dev/sda1 | grep option:查看sda1分区中有没有ACL
(tune2fs -l [文件系统名]:查看所有文件系统或指定的文件系统的所有信息)
第二步:fidsk -l :查看当前硬盘目录的分区表
第三步:fdisk /dev/sda:按步骤创建新的分区
n回车
+2G回车
w回车
第四步:lsblk:产看当前生效的分区表,内存系统加载的分区表,新创建的分区不会马上生效,所以在这张表表中看不到新创建的分区
第五步:partx -a /dev/sda:使分区生效,使内核强制读取分区表,使用"lsblk"命令后会看见新创建的分区
第六步:kfs.ext4 /dev/sda6:对sda6进行格式化
第七步:tune2fs –o acl /dev/sda6:在新创建的分区中手工开启ACL
第八步:tune2fs -l dev/sda6 | grep option:查看新创建的分区中有没有ACL
5)ACL生效顺序:所有者,自定义用户,自定义组,其他人
2.设置和查看ACL权限
1)查看ACL的权限:
(1)命令:getfacl 文件名/目录名:
(2)显示的内容
a.# file:文件名或目录名
b.# owner: 所有人
c.# group: 所属组
d.user::所有人原始权限
e.user:用户名:指定用户的ACL权限
f.group::所主组原始权限
g.group:组名:指定组的ACL权限
h.mask:
(a)当对一个文件或者目录为多个用户或组设置ACL权限的时候,mask是上限权限,超过这个上限权限的用户或组的权限只有 低于或等于mask的权限生效
(b)mask的上限权限是实时刷新的
(c)#effective:在使用getfacl命令后,有"#effective"的一行是满足mask上限权限的生效的权限
i.other::其他人原始权限
(3)为文件或者目录设置ACL权限后,使用"ls -a"命令查询后,会在权限位的最后多出一个"+"
(4)为文件或者目录设置ACL权限后,再修改文件或目录的普通组权限,就是修改mask的权限
(5)owner > acl user > group/acl group > other(group的权限和ACL group的权限权限多的优先级高)
(6)一个文件或目录会有多个用户或组的ACL权限
(7)设置ACL权限之后需要重新登录才能生效
2)设置ACL权限
(1)setfacl -m u:用户名:[rwx] 文件或目录:为指定的用户设置对于指定文件的rwx权限
(2)setfacl -x u:用户名:[rwx] 文件或目录:
a.删除一个用户对于指定文件的rwx权限
b.只会在使用"getfacl"命令后显示的内容中,删除对应的ACL权限,在使用"ls -a"命令查询后,权限位最后"+"并不会消失,即不会完全删除ACL的属性
(3)setfacl -m g:组名:[rwx] 文件或目录:
a.为指定的组设置对于指定文件的rwx权限
b.一旦将一个文件或者目录设置ACL权限之后,推荐将这个文件或者目录的原始组设置为"root",因为为文件或者目录设置ACL权限后,不能再修改文件或目录的普通组权限
(4)setfacl -x g:用户名:[rwx] 文件或目录:
a.删除一个用户对于指定文件的ACL权限
b.只会在使用"getfacl"命令后显示的内容中,删除对应的ACL权限,在使用"ls -a"命令查询后,权限位最后"+"并不会消失,即不会完全删除ACL的属性
(5)setfacl -Rm g:组名:[rwx] 目录:为目录递归设置ACL权限
(6)setfacl -M ACL文件 文件或者目录:
a.通过ACL文件为目录或者用户设置多个ACL权限
b.ACL文件的内容:
(7)setfacl -b 文件或目录:完全删除ACL的属性结构信息
(8)setfacl -m m:[rwx] 文件或目录名:修改mask的上限权限