用户身份与文件权限


 



管理员UID为0:系统的管理员用户。

系统用户UID为1~999:Linux系统为了避免因某个服务程序出现漏洞而被黑客提权至整台服务器,默认服务程序会由独立的系统用户负责运行,进而有效控制被破坏范围。

普通用户UID从1000开始:是由管理员创建的用于日常工作的用户。

 

通过使用用户组号码(GID,Group IDentification),可以把多个用户加入到同一个组中,从而方便为组中的用户统一规划权限或指定任务(在/etc/group里查看)

 



另外,在Linux系统中创建每个用户时,将自动创建一个与其同名的基本用户组,而且这个基本用户组只有该用户一个人。如果该用户以后被归纳到其他用户组,则这个其他用户组称之为扩展用户组。一个用户只有一个基本用户组,但是可以有多个扩展用户组,从而满足日常的工作需要。




Tips



基本用户组就像是原生家庭,是在创建账号(出生)时就自动生成的;而扩展用户组则像工作单位,为了完成工作,需要加入到各个不同的群体中,这是需要手动添加的。

命令

id命令用于显示用户的详细信息,语法格式为“id用户名”

useradd命令用于创建新的用户账户,语法格式为“useradd [参数] 用户名”。



 

 useradd命令中的参数以及作用


参数

作用

-d

指定用户的家目录(默认为/home/username)

-e

账户的到期时间,格式为YYYY-MM-DD.

-u

指定该用户的默认UID

-g

指定一个初始的用户基本组(必须已存在)

-G

指定一个或多个扩展用户组

-N

不创建与用户同名的基本用户组

-s

指定该用户的默认Shell解释器

 


groupadd命令 用于创建新的用户组,语法格式为“groupadd [参数] 群组名”。


 

usermod命令用于修改用户的属性,语法格式为“usermod [参数] 用户名”

 



 usermod命令中的参数以及作用

参数

作用

-c

填写用户账户的备注信息

-d -m

参数-m与参数-d连用,可重新指定用户的家目录并自动把旧的数据转移过去

-e

账户的到期时间,格式为YYYY-MM-DD

-g

变更所属用户组

-G

变更扩展用户组

-L

锁定用户禁止其登录系统

-U

解锁用户,允许其登录系统

-s

变更默认终端

-u

修改用户的UID

 

passwd命令用于修改用户的密码、过期时间等信息


参数

作用

-l

锁定用户,禁止其登录

-u

解除锁定,允许用户登录

--stdin

允许通过标准输入修改用户密码,如echo "NewPassWord" | passwd --stdin Username


serdel命令用于删除已有的用户账户


 


在执行删除操作时,该用户的家目录默认会保留下来,此时可以使用-r参数将其删除


参数

作用

-f

强制删除用户

-r

同时删除用户及用户家目录

 



 



文件权限(一般、特殊、隐藏)与归属


 

可读(r)、可写(w)、可执行(x)等权限。对于一般文件来说,“可读”表示能够读取文件的实际内容;“可写”表示能够编辑、新增、修改、删除文件的实际内容;“可执行”则表示能够运行一个​​脚本​​程序。但是,对于目录文件来说,“可读”表示能够读取目录内的文件列表;“可写”表示能够在目录内新增、删除、重命名文件;而“可执行”则表示能够进入该目录


linux学习笔记之用户身份与权限_linux

 

    文件权限的字符与数字表示

linux学习笔记之用户身份与权限_文件权限_02

 

若某个文件的权限为7,则代表可读、可写、可执行(4+2+1)

 


减号是占位符,代表这里没有权限,在数字表示法中用0表示


 


 


常见的文件类型包括普通文件(-)、目录文件(d)、链接文件(l)、管道文件(p)、块设备文件(b)以及字符设备文件(c)


 



文件的特殊权限


 

