Linux系统之【虚拟机账号和权限管理】

238 阅读13分钟

1、用户账号和组账号概述

能不能打开文件和命令没有关系,和你的用户权限有关。
组账号:是方便操作,简化管理。

1.1 用户账号类型

分为三个:

  1. 超级管理员: 权限最高的用户 root
  2. 普通用户: 权限受到限制的用户 比如:lisi zhangsan
  3. 程序用户: 不是给人登录使用的,是给程序使用的

1.2 组账号

  • 基本组:所有用户都必须有一个基本组,有且只有一个
  • 附加组:附加组可有可无,也可以有多个附加组

1.3 uid和gid

uid:user identity ,用户的身份证号,可以重复。

gid:group identity ,用户组的身份证号

系统靠uid来区分用户身份的,用户的uid为0 就是超级管理员, 而不是因为用户账号叫root才是超级管理员。

uid的范围

uid的取值范围为:0-60000

uid的范围定义在此文件夹中: /etc/login.defs

分类centos7centos6
超级管理员00
普通用户1000开始500开始
程序用户1-9991-499

// 为什么要有程序用户?为了网络的安全性

1.4 用户账号管理

用户相关的文件

主要分为4个,前两个比较重要:

  • 用户信息文件: /etc/passwd
  • 用户密码文件: /etc/shadow
  • 组账户: /etc/group
  • 组密码: /etc/gshadow

1.4.1 passwd文件

/etc/passwd 这是文件夹

passwd 的中文意思虽然叫密码,但并不存储密码,存储的是用户信息。

root: x:0:0:root:/root:/bin/bash
  拆解(冒号隔开,共分为7段):
     root:用户的名字
     x   :密码占位符
     0   :uid
     0   :gid
     root:备注信息
     /root:家目录位置
     /bin/bash:登录时默认加载的shell类型
 man 5 passwd  # 可以查询该文件的信息
 man 1     是命令
 whoami    我是谁

1.4.2 shadow文件

位置: /etc/shadow 作用:存放密码,及密码策略(比如密码有效期)的文件。

image.png

上图共分为9段,下面为拆解:
    第一列:zhangsan   #用户名
    第二列:表示加密的密码    #第二列是!或 *    代表该用户不可以登录到系统中;如果为空,代表该用户密码可以直接登录。
    第三列:19818   上一次修改密码的时间  # 从1970-1-1开始计算,也就是linux诞生之日,一共是19818天。## 查询时间的命令:data -d ‘1970-1-1 19818 days’
    第四列:0   不限制下次修改密码的时间   如果该项为3 , 今天修改密码后,想再次修改密码,需要等到3天以后。
    第五列: 99999 ,密码有效期为99999天,约等于273年。# 如果设置的是3,代表3天后需要修改,否则无法登录
    第六列:7  # 密码到期前7天 会提醒密码即将到期,请修改密码。
    第七列:密码宽限时间 ,如果为3,表示密码有效期到期后,还可以最多使用3天。
    第八列:用户的失效时间     从1970-1-1   到失效时间,共经过了多少天。
    第九列:保留字段,暂未启用。

1.4.3 group文件

root: x:0:zhangsan # zhangsan是附加组。

2、命令

2.1 useradd

useradd 只能对新建用户,不适用于已有用户。

 命令语法:
     useradd  [选项] [用户名]
     # useradd有两个作用,一个是新建用户,还有一个是修改用户的属性信息

新建 添加用户:

  • 自动建立一个 同名的基本组
  • 自动建立一个同名的家目录,在/home下
选项备注说明
-u指定uid
-s指定登录的shell 类型
-M不建立家目录
-d指定家目录位置(可以是不存在的目录)
-e指定用户的账户失效时间,格式yy-mm-dd
-g指定用户的基本组名
-G指定用户的附加组名
-r随机生成 一个uid为1-999的用户,并且不建立家目录。
-c添加备注信息
-p密码

重要命令:

useradd -s /sbin/nologin    #不允许登录
useradd lisi -u 1111 -s /sbin/nologin -M    # 新建用户名称为lisi,uid为1111,不允许登录,不建立家目录

2.2 passwd

修改密码 这个passwd是命令,与上面提到的passwd文件不同, passwd文件与密码无关,但是passwd命令与密码有关。

命令语法:
    passwd 用户名
    #  如果不加用户名  就是修改当前用户的密码
选项备注说明
-d清空用户密码 #也就是在虚拟机中登录账户,不需要密码验证,不安全
-l锁定用户 无法登录 #锁定后,登录列表中,不会再显示该账号
-S(大写)如何查看用户 是否被锁定
-u(小写)解锁用户

