跳至正文

Linux用户、组和权限

一些概念

Linux 用户三种角色

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

普通用户:系统用户 UID:1-999(centos7 版本) 1-499(centos6 版本)

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

UID:即每个用户的身份标示,类似于每个人的身份证号码.
GID 组ID:
1-499(CentOS6), 1-999(CENTOS7) 普通组:500+(CentOS6), 1000+(CENTOS7)

组账号:

基于某种特定联系(如都需要访问 FTP 服务)将多个用户集合在一起,即构成一个用 户组,表示该组内所有用户的账号称为组账号。每一个用户账号至少属于一个组,这个组称为该用户的基本组(或私有组); 若该用户同时还包含在其他的组中,则这些组称为该用户的附加组(或公共组)。
例如,用户 zhangsan 是技术部的员工,与部门内的其他同事同属 于基本组 tech,后来因工作安排需要,公司将 zhangsan 加入邮件管理员组 mailadm,则此 时用户 zhangsan 同时属于 tech、mailadm 组,tech 组是其基本组账号,而 mailadm 组是 其附加组账号。 对组账号设置的权限将适用于组内的每一个用户账号。

passwd文件账号记录详细说明

Linux 系统的 /etc/passwd 文件是用户账号信息的核心配置文件之一,虽然名字叫“passwd”(密码),但现代 Linux 中并不直接存储用户的加密密码(密码一般存储在 /etc/shadow 中),而是主要保存用户的基本账号信息。

用户名:密码占位符:UID:GID:注释:主目录:登录Shell

举例:root:x:0:0:root:/root:/bin/bash

字段说明

  1. 用户名(login name)
    • 账户的登录名,如 rootmooloco
  2. 密码占位符(password)
    • 现代系统一般为 x,表示加密密码存放在 /etc/shadow 中;早期系统可能直接存放加密密码。
  3. UID(User ID)
    • 用户 ID,0 代表 root;普通用户一般从 1000 开始(CentOS 是 500 起)。
  4. GID(Group ID)
    • 用户所属主组的 ID,组信息在 /etc/group 文件中。
  5. 注释(GECOS)
    • 可选的描述信息,如用户全名、电话等。
  6. 主目录(home directory)
    • 用户登录后的默认目录,例如 /root/home/mooloco
  7. 登录 Shell(login shell)
    • 用户登录时运行的 shell 程序,例如 /bin/bash/sbin/nologin(禁止登录)。

shadow文件说明

/etc/shadow 文件是 Linux 系统用来存放用户加密密码及其有效期信息的安全文件。它与 /etc/passwd 搭配使用:/etc/passwd 公开保存用户的基本信息,而 /etc/shadow 存放敏感的密码信息,并且只有 root 用户可读,以提高系统安全性。

用户名:加密密码:最后修改日期:最小天数:最大天数:警告天数:禁用天数:过期日期:保留字段

字段说明

  1. 用户名(login name)
    • /etc/passwd 文件中的用户名对应。
  2. 加密密码(encrypted password)
    • 存储经过哈希加密的密码字符串(如 SHA-512),长度较长。
    • 特殊值:
      • !*:账号被锁定(无法登录)。
      • 空值:允许无密码登录(极不安全)。
  3. 最后修改日期(last changed date)
    • 距 1970-01-01 的天数,表示密码最后一次修改的日期。
  4. 最小天数(minimum days)
    • 两次修改密码之间的最小间隔天数,0 表示不限制。
  5. 最大天数(maximum days)
    • 密码有效的最大天数,到期后必须修改密码。
  6. 警告天数(warning days)
    • 在密码到期前多少天开始提醒用户修改密码。
  7. 禁用天数(inactive days)
    • 密码过期后多少天账号被锁定,-1 表示不启用此功能。
  8. 过期日期(expire date)
    • 距 1970-01-01 的天数,表示账号失效日期,到期后该账号不可用。
  9. 保留字段(reserved)
    • 暂未使用,保留以备将来扩展。

chage命令

用法: chage [选项] 用户名

选项作用
-l查看用户当前的密码有效期信息(只读,不修改)
-m 最小天数设置两次修改密码之间的最小天数
-M 最大天数设置密码的最大使用天数
-d 最近密码修改日期设置
上次修改密码的日期。
-W 警告天数设置在密码过期前多少天开始提醒
-I 不活跃天数设置密码过期后多少天禁用账户
-E 到期日期设置账号的失效日期(格式 YYYY-MM-DD)

示例

  1. 查看用户密码有效期信息
chage -l mooloco
  1. 设置密码 90 天必须更换一次
chage -M 90 mooloco
  1. 在密码到期前 7 天提醒用户
chage -W 7 mooloco
  1. 设置账号在 2025-12-31 失效
chage -E 2025-12-31 mooloco

附加

