一些概念
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
字段说明
- 用户名(login name)
- 账户的登录名,如
root
、mooloco
。
- 账户的登录名,如
- 密码占位符(password)
- 现代系统一般为
x
,表示加密密码存放在/etc/shadow
中;早期系统可能直接存放加密密码。
- 现代系统一般为
- UID(User ID)
- 用户 ID,
0
代表 root;普通用户一般从1000
开始(CentOS 是500
起)。
- 用户 ID,
- GID(Group ID)
- 用户所属主组的 ID,组信息在
/etc/group
文件中。
- 用户所属主组的 ID,组信息在
- 注释(GECOS)
- 可选的描述信息,如用户全名、电话等。
- 主目录(home directory)
- 用户登录后的默认目录,例如
/root
、/home/mooloco
。
- 用户登录后的默认目录,例如
- 登录 Shell(login shell)
- 用户登录时运行的 shell 程序,例如
/bin/bash
、/sbin/nologin
(禁止登录)。
- 用户登录时运行的 shell 程序,例如
shadow文件说明
/etc/shadow
文件是 Linux 系统用来存放用户加密密码及其有效期信息的安全文件。它与 /etc/passwd
搭配使用:/etc/passwd
公开保存用户的基本信息,而 /etc/shadow
存放敏感的密码信息,并且只有 root 用户可读,以提高系统安全性。
用户名:加密密码:最后修改日期:最小天数:最大天数:警告天数:禁用天数:过期日期:保留字段
字段说明
- 用户名(login name)
- 与
/etc/passwd
文件中的用户名对应。
- 与
- 加密密码(encrypted password)
- 存储经过哈希加密的密码字符串(如 SHA-512),长度较长。
- 特殊值:
!
或*
:账号被锁定(无法登录)。- 空值:允许无密码登录(极不安全)。
- 最后修改日期(last changed date)
- 距 1970-01-01 的天数,表示密码最后一次修改的日期。
- 最小天数(minimum days)
- 两次修改密码之间的最小间隔天数,0 表示不限制。
- 最大天数(maximum days)
- 密码有效的最大天数,到期后必须修改密码。
- 警告天数(warning days)
- 在密码到期前多少天开始提醒用户修改密码。
- 禁用天数(inactive days)
- 密码过期后多少天账号被锁定,-1 表示不启用此功能。
- 过期日期(expire date)
- 距 1970-01-01 的天数,表示账号失效日期,到期后该账号不可用。
- 保留字段(reserved)
- 暂未使用,保留以备将来扩展。
chage命令
用法: chage [选项] 用户名
选项 | 作用 |
---|---|
-l | 查看用户当前的密码有效期信息(只读,不修改) |
-m 最小天数 | 设置两次修改密码之间的最小天数 |
-M 最大天数 | 设置密码的最大使用天数 |
-d 最近密码修改日期 | 设置 上次修改密码的日期。 |
-W 警告天数 | 设置在密码过期前多少天开始提醒 |
-I 不活跃天数 | 设置密码过期后多少天禁用账户 |
-E 到期日期 | 设置账号的失效日期(格式 YYYY-MM-DD) |
示例
- 查看用户密码有效期信息
chage -l mooloco

- 设置密码 90 天必须更换一次
chage -M 90 mooloco
- 在密码到期前 7 天提醒用户
chage -W 7 mooloco
- 设置账号在 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
文件都会被删除.