用户,组,文件权限的管理

时间:2022-10-02 20:57:01

 概述    

      用户一般来说是指系统的使用者,使用者可以使用这些名称来登录计算机,除了使用者之外,一些系统服务也需要含有部分特权的用户账户运行,因此出于安全考虑,用户管理应运而生,它加以明确限制各个用户账户的权限,root在计算机中拥有至高的特权,所以一般只作管理用,非特权用户可以通过su或sudo程序来临时获得特权。

      Linux系统通过用户和用户组实现访问控制,包括对文件访问,设备使用的控制。

      1人可以拥有很多账户,只是彼此名称不同,比如root名称已经占用就不能再用了,此外,任意用户可能从属某个用户组,此用户可以加入某些已经存在的组来获得该组的权限。

      每1个文件的属性中都有一个文件拥有者和所属组。此外,还有三种类型的访问权限:读(read),写(write),执行(execute),我们可以针对文件的属主,属组设置相应的访问权限。再次,我们可以通过ls | stat命令查询文件的属主,属组和权限。

用户,组,文件权限的管理

用户,组,文件权限的管理

一、用户账户

1、用户的分类

Linux用户分为三种:超级用户,普通用户,虚拟用户

超级用户:root 拥有对系统的最高管理权限,UID=0

普通用户:系统用户UID范围:1-999(centos7/8)   1-499(centos6)

                本地用户UID范围:1000-60000(centos7/8)    500-60000(centos6)

UID:每个用户的身份标识,类似于每个人的身份证号码

虚拟用户(伪用户):一般不用来登录系统,它主要是用于维持某个服务的正常运行,如:ftp,apache

用户基本信息保存位置:/etc/passwd

用户和组的关系:

一对一:一个用户可以存在一个组中

一对多:一个用户可以存在多个组中

多对一:多个用户可以存在一个组中

多对多:多个用户可以存在多个组中

用户,组,文件权限的管理

2、配置文件

名称

文件路径

说明

用户配置文件

/etc/passwd

记录了每个用户的一些基本属性,并且对所以用户可读,每一行记录对应一个用户

用户组文件

/etc/group

用户组信息存放文件,并且组名不能重复

用户密码信息

/etc/shadow

因为passwd文件对所有用户可读,为安全起见把密码从passwd中分离出来放入这个单独的文件,该文件只有root用户拥有读权限,保证密码安全性

二、用户管理

1、用户命令

1.useradd命令

命令格式:useradd  [选项]  用户名

选项:

-u 指定用户的UID号,要求该UID号未被其他用户使用

-d 指定用户的宿主目录位置(与-M一起使用时,不生效)

-e 指定用户的账户失效时间,可使用YYYY-MM-DD的日期格式

-g 指定用户的基本组名(或使用GID号),该组必须是存在的,如果没有设置该选项,useradd会根据/etc/login.defs文件中的USERGROUPS_ENAB环境变量进行设置。默认USERGROUPS_ENAB yes,会用和用户相同的名字创建群组。GID等于UID

-G 指定用户的附加组名(或使用GID号),使用逗号分隔多个组,不要添加空格,如果不设置,用户仅仅加入初始组。(一个用户只允许有一个主组,可以有多个附加组)

-M 不建立宿主目录,即使/etc/login.defs系统配置中已设定要建立宿主目录

-s 指定用户的登录Shell /sbin/nologin

[root@localhost ~]# useradd harry
[root@localhost ~]# tail -1 /etc/passwd
harry:x:1001:1001::/home/harry:/bin/bash

用户,组,文件权限的管理

harry:x:1001:1001::/home/harry:/bin/bash

harry

用户名

x

密码占位符

1001

用户的UID,使用正整数表示,范围可以是0-65535

1001

用户所属组的GID

用户描述信息

对用户的功能或其他来进行简要的描述

/home/harry

用户家目录

/bin/bash

用户登录系统后使用的shell

-u 指定UID

[root@localhost ~]# useradd -u 1100 may
[root@localhost ~]# id may
uid=1100(may) gid=1100(may) groups=1100(may)

-d 指定家目录

