Linux 账号和权限管理

导图

 

 

Linux安全模型

Authentication:认证,验证用户身份

Authorization:授权,不同的用户设置不同权限

Accouting|Audition:审计

1.用户账户和组账户概述

Linux基于用户身份对资源访问进行控制

1.1用户账户类型

用户账户类型分为三类:

  • 超级用户:root用户是Linux操作系统中默认的超级用户账号,对本主机拥有最高的权限,系统中超级用户是唯一的。
  • 普通用户:由root用户或其他管理员用户创建,拥有的权限会受到限制,一般只在用户自己的宿主目录中拥有完整权限。
  • 程序用户:在安装Linux操作系统及部分应用程序时,会添加一些特定的低权限用户账号,这些用户一般不允许登录到系统,仅用于维持系统或某个程序的正常运行,如bin、daemon、ftp、mail等。
[root@localhost ~]# su suoluo     //超级账户符号后符号为#
[suoluo@localhost root]$            //普通账户符号位$

 

Linux中每个用户是通过 User Id (UID)来唯一标识的

新建用户 1-60000 自动分配 0-65535 端口号

用户 uid  
管理员root 0  
程序用户

1-499(centos 6 以前)

1-999(centos 7)

 
普通用户

500+(centos 6以前)

1000+(centos 7)

 
#查看当前用户
[root@localhost ~]# whoami
root
[root@localhost ~]# who
root     pts/1        2022-10-03 12:59 (192.168.61.1)
root     pts/2        2022-10-04 13:17 (192.168.61.1)
[root@localhost ~]# who -b
         系统引导 2022-10-02 16:56

#lastlog 查看所有用户的最近一次登录
#查看指定用户
[root@localhost ~]# lastlog -u root
用户名           端口     来自             最后登陆时间
root             pts/2    192.168.61.1     二 10月  4 13:17:38 +0800 2022

#查看近几天内的用户
[root@localhost ~]# lastlog -t 1   //1天
用户名           端口     来自             最后登陆时间
root             pts/2    192.168.61.1     二 10月  4 13:17:38 +0800 2022

补充命令:last

选项 作用
-x 显示系统开关机以及执行等级信息
-a 将登陆的ip显示在最后一行
-f 读取特定文件,可以选择 -f /var/log/btmp文件
-d 将ip地址转换为主机名
-n 设置列出名单的显示列数
-t 查看指定时间的用户登陆历史

 

超级用户:root 用户是 Linux 操作系统中默认的超级用户账号,对本主机拥有至高 无上的权限,类似于 Windows 操作系统中的 Administrator 用户。只有当进行系统 管理、维护任务时,才建议使用 root 用户登录系统,日常事务处理建议只使用普通用户账号。

普通用户:账号需要由 root 用户或其他管理员用户创建,拥有的权限受 到一定限制,处理问题受到限制,一般只在用户自己的宿主目录中拥有完整权限。

程序用户:在安装 Linux 操作系统及部分应用程序时,会添加一些特定的低权限用户账号,这些用户一般不允许登录到系统,而仅用于维持系统或某个程序的正常运 行,如 bin、daemon、ftp、mail 等,以后实验中会经常遇到,先了解下即可。

 

1.2组账户

组账户:将多个用户集合起来,统一分配某种相同的权限(开通或关闭)

组账户分为:基本组(私有组)附件组(公共组)

基本组有且只有一个,附加组可有可无可多个。

基本组:1. 建立账户时,若没有指定账户所属的组,系统会建立一个和用户名相同的组,这个组就是私有组,这个组默认只容纳了一个用户;

               2. 在用户所属组中的第一个组称为基本组,基本组在 /etc/passwd 文件中指定。

附加组:除了第一个组外的其他组为附加组或公共组,附加组在 /etc/group 文件中指定。

passwd:保存账户文件
shadow:影子文件,保存密码文件

#账户信息字段含义
#所有用户都能访问,只有root用户才能修改
[root@localhost ~]# head -2 /etc/passwd    //查看passwd开头两个账户
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin

#系统中新增的用户账户信息都保存到passwd文件的末尾,并且用 : 分隔配置字段
#第一字段:root,用户账户名,也是登陆系统时的识别名称
#第二字段:x,经过加密的用户密码字串,或者密码占位符“x”。
#第三字段:用户账户的uid号 , 0代表管理员(linux默认超级用户)
#第四字段:所属基本组账户的GID号
#第五字段:用户全名,可以填写用户相关的信息说明
#第六字段:宿主目录,该用户登陆后所在的默认工作目录
#第七字段:登陆shell等信息,用户登陆完成后默认使用的shell


#密码文件的字段含义
#只有root账户能够读取文件内容,不允许直接编辑内容
[root@localhost ~]# head -2 /etc/shadow
root:$6$yyZahmO---::0:99999:7:::
bin:*:17110:0:99999:7:::