SUID是一种对二进制程序进行设置的特殊权限,能够让二进制程序的执行者临时拥有所有者的权限(仅对拥有执行权限的二进制程序有效

[root@localhost ~]# ll /usr/bin/passwd

-rwsr-xr-x. 1 root root 33600 Apr 7 2020 /usr/bin/passwd


SGID特殊权限有两种应用场景:当对二进制程序进行设置时,能够让执行者临时获取文件所属组的权限;当对目录进行设置时,则是让目录内新创建的文件自动继承该目录原有用户组的名称


 


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


[root@localhost ~]# ll -d /tmp
drwxrwxrwt. 10 root root 4096 Oct 22 19:45 /tmp


原有x执行权限,特殊权限是小写,没有则是大写,如s/S, t/T


 



      SUID、SGID、SBIT特殊权限的设置参数

参数

作用

u+s

设置SUID权限

u-s

取消SUID权限

g+s

设置SGID权限

g-s

取消SGID权限

o+t

设置SBIT权限

o-t

取消SBIT权限

其实,SUID、SGID与SBIT也有对应的数字表示法,分别为4、2、1。也就是说777还不是最大权限,最大权限应该是7777,其中第1个数字代表的是特殊权限位

[root@localhost ~]# chmod 7534 anaconda-ks.cfg

[root@localhost ~]# ll anaconda-ks.cfg

-r-s-wsr-T. 1 root root 1037 Aug 20 15:45 anaconda-ks.cfg


更改权限和归属命令


chmod  权限 文件    (权限用数字,或u/g/o/a  +/-  r/w/x)


chown  所有者:所属组  文件


或chown  所有者.所属组  文件


针对目录要加-R参数,不加子文件不会变


 


 



文件的隐藏属性

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

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

参数

作用

i

无法对文件进行修改;若对目录设置了该参数,则仅能修改其中的子文件内容而不能新建或删除文件

a


仅允许补充(追加)内容,无法覆盖/删除内容(Append Only)



s

     彻底从硬盘中删除,不可恢复(用0填充原文件所在硬盘区域),xfs文件系统不支持

[root@localhost ~]# chattr +i anaconda-ks.cfg

[root@localhost ~]# lsattr anaconda-ks.cfg

----i--------------- anaconda-ks.cfg

 


lsattr命令用于查看文件的隐藏权限




文件访问控制列表



setfacl命令用于管理文件的ACL权限规则,英文全称为“set files ACL”,语法格式为“setfacl [参数] 文件名称”。

 

 setfacl命令中的参数以及作用

参数

作用

-m

修改权限

-M

从文件中读取权限

-x

删除某个权限

-b

删除全部权限

-R

递归子目录

 

ACL权限提供的是在所有者、所属组、其他人的读/写/执行权限之外的特殊权限控制。使用setfacl命令可以针对单一用户或用户组、单一文件或目录来进行读/写/执行权限的控制。其中,针对目录文件需要使用-R递归参数;针对普通文件则使用-m参数;如果想要删除某个文件的ACL,则可以使用-b参数,要删除某一条指定的权限,就用-x参数

[root@linuxprobe ~]# setfacl -Rm u:linuxprobe:rwx /root

                                                             u用户(g组):用户名:权限        文件


[root@linuxprobe ~]# setfacl -x g:linuxprobe /etc/fstab


常用的ls命令是看不到ACL信息的,但是却可以看到文件权限的最后一个点(.)变成了加号(+),这就意味着该文件已经设置了ACL


 


getfacl命令用于查看文件的ACL权限规则,英文全称为“get files ACL”,语法格式为“getfacl [参数] 文件名称”


 


在备份/home目录上的ACL权限时,可使用-R递归参数,这样不仅能够把目录本身的权限进行备份,还能将里面的文件权限也自动备份



[root@linuxprobe /]# getfacl -R home > backup.acl

ACL权限的恢复也很简单,使用的是--restore参数


[root@linuxprobe /]# setfacl --restore backup.acl

linux学习笔记之用户身份与权限_linux_03