[root@localhost ~]# useradd -d /opt/may may
[root@localhost ~]# id may
uid=1001(may) gid=1001(may) groups=1001(may)
[root@localhost ~]# ls /home
zhangsan
[root@localhost ~]# ls /opt
may rh

-g 指定基本组

[root@localhost ~]# useradd -g zhangsan mayday
[root@localhost ~]# id mayday
uid=1002(mayday) gid=1000(zhangsan) groups=1000(zhangsan)
[root@localhost ~]#

-G 指定附加组

[root@localhost ~]# useradd -G zhangsan,may,root fbi
[root@localhost ~]# id fbi
uid=1003(fbi) gid=1003(fbi) groups=1003(fbi),0(root),1000(zhangsan),1001(may)

-M 不建立宿主目录

[root@localhost ~]# useradd -M fba
[root@localhost ~]# ls /home
fbi mayday zhangsan

-s 指定用户登录的shell

[root@localhost ~]# useradd -s /sbin/nologin fbb
[root@localhost ~]# tail -1 /etc/passwd
fbb:x:1005:1005::/home/fbb:/sbin/nologin

2.删除用户命令userdel

-r 将宿主目录一起删除

[root@localhost ~]# userdel -r fbi
[root@localhost ~]# ls /home
fbb mayday zhangsan

3.密码管理passwd命令

命令格式:passwd  [选项]......  用户名

-d 清空指定用户的密码,仅使用用户名即可登录系统

-l 锁定用户账户

-S 查看用户账户的状态(是否锁定)

-u 解锁用户账户

[root@localhost ~]# passwd mayday
Changing password for user mayday.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.

例:无交互设置密码

用户,组,文件权限的管理

2、用户文件位置

1./etc/passwd

存放保存用户名称,宿主目录,登录shell等基本信息

[root@localhost ~]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin

root:x:0:0:root:/root:/bin/bash

root

用户名称

:x

密码占位符

:0

UID

:0

GID

:root

备注信息,描述

:/root

家目录路径

:/bin/bash

使用的shell

2./etc/shadow

存放保存密码

用户,组,文件权限的管理

1:用户名:root

2:密码, 当为*或!!时表示用户不能登录到此系统,若该字段为空,则表示无需密码即可登录

3:上次修改密码时间,最后一次修改密码的时间,1970 年 01 月 01 日这是linux诞生的第一年已他作为元年开始

4:最小修改密码间隔时间,今天下一次间隔天数,才能修改,频繁修改,也就是说,该字段规定了从第3字段(最后一次修改密码的日期)起,多长时间之内不能修改密码。如果是0,则密码可以随时修改;如果是10,则代表密码修改后10天之内不能再次修改密码。此字段是为了针对某些人频繁更改账户密码而设计的安全性考虑

第五字段:密码有效期经常变更密码是个好习惯,为了强制要求用户变更密码,这个字段可以指定距离第 3 字段(最后一次更改密码)多长时间内需要再次变更密码,否则该账户密码进行过期阶段。该字段的默认值为 99999,也就是 273 年,可认为是永久生效。如果改为 90,则表示密码被修改 90 天之后必须再次修改,否则该用户即将过期。管理服务器时,通过这个字段强制用户定期修改密码。

第六字段:密码到期提醒(提示密码即将过期时间)7 密码将要过期的前7天会提醒你与第 5 字段相比较,当账户密码有效期快到时,系统会发出警告信息给此账户,提醒用户 "再过 n 天你的密码就要过期了,请尽快重新设置你的密码该字段的默认值是 7,也就是说,距离密码有效期的第 7 天开始,每次登录系统都会向该账户发出 "修改密码" 的警告信息。

第七字段:密码过期后的宽限天数 (密码过期后多少天禁用此用户) 90 这个 也称为“口令失效日”,简单理解就是,在密码过期后,用户如果还是没有修改密码,则在此字段规定的宽限天数内,用户还是可以登录系统的;如果过了宽限天数,系统将不再让此账户登陆,也不会提示账户过期,是完全禁用。比如说,此字段规定的宽限天数是 10,则代表密码过期 10 天后失效;如果是 0,则代表密码过期后立即失效;如果是 -1,则代表密码永远不会失效。