#第一字段:账户名称
#第二字段:加密的字符串信息,当位*或者!!时表示该用户不能登陆,该字段为空时,无需密码登陆
#第三字段:上次修改密码的时间,自1970-1-1算起到最近修改的时间
#第四字段:密码的最短有效期,本次改密后,至少过多少天再改密,默认0不进行限制
#第五字段:密码的最长有效期
#第六字段:提前多少天提醒用户口令过期,默认值7天
#第七字段:在密码过期多少天后禁止此用户
#第八字段:账号失效时间,指定用户作废的天数
#第九字段:保留字段,无特定用途

 

1.3ID

1.3.1 UID(User IDentity,用户标识号):Linux 操作系统中的每一个用户账号都有一个数字形式的身份标记,UID 号应该是唯一的。

root 用户账号的 UID 号为固定值 0;

centos 6的UID  1-499留给程序用户,500-60000分配给普通用户使用;

centos 7的UID  1-999留给程序用户,1000-60000分配给普通用户使用;

 

1.3.2 GID(Group IDentify,组标识号):与 UID 类似,每一个组账号也有一个数字形式的身份标记

root 组账号的 GID 号为固定值 0;

 

1.3.3 用户账户和组账户的关系

用户 是员工 组 是职位

员工 可以兼职多个岗位

主要组(基本组):有且唯一

附加组:可有可无可多个

1.4用户账户管理

1.4.1用户账户文件的位置

/etc/passwd   //存放账户
/etc/shadow   //存放密码

 

1.4.2 添加用户

格式:

useradd    [选项]    用户名

选项:

选项 作用

-u

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

-t

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

-e

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

-g

指定用户的基本组名(或使用 GID 号)

-G

指定用户的附加组名(或使用 GID 号)

-M

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

-s

指定用户的登录 Shell /sbin/nologin
添加用户:查看是否在 passwd和shadow文件中生成信息
[root@localhost ~]# useradd 111
[root@localhost ~]# id 111
uid=1001(111) gid=1001(111) 组=1001(111)

[root@localhost ~]# cat /etc/passwd |grep 111  //查看并过滤111
[root@localhost ~]# tail -1 /etc/passwd   //新建一般用户在最后一行 ,查看是否添加
111:x:1001:1001::/home/111:/bin/bash

[root@localhost ~]# tail -1 /etc/shadow
111:!!:19269:0:99999:7:::

 

1.4.3删除账户

格式:

userdel   [选项]    用户名

选项:

选项 作用
-r 将宿主目录一起删除
#删除用户
[root@localhost ~]# userdel -r 111   //将宿主目录一起删除
[root@localhost ~]# id 111          //查看是否删除成功
id: 111: no such user

[root@localhost ~]# cd /home/     
[root@localhost home]# ls
suoluo

 

1.4.4修改账户(修改属性)

格式:

usermod  [选项]   用户名

选项:

选项 功能
-l 更改用户账号的登陆名称(login name)
-L 锁定用户账户
-u 修改用户的UID号
-U 解锁用户账户
-d 修改用户的宿主目录位置
-e 修改用户账户的失效使时间,可用yyyy-mm-dd的时间格式
-g 修改用户的基本组名  (或使用GID号)
-G 修改用户的附加组名(或使用GID号)
-s 指定用户的登陆shell

1.4.5密码管理

为用户账户设置密码

格式:

passwd    [选项]    用户名  

选项:

选项 作用
-d 清空指用户的密码,仅使用用户名就可登陆系统
-l 锁定用户帐户
-S 查看用户账户的状态(是否被锁定)
-u 解锁用户账户

1.4.6用户账户的初始配置文件

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

~/ .bash_profile

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

~/.bashrc

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

~/.bash_logout

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

/etc/bashrc

 

1.5组账户账号管理

1.5.1组账户文件位置

/etc/group      //保存组帐号基本信息
/etc/gshadow    //保存组帐号的密码信息,基本不使用

 

1.5.2添加组

格式:

groupadd     [选项]     组名

选项:

选项 作用
-g 指定组id(GID)

 

1.5.3删除组

格式:

groupdel     组名

 

1.5.4管理组

格式:

gpasswd   [选项]   组名

选项:

选项 作用
-a 向组内添加一个用户
-d 从组内删除一个用户
-M 定义组成员列表,用逗号分隔

 

 

1.5.5查询

1.finger

查询用户账户的详细信息

格式:

finger  用户名

[root@localhost /]# finger suoluo
bash: finger: 未找到命令...
[root@localhost /]# yum install finger -y


[root@localhost /]# finger suoluo
Login: suoluo                     Name: suoluo
Directory: /home/suoluo                 Shell: /bin/bash
Last login 二 10月  4 16:19 (CST) on pts/2
No mail.
No Plan.

 

