Linux---- 用户配置文件

用户配置文件

/etc/passwd用户信息文件

介绍

  • 越是对安全性要求比较高的服务器,越需要建立一套合理的用户权限等级制度和服务器操作规范

  • 在 Linux 中主要通过用户配置文件来查看和修改用户信息

文件结构

  • 使用man 5 passwd可以查看配置文件的详细介绍
  • 字段account:password:UID:GID:GECOS:directory:shell
    • account:用户名称
      • 要有一个规范,比如全都是用户姓名首字母
      • 不要使用特殊字符
    • password:密码标志 / 标识
      • 当值为x的时候,表示这个用户是有密码的,如果不写x,那么登陆的时候就不需要密码也可以登陆(但是只限于本机,ssh 协议禁止这种无密码的登陆方式)
      • 早期 Linux 时直接将密码用 sha512 加密之后放在 passwd 配置文件中 (不安全、因为可能暴力破解),而是放在了影子文件/etc/shadow中,并且/etc/shadow文件的权限是000。只有root用户才可以读/etc/shadow文件,因为读写权限对 root 用户是无效的
    • UID: 用户 ID
      • 0: 超级用户
      • 1-499:系统用户(伪用户)
        • linux 很多服务都会调用这些用户,不要删除这些用户,系统会崩溃,并且这些用户无法登陆
      • 500-65535:普通用户
      • Linux 内核有很多的操作对象比如用户、用户组、进程、线程、文件等,这些对象都有一个名称,但是内核在对他们调用的时候无法识别其名称,而是会识别其ID,所有要操作的对象都得有一个数字标识ID,Linux 内核通过UID操作用户。这就跟域名IP地址之间的关系差不多
      • Linux 中如果想将一个普通用户变成超级用户,一般都是修改其配置文键UID实现.(windows 是将组 id 变成 0)
    • GID:用户初始组 ID
      • 初始组:用户一登录就会立刻拥有这个用户组的相关权限,每一个用户的初始组只能有一个,一般就是和这个用户的用户名相同的组名作为这个用户的初始组
      • 附加组:用户可以加入多个其它的用户组,并拥有这些组的权限,付家族可以有多个
    • GECOS:用户说明
      • 对用户的备注、说明信息
    • directory:家目录 / 宿主目录
      • 普通用户:/home/用户名/,二级目录,用户对自己的家目录具有所有权限
      • 超级用户:/root/根下的一级目录
    • shell:用户登录之后只用的 shell
      • shell 是就是 Linux 的命令解释器,当我们执行一条命令的时候,就会首先经过 shell 对命令进行解析,交给内核执行,然后将结果输入到命令执行窗口
      • /etc/passwd中,处理标准shell/bin/bash之外,还可以写入/sbin/nologin
      • 所有的伪用户登录之后的 shell 都是/sbin/nologin
      • Linux 中有多个 shell,也是可以修改的
        Linux---- 用户配置文件
# /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
uucp: x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator: x:11:0:operator:/root:/sbin/nologin
games: x:12💯games:/usr/games:/sbin/nologin
gopher: x:13:30:gopher:/var/gopher:/sbin/nologin
ftp: x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody: x:99:99:Nobody:/:/sbin/nologin
vcsa: x:69:69:virtual console memory owner:/dev:/sbin/nologin
saslauth: x:499:76:Saslauthd user:/var/empty/saslauth:/sbin/nologin
postfix: x:89:89::/var/spool/postfix:/sbin/nologin
sshd: x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postgres: x:26:26:PostgreSQL Server:/var/lib/pgsql:/bin/bash
ziawang: x:500:500::/home/ziawang:/bin/bash
dbuser: x:501:501::/home/dbuser:/bin/bash
admin: x:502:502::/home/admin:/bin/bash
openvpn: x:498:498:OpenVPN:/etc/openvpn:/sbin/nologin
mysql: x:27:27:MySQL Server:/var/lib/mysql:/bin/bash
注意
  1. 在 Linux 里面。root不一定是管理员,但是UID0的一定是管理员
  2. 当我们把一个普通用户的UID修改成0的时候,操作系统就会将这个用户当作超级用户,并且会将这个超级用户与原先的超级用户 root 当作一个用户对待
  3. 虽然初始组可以修改。但是不建议修改用户的初始组,这样不方便文件的管理