第八字段:账号失效时间同第 3 个字段一样,使用自 1970 年 1 月 1 日以来的总天数作为账户的失效时间。该字段表示,账号在此字段规定的时间之外,不论你的密码是否过期,都将无法使用!该字段通常被使用在具有收费服务的系统中。账号无法登录生命值

第九字段:保留字段收费内容

3.查看用户相关命令:

id 用户和组的信息

whoami 查看当前有效用户名

who 显示目前登入系统的用户信息

w 显示已经登录系统的用户列表

users 显示当前登录系统的所有用户的用户列表

3、修改用户信息

命令格式:usermod  [参数]  用户名

参数:

-u 修改UID

-d 修改宿主目录

-g 修改基本组      #只能有一个

-G 修改附加组      #可以有多个

-s 登录shell

-L 锁定用户账户

-U 解锁用户账户

-e 修改用户的账户失效时间,可以使用YYYY-MM-DD

4.用户账号的初始配置文件

用户宿主目录下的初始配置文件只对当前用户有效

~/ .bash_profile

#此文件中的命令将在该用户每次登录时被执行,他会设置一些环境变量,并且会调用该用户的~/.bashrc文件

~/.bashrc

#此文件中的命令将在该用户每次打开新的bash shell时(包括登录系统)被执行(登录 切换 新的bash环境)

~/.bash_logout

#此文件中的命令将在该用户每次退出时bash shell时使用

/etc/bashrc

三、组管理

1、组账号文件

/etc/group

保存组账号基本信息

/etc/gshadow

保存组账号的密码信息

2、添加组

groupadd命令

命令格式: groupadd [-g GID] 组账号名

[root@localhost aaa]# groupadd xiaoyu   #添加组账号
[root@localhost aaa]# tail -1 /etc/group
xiaoyu:x:1006:
[root@localhost aaa]# groupadd -g 77 xiaoyue #指定组ID
[root@localhost aaa]# tail -1 /etc/group
xiaoyue:x:77:

3、组内管理

gpasswd命令 -----添加,设置,删除组成员

-a 向组内添加一个用户

-d 从组内删除一个用户成员

-M 定义组成员列表,以逗号分隔

[root@localhost aaa]# gpasswd -a mayday xiaoyu  #组内加入新成员
Adding user mayday to group xiaoyu
[root@localhost aaa]# gpasswd -d mayday xiaoyu #删除成员mayday
Removing user mayday from group xiaoyu
[root@localhost aaa]# gpasswd -M mayday,fbb xiaoyu #在xiaoyu组加入
[root@localhost aaa]# tail -2 /etc/group mayday和fbb
xiaoyu:x:1006:mayday,fbb
xiaoyue:x:77:

groupdel命令:删除组账号

[root@localhost aaa]# groupdel xiaoyu

4、查询相关命令

1.finger命令查询用户账号的详细信息

命令格式:finger[用户名]

用户,组,文件权限的管理

2.w:查询已登录到主机的用户信息

命令格式:w [选项] [用户名]

-h 不显示输出信息的标题

-l 用长格式输出

-s 用短格式输出,不显示登录时间,JCPU和PCPU时间

-V 显示版本信息

用户,组,文件权限的管理

标题

含义

USER

登录到系统的用户

TTY

登录的终端

FROM

表示用户从哪里登录进来,一般显示远程登录主机的IP地址或者主机名

LOGIN@

用户登录的日期和时间

IDLE

表示某个程序上次从终端开始执行到现在所持续的时间

JCPU

和该终端连接的所有进程占用的CPU运算时间,这个时间例并不包括过去的后台作业时间,但是包括当前正在运行的后台作用所占用的时间

PCPU

当前进程所占用的CPU运算时间

WHAT

当前用户正在执行的进程名称和选项,换句话说,就是表示用户当前执行的是什么命令

3.who

who命令只能显示当前登录的用户信息,但无法知晓每个用户正在执行的命令

命令格式:who  [选项]  [file]

who命令默认是通过/var/run/utmp文件来获取登录用户信息,但如果通过file

指定另一个文件,则who命令将不再默认读取/var/run/utmp文件,而是读取该指定文件来获取信息

