linux系统中的账号和权限

2023年 7月 31日 82.4k 0

众所周知,登录任何系统都需要一个账号,出于安全性考虑,一般在工作环境中是不会使用超级管理员(root)去登录系统,所以新建用户(账号)去使用是很有必要的。

一.用户账号和组账号概述

1.用户账号

1.1 用户账号的类型

  • 超级用户(root uid=0) ,拥有最高权限
  • 普通用户账号:由root或其他管理员创建,权限有限
  • 程序用户账号:在安装Linux系统时,添加的低权限用户,不允许登录系统,仅限维护某个程序运行(即对守护进程获取资源进行权限分配)
  • 1.2 UID号:用户标识号每个用户都对应一个的身份标记

  • 超级用户(root)账号的UID号为固定值:0
  • 程序用户账号:1~999(CentOS6之前是1-400,CentOS7以后是1-999了)
  • 普通用户账号:1000~60000(CentOS6之前是500+,CentOS7以后是1000+)
  • PS:

    • 超级用户账号是最高权限拥有者,uid=0的用户,默认是root,只有当进行系统管理、维护任务时,才建议使用 root 用户登录系统,日常事务处理建议只使用普通用户账号
    • 普通用户账号主要是给用户进行交互登录使用,受到系统某一类限制,普通账号需要由root用户或其他管理员用户创建,一般只在用户自己的家目录中拥有完整的权限
    • 程序用户的出现主要是出于安全性考虑,即使某个程序被攻破导致了账户密码泄露,但是程序账号不是给人用的,是给程序用的,无法直接登录系统的用户,就可以更好的保证系统的安全性

    2.组账号

    将多个用户集合起来,统一分配某种相同的权限,这多个用户的集合,就是组。linux系统中的用户组(group)就是具有相同特性的用户(user)集合。将用户分组是linux系统中对用户进行管理及控制访问权限的一种手段,可以节约时间简化一个一个去给用户账号分配权限的过程。

    linux系统中用户组共两种,基本组(私有组) 和附加组(公共组)

    • 基本组(私有组) :

    基本组:有且唯一(通过id命令查看,账号名后第一个就是基本组);系统默认新建用户时自动添加同名的组

  • 建立账户时,若没有指定账户所属的组,系统会建立一个和用户名相同的组,这个组就是私有组,这个组默认只容纳了一个用户。
  • 在用户所属组中的第一个组称为基本组,基本组在 /etc/passwd文件中指定
    • 附加组(公共组) :
  • 附加组:除了第一个组外的其他组为附加组或公共组(可以没有或者有多个,id命令查看,除最前面一个后面的都是附加组)
  • 附加组在 /etc/group 文件中指定
  • 使用id 用户名查看用户uid,基本组和附加组:

    [root@test1 ~]# id lisi
    uid=1004(lisi) gid=1004(lisi) 组=1004(lisi),1005(kfc)
    #用户lisi uid=1004  #(基本组或私有)lisi=1004(系统默认新建用户时自动添加同名的组) #1005(kfc)为附加组或公共组(可有没有或者多个)
    

    PS:用户和组之间是存在包含关系的。组中包含用户,用户一定要有一个主要组,并且主要组有且唯一,附加组可有可无,有且可以有多个,没有也没关系,须知系统会在你创建一个新用户时自动创建一个与用户同名的主要组(这是一种默认操作)

    3.ID

    3.1 UID(User IDentity)

    UID(User IDentity,用户标识号):

    Linux 操作系统中的每一个用户账号都有一个数字形式的身份标记,称为 UID(UserIDentity,用户标识号),对于操作系统核心来说,UID 是区分用户的基本依据,原则上每个用户的 UID 号应该是唯一的。root 用户账号的 UID 号为固定值 0,而程序用户账号的 UID号默认为1~499,普通用户使用的UID号默认500~60000

    需注意:

    centos6 500~60000

    centos7登录用户是从1000起到60000

    1-999 预留给系统,叫系统用户,某个程序比如数据库

    人使用的账户UID号是从1000开始

    3.2 GID

    GID(Group IDentify,组标识号):与 UID 类似,每一个组账号也有一个数字形式的身份标记,称为 GID(Group IDentity,组标识号)。root 组账号的 GID 号为固定值 0,而程序组账号的 GID 号默认为 1~499,500~60000 的 GID 号默认分配给普通组使用。

    4.用户账号管理

    在了解用户账号如何管理之前我们需要知道两个文件与用户账号信息息息相关,下面是两个文件的位置

    • /etc/passwd用户账号文件:

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

    示例:

    用户1.png

    PS:可以通过man 5 passwd命令,查看/etc/passwd文件的说明和各字段含义

    • /etc/shadow用户口令(密码)文件(影子文件 ) :

    存储用户的密码,账号有效期等信息(只有超级管理员用户拥有读权限,其他用户无任何权限)

    示例:

    用户2.png

    [root@localhost ~]# head -1 /etc/shadow
    root:$6$s.rTN9IazOLldMYx$rGLq9CP/vW5MzIG44NmRH1ZDP1Gw0PKUISpTG.mBUw6Z8BWBu7wCp4813ycadrPXavjp..FMnA5wtalzKiy9D/::0:99999:7:::
    #:以`:`做为分隔符(与etc/psswd文件一样)
    ​
    #第一段`root`:用户名
    #第二段'$6$s.rTN9IazOLldMYx$rGLq9CP/vW5MzIG44NmRH1ZDP1Gw0PKUISpTG.mBUw6Z8BWBu7wCp4813ycadrPXavjp..FMnA5wtalzKiy9D/':密码字段(shadow中会对密码进行加密)
    #第三段:最后一次修改密码时间(这里我没有修改过密码,所以是空的)
    #第四段`0`:修改密码最小天数(0 表示不限制)
    #第五段`99999`:密码有效期
    #第六段`7`:提前七天提醒(密码到期提醒)
    #第七段:密码过期后的宽限天数 (这里我的密码有效期是273年,基本不会过期,所以这里也是空的)
    #第八段:账号失效时间(这里为空,因为我是超级管理员账号,永久有效)
    #第九段:保留字段(该字段保留作将来使用)
    

    4.1 useradd 添加账号

    格式:useradd [选项] 用户名

    需了解该命令

  • 会在/etc/passwd 文件和/etc/shadow 文件的末尾增加该用户账号的记录
  • 若未明确指定用户的宿主目录,则在/home 目录下自动创建与该用户账号同名的宿主目录,并在该目录中建立用户的各种初始配置文件。
  • 若没有明确指定用户所属的组,则自动创建与该用户账号同名的基本组账号,组账号的记录信息将保存到/etc/group/etc/shadow文件中。
  • 选项 作用
    -u 指定用户的 UID号,要求该UID号码末被其他用户使用
    -d 指定用户的宿主目录位置(当与-M一起使用时,不生效)
    -e 指定用户的账户失效时间,可使用YYYY-MM-DD(年月日)的日期格式
    -M 不建立宿主目录,即使/etogin.d.fis系统配置中已设定要建立宿主目录。
    -s(小写S) 指定用户的登录Shell(即shell类型)PS:/sbin/nologin的shell类型是禁止用户登陆系统
    -g 指定用户的基本组名(或使用 GID 号)
    -G 指定用户的附加组名(或使用 GID 号)

    4.2 passwd 密码管理

    psswd命令主要是为账号设置密码

    格式:passwd [选项] 用户名

    PS:选项可以不加,直接指定用户名可以添加(修改)密码

    举例:

    [root@test1 /]# passwd zhangsan    
    #修改用户zhangsan的密码输入两次密码
    更改用户 zhangsan 的密码 
    新的 密码:
    无效的密码: 密码少于 8 个字符
    重新输入新的 密码:
    passwd:所有的身份验证令牌已经成功更新。
    
    选项 作用
    -d 清空指定用户的密码,仅使用用户名即可登录系统
    -l(小写L) 锁定用户账户(与usermod -L(大写L)作用相同)
    -S(大写S) 查看用户账户的状态(是否被锁定)
    -u 解锁用户账户

    补充修改密码免交互的一种方式(不过是明文密码的形式,不建议使用)

    [root@test1 dnf]# echo "123123"|passwd --stdin lisi  
    #免于交互
    更改用户 lisi 的密码 。
    passwd:所有的身份验证令牌已经成功更新。
    

    4.3 usermod 修改用户账号的属性

    格式:usermod [选项] 用户名

    选项 作用
    -l 更改用户账号的登录名称(Login Name)
    -L(大写L) 锁定用户账户(与passwd -l(小写L)作用相同)
    -u 修改用户的 UID 号
    -U 解锁锁用户账户
    -d 修改用户的宿主目录位置(注意修改宿主目录位置需要自己去mv指定目录位置,usermod -d只是更新信息)
    -e 修改用户的账户失效时间,可使用 YYYY-MM-DD 的日期格式。
    -g 修改用户的基本组名(或使用 GID 号)
    -G 修改用户的附加组名(或使用 GID 号)
    -s(小写S) 指定用户的登录 Shell(即shell类型)

    4.4 userdel 删除用户

    格式:userdel [选项] 用户

    选项 作用
    -r 将家目录一起删除

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

    文件来源:

    新建用户账号时,从/etc/skel 目录中复制而来

    家目录中用户默认的配置信息在etc/default/useradd

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

    主要的用户初始配置文件(从/etc/skel 目录中复制而来):

    • ~/.bash_profile: 这个文件是为系统全局变量配置文件,可以通过重启系统或者执行 source /etc/profile“命令使profile文件被读取
    • ~/.bashrc: 与~/.bash_profile互为备份,存放的是一些应用程序所需的启动脚本(即开机启动的一些命令)。
    • ~/.bash_logout: 此文件中的命令将在该用户每次退出时bash shell时使用(即关机时启动的命令)

    PS:

    • /etc/profile中的修改是对当前用户生效

      • 修改/etc/profile文件中相关配置,切换bash或者用户后都需要source /etc/profile才生效;
    • /etc/bashrc中的修改是全局生效的

      • 修改/etc/bashrc文件中相关配置后,切换bash或者用户后无需刷新,

    6.组管理

    组账号与用户账号类似,也有两个文件与之相关

    • /etc/group:保存组账号的基本信息
    • /etc/gshadow:保存组账号的密码信息(但基本不使用)

    6.1 groupadd 添加组

    格式:groupadd -g GID 组账号名

    groupadd后直接加自定义名,是添加自定义名的组账号

    选项[-g]是指定组id(GID)

    6.2 gpasswd 添加、设置、删除组成员

    格式:gpasswd [选项] 用户名

    选项:

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

    6.3 groupmod 修改组账号的属性

    格式:groupmod [选项] 组名

    选项:

    • -g:修改用户的编号(GID)
    • -n:修改用户的名称

    6.4groupdel 删除组账号

    格式:groupdel 组账号名

    7.查询

    7.1 id 查询用户账号的详细信息

    格式:id 用户名

    7.2 finger 查询用户账号的详细信息(需安装才能使用)

    格式:finger 用户名

    7.3 w(小写)、who、users查询已登录主机的用户信息

    查询1.png

    • w

    格式:w [选项] 用户名

    选项 作用
    -h 不显示输出信息的标题
    -l(小写L) 用长格式输出
    -s(小写S) 用短格式输出,不显示登陆时间,JCPU 和 PCPU 时间
    -V(大写V) 显示版本信息

    w后什么都不跟就是显示当前全部信息

    [root@test1 Packages]# w
     11:20:58 up  2:05,  1 user,  load average: 0.00, 0.01, 0.05
    USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
    root     pts/0    192.168.100.99   09:16    2.00s  0.74s  0.02s w
    #上述各标题含义
    #USER:登录到系统的用户
    #TTY:登录终端
    #FROM:表示用户从哪里登陆进来,一般显示远程登陆主机的 IP 地址或者主机名
    #LOGIN@:用户登录的日期和时间
    #IDLE:表示某个程序上次从终端开始执行到现在所持续时间
    #ICPU:和该终端连接的所有进程占用的 CPU 运算时间。这个时间里并不包括过去的后台作业时间,但是包括当前正在运行的后台作业所占用的时间。
    #PCPU:当前进程所占用的CPU运算时间
    #WHAT:当前用户正在执行的进程名称和选项(即到用户当前正在执行什么命令)
    
    • who

    观察上图,与w命令相比,who命令只能显示当前登录的用户信息,但无法知晓每个用户正在执行的命令信息

    格式:who [选项] [file]

    PS:who命令是默认从/var/run/utmp文件中来获取登录用户登录的信息,但是可以通过file来指定另一个文件,加了file后,会去读取指定的文件来获取信息

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

    显示当前主机登录用户,显示信息较少

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

    1.访问权限

    程序访问文件时的权限,取决于此程序的发起者

    • 进程的发起者,同文件的属主:则应用文件属主权限
    • 进程的发起者,属于文件属组;则应用文件属组权限
    • 应用文件“其它”权限

    访问人群分为了三类

  • 所属主(u)
  • 所属组(g)
  • 其他人 (o)
  • 权限分为三种

  • 读(r,4)
  • 写(w,2)
  • 执行(x,1(程序,脚本等))
  • 对文件的权限

  • r 表示有读的权限,可使用文件查看类工具,比如:cat,获取其内容
  • w 表示有写的权限,可修改其内容
  • x 表示有执行的权限,可以把此文件提请内核启动为一个进程,即可以执行(运行)此文件(当然前提是此文件的内容必须是可执行)
  • 对目录的权限

  • r 可以使用ls查看此目录中文件列表
  • w 可在此目录中创建文件,也可删除此目录中的文件,而和此被删除的文件的权限无关
  • x 可以cd进入此目录,可以使用ls -l查看此目录中文件元数据(须配合r权限),属于目录的可访问的最小权限
    • 读取r:允许查看文件内容、显示目录列表
    • 写入w:允许修改文件内容,允许在目录中新建、移动、删除文件或子目录
    • 可执行x:允许运行程序、切换目录

    PS:

    删除文件,和文件的权限无关,只和文件所在文件夹的权限有关

    文件夹一定会有执行权限 x

    执行权限 x 是文件夹的最小权限 ,没有x权限 文件夹的rw权限不生效

    示例:使用ls -l查看一个文件的权限

    权限1.png

    root@localhost opt]# ls -l 11.txt
    -rw-r--r--. 1 root root 0 7月  29 14:30 11.txt
    #-              表示文件属性   
    #rw-            表示属主的权限 
    #r--            表示属组的权限
    #r--            表示其他用户的权限
    #1              表示硬链接个数
    #root           属主
    #root           属组
    #0              文件大小
    #7月  29 14:30  最后修改时间
    #11.txt         文件名
    

    2.权限命令

    2.1 chmod(change mode) 修改权限(属主,属组,其他)

    chmod命令用于控制用户对文件/目录的权限

    常用选项:-R:递归修改

    chmod修改权限有两种方法

    • 模式法

    格式:chmod [选项] 主权限 组权限 其他用户权限 文件名

    chmod   对谁(所有者,所属组,其他)  操作(+ - =)权限    文件名
    '谁'
    u  -- 文件属主 (属于哪个用户)
    g  -- 文件属组 (属于哪个组)
    o  -- 其他用户
    a  -- 所有用户
    ​
    '操作权限'
    +  -- 添加权限
    -  -- 减少权限
    =  -- 覆盖已有权限
    ​
    '权限(对root无效)'
    r -- 读权限
    w -- 写权限
    x -- 执行权限
    #需注意普通的权限对超级管理员无效
    
    • 数字法

    格式:chmod 想给权限对应的数字(三位分别对应主权限 组权限 其他用户权限) 文件/文件夹

    权限2.png

    #权限项    读   写  执行         读  写  执行          读   写   执行
    #字符表示   r   w   x           r   w   x            r    w    x
    #数字表示   4   2   1           4   2   1            4    2    1
    #权限分配   文件所有者(属主)     文件所属组(属组)       其他用户(其他)
    #数字转换十进制就可以直接表示
    #r      w       x     十进制
    #1      1       1       7
    #1      1       0       6
    #1      0       1       5
    #1      0       0       4
    #0      1       1       3
    #0      1       0       2
    #0      0       1       1
    #0      0       0       0
    #777即用户对文件/文件夹拥有所有权限(可读可写可执行);000即用户对文件/文件夹没有任何权限(不可读不可写不可执行)
    

    2.2 chown 修改文件所属主和所属组

    一般是谁新建的文件谁就是其的属主,chown可以修改其所属主和所属组

    格式:chown [选项] 要改的主 :要改的组 文件

    选项:

    • -R:递归修改(处理指定目录以及其子目录下的所有文件)
    • -c : 显示更改的部分的信息
    • -f : 忽略错误信息 -h :修复符号链接
    • -v : 显示详细的处理信息

    3. umask 决定新建文件/文件夹权限

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

    实现方式:

    新建文件夹(目录) 权限:文件夹最高权限(777)减去umask值 (即777-umask)

    新建文件权限:文件最高权限(666)减去umask(即666 - umask),如果所得结果某位存在执行(奇数)权限,则将其权限+1,偶数不变(即减完umask值之后若有执行权限则文件权限执行加1)

    (PS:因为无法判断,新建的文件或者说新的文件到系统中,这个文件是否是一个病毒文件,如果有可执行权限不安全,所以文件的最高权限就是666,即rw-rw-rw-

    查看umask值:

    umask命令

    修改umask值:

    umask 数值 022 默认022

    相关文章

    JavaScript2024新功能:Object.groupBy、正则表达式v标志
    PHP trim 函数对多字节字符的使用和限制
    新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
    使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
    为React 19做准备:WordPress 6.6用户指南
    如何删除WordPress中的所有评论

    发布评论