/etc/shadow影子文件

特点

  • shadow 中保存的是真正的密码字符串,在 passwd 文件中只有密码标志x
  • 文件的权限为000

为什么权限是000?

  • 被加密之后的密码字符串也是有被暴力破解的可能,为了防止用户获取到密码字符串,可以不给这些用户访问文件的权限

文件结构

  • 共有 9 个字段
    1. 用户名
    2. 经过加密算法处理之后的密码
      • 经过SHA512 三列加密算法
      • 如果密码位置为!!或者*` 表示没有密码,不能登陆
        • 可以通过这种方式临时禁用一个用户登陆,随便在密码字符串前加上一个!
    3. 密码最后一次的修改时间
      • 表示修改该用户密码的时间距离标准时间的时间天数
      • 使用1971年1月1日作为标准时间,每过一天时间戳 +1,而不是秒
    4. 规定连续修改密码的时间间隔
      • 如果之前最后一次修改密码时间举例现在短于这个时间间隔。就不能修改密码
    5. 密码的有效期,以密码的最后一次修改时间为基准
      • 默认 99999
    6. 密码修改到期前的警告天数
      • 密码到达有效期之前
      • 与第 5 个字段相比
    7. 密码有效期过期之后的宽限天数
      • 密码有效期之后
      • 在宽限天数内,用户每次登陆都会警告用户修改密码,如果过了宽限天数之后密码仍没有修改,用户就会无法再次登陆
      • 0: 密码过期之后立即失效
      • -1:密码永远不会失效
    8. 账号的失效时间
      • 用时间戳表示
      • 一旦到达失效时间,即使密码未过期,也无法再使用
    9. 保留

密码的三个原原则

  1. 复杂性
  2. 时效性
    • 要经常修改,可以使用上述第 5 个参数设置
  3. 易记性

/etc/group组信息文件

介绍

  • 每添加一个用户会默认生成一个和用户名相同的组

文件结构

  • 字段
    1. 组名
    2. 组密码标志
    3. GID
      • Linux 是按照 id 来区分组的
      • 1-499 是系统伪用户组
      • 500-65535 是普通用户组
    4. 组中附加用户
      • 只能看到附加用户, 不能查看组的初始用户
      • 可以先去用户的passwd文件中获取用户所在的初始组, 然后再去/etc/group
        中找组

/etc/gshadow组密码文件

介绍
  • 存放了真正的组密码
文件结构
  • 字段
    1. 组名
    2. 组密码
    3. 组管理员用户名
      • 组管理员可以添加其他用户到组中, 也可以将组中承轩移除组.
    4. 组中附加用户

其他用户管理相关文件

1. 用户的家目录

添加用户时自动生成

  • 普通用户
    • /home/用户名, 所有者和所属组都是此用户, 权限是700
  • 超级用户
    • /root/, 所有者和所属组都是 root 用户, 权限是550
      • 这里的权限对root用户其实是没用的
  • 如果把普通用户变成了超级用户, 那么家目录会有什么变化?(把 uid 改成 0)
    • 提示符会变成#, 但是用户的家目录不会更改, 只是权限变成了超级用户的权限
2. 用户的邮箱
  • /var/spool/mail/用户名
    • 添加用户的时候自动生成
3. 用户模板目录
  • /etc/skel
    • 当创建用户的时候, 都会从模板中拷贝一份数据并作为隐藏文件保存到用户的家目录下.
    • 我们可以再skel下创建文件在创建用户的时候就会为每一个新用户家目录下创建默认文件.