小拓展:免交互设置密码

echo “123123” | passwd --stdin lisi

// 这是组合命令 一次性设置密码

2.3 usermod

已有用户的属性 进行修改,用usermod命令。

选项备注说明
-l更改用户的名称 #先写新名字,再写旧名字。
-L锁定用户
-u修改用户的uid号
-U解锁用户
-s指定用户的 登录 shell
-d修改用户的宿主目录位置
-e修改用户的账户失效时间 yy-mm-dd
-g修改用户的基本组名
-G修改用户的附加组名

小tips:

[:alnum:] 这个代表数字和字母,al是α,也就是字母;num代表数字。

[0-9a-zA-Z] 是正则表达式,也是代表数字和字母的意思。应用于文件里面的内容。

小拓展:tr命令

tr命令 主要功能是:删除、替换、压缩

选项:
    -d  删除   #比如 tr -d 123,也就是只要出现123中的任意一个,就把对应的删除,并且不区分123 是连续还是非连续
    -c  反补   #类似于反选,与后面条件里的内容完全相反
    -s  压缩
    -a  替换   #可以把对象1替换成对象2

2.4 userdel 删除用户

命令语法:
    userdel 用户名
         
唯一的选项: -r
    #意思是 删的时候将家目录 一起删掉

2.5 groups 组

查询用户所属的组

命令语法:
    groups [用户名]

2.5.1 groupadd 添加组账号

 [root@test1 /]# groupadd zhou           //添加组账号
 [root@test1 /]# tail -1 /etc/group
 zhou:x:1002:
 [root@test1 /]# groupadd -g 88 zhou    //-g指定组id
 [root@test1 /]# tail -1 /etc/group

2.5.2 groupdel 删除组账号

groupdel 组帐号名

 [root@test1 /]# groupdel zhou   //删除组账号

2.6 id

查询用户身份标识

命令语法:
    id [用户名]

2.7 finger 查询

可以查询当前用户账号的详细信息。

 命令语法:
     finger [用户名]

// 安装finger命令:yum install finger -y

小tips:

w、who、users命令 也可以查看信息,

w显示的信息最详细、who次之、users显示的信息最少。

2.8 w

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

 [root@localhost ~]# w [选项] [用户名]
 -h  不显示输出信息的标题
 -l  用长格式输出
 -s  用短格式输出,不显示登陆时间,JCPU 和 PCPU 时间
 -V  显示版本信息
 ​
 [root@localhost opt]#  w
  14:06:41 up  8:49,  2 users,  load average: 0.00, 0.01, 0.05
 USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
 root     :0       :0               一19   ?xdm?   1:44   0.17s /usr/libexec/gnome-session-binary --session gnome-
 root     pts/3    192.168.125.1    09:57    1.00s  0.07s  0.02s w
标题含义
USER登录到系统的用户。
TTY登录终端。
FROM表示用户从哪里登陆进来,一般显示远程登陆主机的 IP 地址或者主机名。
LOGIN@用户登陆的日期和时间。
IDLE表示某个程序上次从终端开始执行到现在所持续的时间。
JCPU和该终端连接的所有进程占用的 CPU 运算时间。这个时间里并不包括过去的后台作业时间,但是包括当前正在运行的后台作业所占用的时间。
PCPU当前进程所占用的 CPU 运算时间。
WHAT当前用户正在执行的进程名称和选项,换句话说,就是表示用户当前执行的是什么命令。

// w 显示的信息最详细

2.9 who

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

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

// who 显示的信息比w少,但比users多

2.10 user

 [root@localhost ~]#  users
 root root

// users 显示的属性最少

2.11 配置文件来源

/etc/skel/

 ~/.bash_profile   #开机启动时执行里面的命令
 ​
 ~/.bashrc         #与上面profile一样,但是优先级没有profile高
 ​
 ~/.bash_logout    #关机前执行操作

小拓展:

echo “ ” > .bash_history #意思是将打印的命令,赋值给bash_history ,因为打印的命令是空,也就是将对应的值清空。

3、文件/目录的权限和归属

因为权限涉及到安全性,所以权限非常重要!
查看权限的命令:ll (两个小写的L)

3.1 访问权限

  • 读取 r :允许查看文件内容、显示目录列表
  • 写入 w : 允许修改文件内容,允许在目录中新建、移动、删除文件或子目录
  • 可执行 x : 允许运行程序、切换目录。执行权限是最小权限,文件夹如果缺少执行权限,就没办法读、写,所以文件夹的权限一定要是奇数。