2.w

查询已登录到主机的用户信息

格式:

w   [选项]    用户名

选项 作用
-h 不显示输出信息格式
-l 用长格式输出
-s 用短格式输出,不显示登陆时间,JCPU和PCUP时间
-V 显示版本信息
[root@localhost /]# w  //显示当前登陆用户
 15:29:14 up 1 day,  9:02,  1 user,  load average: 0.00, 0.01, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    192.168.61.1     12:19    2.00s  0.06s  0.02s w

[root@localhost /]# w -V root  //查看版本信息
w from procps-ng 3.3.10

 

3.who

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

who 命令默认是通过 /var/run/utmp 文件来获取登陆用户信息,但如果通过 file 指定另一个文件,则 who 命令将不再默认读取 /var/run/utmp 文件,而是读取该指定文件来获取信息

格式:

who    [选项]    [file]

选项:

选项含义
-a 列出所有信息,相当于所有选项
-b 列出系统最近启动的时间日期
-l 列出所有可登陆的终端信息
-m 仅列出关于当前终端的信息,who -m 命令等同于 who am i
-q 列出在本地系统上的用户和用户数的清单
-r 显示当前系统的运行级别
-s 仅显示名称、线路和时间字段信息,这是 who 命令的默认选项
-u 显示当前每个用户的用户名、登陆终端、登陆时间、线路活动和进程标识
-T 或 -w 显示 tty 终端的状态,“+”表示对任何人可写,“-”表示仅对 root 用户或所有者可写,“?”表示遇到线路故障

 

4.user

[root@localhost /]# users   //查看用户
root

 

 

2.文件/目录的权限和归属

① 访问权限
 读取r    (数字4表示): 允许查看文件内容、显示目录列表

 写入w   (数字2表示): 允许修改文件内容,允许在目录中新建、移动、删除文件或子目录

 可执行x  (数字1表示): 允许运行程序、切换目录

② 归属(所有权)
属主: 拥有该文件或目录的用户帐号

属组: 拥有该文件或目录的组帐号

文件的权限
[root@localhost /]# cd /data
[root@localhost data]# touch 123
[root@localhost data]# ll
总用量 0
-rw-r--r--. 1 root root 0 10月  5 19:30 123

 

2.1chmod

模式法:

chmod  (所有者,所属组,其他)   操作(+ - =)    权限      文件

谁:u,g,o,a

操作:+,-,=

权限:r,w,x(普通权限对root无效)

数字法:

用数字表达权限

r对应4

w对应2

x对应1

u  //表示用户
g  //表示用户组
o  //表示其它
a  //表示所有

 

2.2umask

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

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

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

非特权用户umask默认是 002

root的umask 默认是 022

 

2.3三种特殊权限

#suid
[root@localhost aa]#which passwd 
/usr/bin/passwd
[root@localhost aa]#ll /usr/bin/passwd 
#此处s表示当使用这个命令程序时,把当前用户当成文件的所属主
-rwsr-xr-x. 1 root root 27832 6月  10 2014 /usr/bin/passwd
[root@localhost aa]#which vim
/usr/bin/vim
[root@localhost aa]#chmod u+s /usr/bin/vim
#给vim加上suid权限,代表所有用户可以使用vim打开并编辑所有文件
[root@localhost aa]#ll /usr/bin/vim
-rwsr-xr-x. 1 root root 2289640 8月   2 2017 /usr/bin/vim


#SGID
[root@localhost aa]#chmod g+s /usr/bin/vim
[root@localhost aa]#ll /usr/bin/vim
-rwxr-sr-x. 1 root root 2289640 8月   2 2017 /usr/bin/vim

# Sticky 位
#具有写权限的目录通常用户可以删除该目录中的任何文件,无论该文件的权限或拥有权
#在目录设置Sticky 位,只有文件的所有者或root可以删除该文件
#sticky 设置在文件上无意义
#Sticky权限设定:
chmod o+t DIR...
chmod o-t DIR..
[root@localhost aa]#chmod o+t /opt/aa
# 添加Sticky 位
[root@localhost opt]#chmod o-t /opt/aa 
#减少Sticky 位

 

3.特殊权限

访问控制列表 ACL

ACL:Access Control List,实现灵活的权限管理

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

CentOS7 默认创建的xfs和ext4文件系统具有ACL功能

CentOS7 之前版本,默认手工创建的ext4文件系统无ACL功能,需手动增加

用法: 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              显示本帮助信息

 

4.总结:

学习对用户账户和组账户的管理(增删改查)

学习对文件或目录权限的管理

 

 

posted @ 2022-10-05 19:55  索罗大魔王  阅读(197)  评论(0编辑  收藏  举报