组的分类: 当一些用户需要做同一件事情的时候,把他们加到一个组中便于管理 1、基本组,一般新建用户的时候会随用户自动创建,与用户同名 2、附加组,一般一个用户可以有0个或多个附加组 一个用户只有一个基本组,可以有多个附加组

为什么会创建家目录?为什么会UID从1000开始,UID最大是多少? 是由于/etc/login.defs这个文件中的配置决定的

useradd——添加用户账号

  • -u:指定用户的 UID 号,要求该 UID 号码未被其他用户使用。
  • -d:指定用户的宿主目录位置(当与-M 一起使用时,不生效)。
  • -e:指定用户的账户失效时间,可使用 YYYY-MM-DD 的日期格式。
  • -g:指定用户的基本组名(或使用 GID 号)。
  • -G:指定用户的附加组名(或使用 GID 号)。
  • -M:不建立宿主目录,即使/etc/login.defs 系统配置中已设定要建立宿主目录。
  • -s:指定用户的登录Shell。

举例:
创建用户zcx,UID为1009 ,过期时间2029年10月29日,主目录/home/zcx,主要组gtk,附加组mooloco,不可登录

useradd -u 1009 -d /home/zcx -e 2029-10-09 -g gtk -G mooloco -s /sbin/nologin zcx

注:gtk组必须先已经存在,否则请不要加-g,让系统生成和用户名一样的基本组。

更改密码

调用管道符,给 zhangsan 用户设置密码 “123”,为了方便系统管理,passwd 命令提供了 –stdin 选项,用于批量给用户设置初始密码。

passwd 用户
echo "123" | passwd --stdin zhsngsan
  • -d:清空指定用户的密码,仅使用用户名即可登录系统。
  • -l:锁定用户账户。
  • -S:查看用户账户的状态(是否被锁定)。
  • -u:解锁用户账户。

usermod——修改用户账号的属性

参数:

  • -l:更改用户账号的登录名称(Login Name)。
  • -L:锁定用户账户。
  • -U:解锁用户账户
  • u:修改用户的 UID 号。
  • -d:修改用户的宿主目录位置。
  • -e:修改用户的账户失效时间,可使用 YYYY-MM-DD 的日期格式。
  • -g:修改用户的基本组名(或使用 GID 号)。
  • -G:修改用户的附加组名(或使用 GID 号)。
  • -s:指定用户的登录 Shell。

技巧:大部分参数和useradd的参数类似,可类比记忆

-a表示在原来所属组的基础上追加

userdel——删除用户账号

userdel [-r] 用户名

添加 -r 选项时,表示连用户的宿主目录一并删除

用户账号的初始配置文件

账号初始配置的作用

添加一个新的用户账号后,useradd 命令会在该用户的宿主目录中建立一些初始配置文 件。

这些文件来自于账号模板目录/etc/skel/,基本上都是隐藏文件,较常用的初始配置文件 包括“.bash_logout”、“.bash_profile”和“.bashrc”。其中:

“.bash_profile”文件中的命令将在该 用户每次登录时被执行;
“.bashrc”文件中的命令会在每次加载“/bin/Bash”程序(当然也包括登 录系统)时执行;
“.bash_logout”文件中的命令将在用户每次退出登录时执行。

如果希望为所有用户添加登录后自动运行的命令程 序、自动设置变量等,可以直接修改/etc 目录下的类似文件,如/etc/bashrc 文件、/etc/profile 文件。例如,执行以下操作可以为所有用户自动设置 myls 命令别名

vi /etc/bashrc
alias myls='/bin/ls -lhr'
source /etc/bashrc

用户账号的初始配置文件

  • .bash_profile:示例代码中为用户添加了2个环境变量(JAVA_HOME和CLASSPATH),并修改了已有环境变量PATH的值.(PATH的查找是从前开始查找,找到就返回) CLASSPATH环境变量的值是在JAVA运行时查找加载类的默认classpath.
  • .bashrc :例子中定义了路径,语言,命令别名(使用rm删除命令时总是加上-i参数需要用户确认,使用ls命令列出文件列表时加上颜色显示)。 每次修改.bashrc后,使用source ~/.bashrc(或者 . ~/.bashrc)就可以立刻加载修改后的设置,使之生效。一般会在.bash_profile文件中显式调用.bashrc。登陆linux启动bash时首先会去读取~/.bash_profile文件,这样~/.bashrc也就得到执行了,你的个性化设置也就生效了。 关于环境变量的读取顺序: 用户登录 ->> 加载~/.bash_profile –> bash_profile中配置了首先是使~/.bashrc生效
  • .bash_logout 用途: 用户登出时执行的命令
    如果需要每个用户登出时都清除输入的命令历史记录,可以在/etc/skel/.bash_logout文件中添加下面这行rm -f $HOME/.bash_history 。这样,当用户每次注销时,.bash_history文件都会被删除.

组管理

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注