-a

列出所有信息,相当于所有选项

-b

列出系统最近启动的时间日期

-l

列出所有可登录的终端信息

-m

仅列出关于当前终端的信息,who -m 命令等于who am i

-q 

列出在本地系统上的用户和用户数的清单

-r

显示当前系统的运行级别

-s

仅显示名称,线路和时间字段信息,这是who命令的默认选项

-u

显示当前每个用户的用户名,登录终端,登录时间,线路活动和进程标识

-T或-w

显示tty终端的状态,+表示对任何人可写,-表示仅对root用户或所有者可写,?表示遇到线路故障

4.users

当前登录用户

[root@localhost aaa]# users
root root

四、文件的基本权限

1、权限的作用

通过对文件设定权限可以达到以下三种访问限制权限:

      只允许用户自己访问

      允许一个预先指定的用户组中的用户访问

      允许系统中的任何用户访问

2、查看权限

用户,组,文件权限的管理

-rw-r--r--. 1 root root 2269 Oct  1 11:23 /etc/passwd

1.文件权限基本解释:

-

rw-

r--

r--

root

root

Oct 1 11:23

/etc/passwd

文件类型

所有者的权限

所属组的权限

其他人的权限

所有者

所属组

最后修改时间

文件路径

注:文件类型可以为p,d,l,s,c,b,-

p表示管道文件

d表示目录文件

l表示符号链接文件

-表示普通文件

s表示套接字文件

c表示字符设备文件

b表示块设备文件

2.权限说明:

对文件来说:

r:读(cat)

w:写(vim , echo)

x:执行(运行命名或者脚本)

对目录来说:

r:读(看目录里面有什么--ls)

w:在目录里面建文件,删除,移动(touch,mkdir,rm,mv,cp)

x:进入目录(cd)目录一定拥有x权限,否则无法进入

3、文件拥有者

UGO:所有者-用户组-其他用户

所有者:创建文件的用户,这个用户拥有对它所创建文件的一切权限,所有者可以允许其所在的用户组可以访问所有者的文件

用户组:用户组是具有相同特征用户的逻辑集合,在组内的所有成员拥有这个组具有的权限

其他用户:系统内的其他所有者用户就是other用户

4、更改文件的属主和属组

chown:用来改变文件或目录的属主

chgrp:用来改变文件或目录的默认属组

如果要对目录进行操作,加参数-R

chown命令格式:

chown  user:group  file       例:chown may:mayday a.txt    把文件的属主和属组改为may,mayday

chown user file     例:chown  may  a.txt   把文件的属主改为may

chown :group file     例:chown  :mayday a.txt    把文件的属组改为mayday

chgrp   mayday  a.txt    把文件的属组改为mayday

5、修改权限

方法1:使用字符设定

chmod

作用:修改文件,目录的权限

命令格式:chmod  [对谁操作]  [操作符]  [赋予什么权限]  文件名

对谁操作:

-u 表示文件或目录的所有者

-g 表示文件或目录所属组

-o 表示其他用户

-a 表示所有用户

操作符:

+添加权限

-减少权限

=直接给定一个权限

权限:r   w   x

方法2:使用八进制0-7数字表示权限法

权限

二进制值

八进制值

描述

---

000

0

没有任何权限

--x

001

1

只有执行权限

-w-

010

2

只有写入权限

-wx

011

3

有写入和执行权限

r--

100

4

只有读取权限

r-x

101

5

有读取和执行权限

rw-

110

6

有读取和写入权限

rwx

111

7

有全部权限


用户,组,文件权限的管理

例1:

[root@localhost aaa]# touch aa.txt
[root@localhost aaa]# ll aa.txt
-rw-r--r--. 1 root root 0 Oct 2 02:38 aa.txt
[root@localhost aaa]# chmod 755 aa.txt
[root@localhost aaa]# ll aa.txt
-rwxr-xr-x. 1 root root 0 Oct 2 02:38 aa.txt

例2:执行cp /etc/issue  /data/dir/所需要的最小权限

执行过程

需要的权限

/bin/cp

需要x权限

/etc/

需要x权限

/etc/issue