3.2 归属(所有权)

  • 属主:文件主人/拥有者,对文件拥有最高权限。
  • 属组:文件的拥有组
  • 其他:除了上面两种外的其他用户
 rwx  r--  r--  拆解:
     r : 读  (read)
         文件:可以查看里面的内容
         文件夹: 可以用ls   看文件夹中的文件列表

     w : 写  (write)
         文件:可以修改文件的内容,写的同时要有读的权限
         文件夹:新建文件(文件夹),删除文件(文件夹)、移动文件(文件夹)
         
     x : 执行
         文件:可以运行(命令、脚本) 颜色是绿色
         文件夹:执行是最小的权限,没有执行,读写就无法使用。

1. 数字表示法:

按照 R W X 的顺序,有权限就写1,无权限就写0。比如,有读和写的权限,但没有执行的权限,就是1 1 0,将二进制 转换成十进制,就是6

数字法表示文件的权限:

rwx十进制
0000
0011
0102
0113
1004
1015
1106
1117

根据上表可知,文件权限为000-111,换算成十进制,范围为:0-7

特殊数字对应类型
4读 r
2写 w
1执行 x

2. 非数字表示法(chmod命令):

主要用chmod命令,可以修改文件权限

命令语法:
    chmod [选项] + 指明属主、属组、其他 + [权限] + 文件
选项备注说明
-R递归
 u  属主
 g  属组
 o  其他
 a  所有人

涉及的表示法:

 +  加上  
    chmod u+r 文件名 #给属主加上 读 的权限  
    chmod a+r 文件名 #所有人都有 读 的权限
    
 -  减去
    chmod u-r 文件名 #属主在原有的基础上 减去 读 的权限
    
 =  赋予
    chmod u=r 文件名 #属主现在只有 读 的权限
chmod a+rwx   #所有人赋予可读可写可执行的权限,但实际生产环境中,不允许这样设置!
chmod u+rwx  #给属主赋予可读可写可执行的权限

上述方式 比较复杂,也可以采用数字表示法,用3位数字分别代表属主、属组、其他。

chmod 777 文件名  #也是对所有人赋予可读可写可执行的权限,等于chmod a+rwx
chmod 644 文件名
如果只写以为数字,比如:chmod 6 文件名,默认是对 其他 进行设置

注意: chmod 777 -R /

这个命令,不亚于删根,千万不要尝试。

扩展知识:

1、对文件而言,如果大家都没有执行权限,超级管理员也没有执行权限,只要一个人有执行权限,那么超级管理员也有。

2、删除一个文件和文件本身的权限有关系吗?

和文件本身没有关系,和文件所在的文件夹有关。

3.3 chown

修改文件的属主、属组

 chown  属主 文件名    #只改变文件的属主
 chown  :属组  文件名   #只改变文件的属组,把:换成.是一个意思
 chown  属主:属组  文件名   #属主和属组都改变,把:换成.是一个意思

选项:-R 也是递归的意思。

// 重点:注意区分chmod和chown! 这两个很重要,一定不要搞混。

  • chmod 是针对权限
  • chown 是针对属主、属组

3.4 umask

权限掩码。 作用: 规定了文件和文件夹的落地权限(也就是新建时 已经设置好的权限)

默认的umask 为0022(第一个0为特殊权限)。022是用户没有的权限,用最高权限 减去 umask 就是你的最终权限。

比如:

1、 文件夹的最高权限为777

777-022=755 ,所以文件夹落地的权限为755,也就是 rwx r-x r-x

2、 文件的最高权限为666, 因为执行权限x对于文件而言,非常危险。

666-022=644,文件默认的权限为644,也就是rw- r- - r- -

3、 把umask改成123,666-123=543 ,文件出现奇数,自动加1,偶数不变

// umask 后面跟上数值,可以设置umask的值

vim /etc/profile     #所有用户生效

3.5 三种特殊权限

1、suid命令

任何人处理该文件时,把当前用户当作文件的属主。

2、guid命令

任何人处理该文件时,把当前用户当作文件的属组。

3、sticky 粘连位

拥有该权限的文件夹,该文件夹中的文件,只有自己(属主)和超级管理员可以删除,其他都不能删除。

3.6 访问控制列表ACL

getfacl test 可以查看test文件下的访问控制列表

setfacl 修改

选项功能描述
-m指定列表
-b清空
-X减去,删除