需要r权限

/data

需要x权限

/data/dir

需要w,x权限

6、权限对文件和目录的影响

权限

对文件的影响

对目录的影响

r

可以读取文件的内容

可以列出目录的内容(文件名)

w

可以更改文件的内容

可以创建或删除目录中的任意文件

x

可以作为命令执行文件

可以访问目录的内容

7、umask值

umask 的值可以用来保留在创建文件权限

实现方式:

新建文件的默认权限: 666-umask,如果所得结果某位存在执行(奇数)权限,则将其权限+1,偶数不变

新建目录的默认权限: 777-umask

非特权用户umask默认是 002

root的umask 默认是 022

我们一般在/etc/profile、用户,组,文件权限的管理[HOME]/.profile中设置umask值,永久生效,编辑用户的配置文件vim .bash_profile

五、文件的特殊权限

文件的特殊权限:suid  sgid  sticky

1、SUID(set ui 设置用户ID):限定:只能设置在二进制可执行程序上面,对目录设置无效

功能:程序运行时的权限从执行者变更成程序所有者的权限

2、SGID:限定:既可以给二进制可执行程序设置,也可以对目录设置

功能:在设置了SGID权限的目录下建立文件时,新创建的文件所属组会继承上级目录的所属组

3、Stickybit:粘滞位权限是针对目录的,对文件无效,也叫防删除位

三个特殊权限对应的数值为:

SUID

SGID

Stickybit

u+s或u=4

g+s或g=2

o+t或o=1

例1:suid

用户,组,文件权限的管理

注:加上suid后在执行less命令的那一瞬间zhangsan用户拥有了文件所有者root的权限

例2:sgid

用户,组,文件权限的管理

注:把root用户创建的目录test加上sgid然后改变test的属组为bin,在test下创建一个cc.txt文件,可以看到文件的所属组为上级目录test的bin而不是root

例3:stickybit

用户,组,文件权限的管理

注:tmp目录设置的粘滞位,目录下创建的文件只有root,文件创建者,目录所有者才能删除,zhangsan用户无法删除

六、文件扩展权限ACL

扩展ACL:access control list

实现灵活的权限管理,除了文件的所有者,所属组和其它人,可以对更多的用户设置权限

用法: setfacl [-bkndRLP] { -m|-M|-x|-X ... } file ...

-m,       --modify-acl 更改文件的访问控制列表

-M,       --modify-file=file 从文件读取访问控制列表条目更改

-x,       --remove=acl 根据文件中访问控制列表移除条目

-X,       --remove-file=file 从文件读取访问控制列表条目并删除

-b,       --remove-all 删除所有扩展访问控制列表条目

-k,       --remove-default 移除默认访问控制列表

         --set=acl 设定替换当前的文件访问控制列表

         --set-file=file 从文件中读取访问控制列表条目设定

         --mask 重新计算有效权限掩码

-n,       --no-mask 不重新计算有效权限掩码

-d,       --default 应用到默认访问控制列表的操作

-R,       --recursive 递归操作子目录

-L,       --logical 依照系统逻辑,跟随符号链接

-P,       --physical 依照自然逻辑,不跟随符号链接

         --restore=file 恢复访问控制列表,和“getfacl -R”作用相反

         --test 测试模式,并不真正修改访问控制列表属性

-v,       --version           显示版本并退出

-h,       --help              显示本帮助信息

:设置只让用户zhangsan对文件a.txt,拥有rwx权限,zhangsan不属于a.txt的所属主,所属组,other的权限还是r--

[root@localhost opt]# touch a.txt
[root@localhost opt]# ll a.txt
-rw-r--r--. 1 root root 0 Oct 2 05:35 a.txt
[root@localhost opt]# setfacl -m u:zhangsan:rwx /opt/a.txt
[root@localhost opt]# getfacl /opt/a.txt
getfacl: Removing leading '/' from absolute path names
# file: opt/a.txt
# owner: root
# group: root
user::rw-
user:zhangsan:rwx
group::r--
mask::rwx
other::r--
[root@localhost opt]# ll a.txt
-rw-rwxr--+ 1 root root 0 Oct 2 05:35 a.txt