linux用户
Linux账号类型
在Linux系统中,主要有以下几种类型的账号:
- 超级用户(root):在Linux系统中,超级用户(也称为root用户)拥有系统上所有权限。这个账号可以执行任何操作,包括对系统的修改、安装软件、管理其他用户等。一般情况下,普通用户不应该使用root账号,因为它具有很高的权限,可能会导致意外的系统损坏。
- 普通用户:普通用户是系统中的普通账号,通常用于一般日常操作。这些账号只有有限的权限,只能访问自己的文件和部分系统资源。普通用户可以执行大多数常见的操作,但不能对系统进行重要的修改和管理。
- 系统账号:系统账号是为了运行特定系统服务或者程序而创建的账号。这些账号通常不允许用户登录系统,它们的目的是用于安全和隔离服务。系统账号通常没有登录shell,例如 /bin/false 或 /sbin/nologin。
- 特殊账号:在Linux系统中,还有一些特殊的账号,如 nobody 和 daemon 等。这些账号用于执行特定的系统任务或服务,并且通常没有登录权限。
每个账号都有一个唯一的用户名和用户ID(UID),以及一个主组和一个或多个附加组。
用户信息文件
文件/etc/passwd存储了所有 Linux 用户的登录信息的文本文件。
这个文件通常包含以下信息:
- 用户名:每行以用户名开头,用于标识用户。
- 密码:在过去,密码会以加密形式存储在此列。现在通常会用'x'或者'*'代替,真正的密码存储在 /etc/shadow 文件中。
- 用户ID(UID):每个用户都有一个唯一的数字ID,用于系统识别用户。一般情况下,普通用户的UID从1000开始,root用户的UID为0。
- 组ID(GID):每个用户都属于一个或多个用户组,而该列则显示用户所属主组的GID。
- 用户信息:这一列通常包含用户的全名或其他说明性信息。
- 家目录:用户登录后的默认目录。
- 登录shell:用户登录时所使用的shell程序的路径。
root:x:0:0:root:/root:/bin/bash
例如以上这行的表示:户名为 root,密码字段被代替为 x
,UID和GID分别为 0,用户信息为 root
,家目录为 /root
,登录shell为 /bin/bash。
其中,密码字段被x占位,密码被加密保存在文件/etc/shadow中:
/etc/shadow 文件的权限通常设置为只有系统管理员可以读取和写入,一般用户无法直接查看或修改该文件。
john:$6$JF9ss/LS$DFr9K4nCpXQad7vL9TJLqPpLUV14u72Mhrz7vmFjRU3hgz.wEAGNflWpTb8UYs8cluqfMzEj/LKwi2Ue4lHuy/:18892:0:99999:7:::
其中各字段的含义如下(以冒号 : 分隔):
- john:用户名
- $6$JF9ss/LS$DFr9K4nCpXQad7vL9TJLqPpLUV14u72Mhrz7vmFjRU3hgz.wEAGNflWpTb8UYs8cluqfMzEj/LKwi2Ue4lHuy/:加密后的密码
- 18892:密码最后修改日期(自1970年1月1日起的天数)
- 0:密码需要更改的最小天数
- 99999:密码有效期
- 7:密码失效前的警告天数
- ::::保留字段
Linux 用户和用户组管理
添加账号
useradd [options] username
下面是一些常用的 useradd 命令选项及其说明:
- -c, --comment COMMENT:为用户添加备注信息。
- -d, --home HOME_DIR:指定用户的家目录路径。
- -g, --gid GROUP:指定用户所属的初始用户组。
- -G, --groups GROUPS:指定用户所属的其他附加用户组。
- -s, --shell SHELL:指定用户登录时使用的shell程序。
- -u, --uid UID:为用户指定一个唯一的用户ID。
- -m, --create-home:如果家目录不存在,则创建用户的家目录。
- -k, --skel SKEL_DIR:指定用于创建用户家目录的骨架目录。
- -p, --password PASSWORD:为用户设置初始密码。
- -e, --expiredate EXPIRE_DATE:指定用户账户的过期日期。
- -r, --system:创建一个系统账户,通常用于运行服务或进程。
实例:
如上图,创建用户hu,指定UID为2200,家目录为gnr,属组为0(root),附加组为10(wheel)。
如果要添加系统账号则需要添加-M不创建家目录,-s指定用户的登录Shell为/sbin/nologin不登录。
如上图,创建用户izu,不创建家目录,不登录,账户过期日期为2024.10.20。
修改账号
usermod [option] username
常用选项包括:
- -c, --comment COMMENT:为用户添加备注。
- -d, --home HOME_DIR:设置用户的主目录。
- -e, --expiredate EXPIRE_DATE:设置用户账户的过期日期。
- -g, --gid GROUP:设置用户的初始登录组。
- -G, --groups GROUPS:设置用户的附加组。
- -l, --login NEW_LOGIN:更改用户的登录名。
- -s, --shell SHELL:设置用户的登录 shell。
- -u, --uid UID:设置用户的用户标识号。
如上图所示,我们先是创建用户g2,再通过usermod -l将g2改名为G2。
删除账号
userdel [options] username
一些常用的选项包括:
- -r:删除用户账户时同时删除用户的主目录和邮箱目录。
- -f:强制删除用户账户,即使用户当前登录或者有未关闭的会话。
如上图所示,利用-rf选项删除正在使用的账号。
用户密码
1.修改当前用户密码:
passwd
执行此命令后,系统会提示您输入当前用户的密码,然后要求您输入新的密码两次以确认修改。
2.修改其他用户密码:
sudo passwd username
使用 sudo 以管理员权限修改其他用户的密码。命令执行后,系统会提示您输入管理员密码,然后要求输入新密码两次以确认修改。
3.强制用户下次登录时更改密码:
sudo passwd -e username
此命令将用户的密码设置为过期状态,强制用户在下次登录时更改密码。
4.锁定用户密码:
sudo passwd -l username
此命令将用户的密码锁定,即用户不能使用原密码登录系统。
5.解锁用户密码:
sudo passwd -u username
此命令将已锁定的用户密码解锁,使其可以使用密码登录系统。
6.设置密码过期时间:
sudo chage -d 0 username
此命令将用户密码的过期时间设置为0,即用户在下次登录时必须更改密码。
7.显示用户密码信息:
sudo chage -l username
此命令显示用户的密码信息,包括密码过期时间等。
8.修改密码时显示指定信息:
passwd -e -n 7 -x 30 username
此命令将密码设置为过期状态,用户登录后必须在7天内更改密码,并且密码有效期为30天。
用户账户初始配置文件
用户账户的初始配置文件通常位于/etc/skel/目录下。这个目录包含了新建用户时所需的初始配置文件,包括常见的.bash_profile、.bashrc、.bash_logout等。当我们创建一个新用户时,系统会复制/etc/skel/目录下的文件到新用户的家目录下,以便提供一个基本的工作环境。
通常来说,CentOS 7中的用户初始配置文件包括:
- .bash_profile:用于定义用户登录时需要执行的命令和环境变量设置。
- .bashrc:定义了用户每次启动bash shell时需要执行的命令,通常是一些常用的别名设置、PATH设置等。
- .bash_logout:在用户注销时执行的命令。
我们可以在/etc/skel/目录下编辑这些文件,以满足你的特定需求,然后当你创建新用户时,系统就会根据这些文件的内容为新用户创建对应的初始配置文件。
用户组管理
我们可以使用以下命令来管理用户组:
1.创建用户组:
sudo groupadd groupname
这将创建一个名为 groupname 的新用户组。
2.除用户组:
sudo groupdel groupname
这将删除名为 groupname 的用户组。
3.修改用户组:
sudo groupmod [options] groupname
这个命令可以用来修改用户组的属性,比如名称或者GID。选项可以根据需要添加。
4.列出用户组:
cat /etc/group
这会列出系统上所有的用户组及其相关信息。
5.查看用户组成员:
getent group groupname
这会显示名为 groupname 的用户组的成员列表。
6.将用户添加到用户组:
sudo usermod -aG groupname username
这会将名为 username 的用户添加到名为 groupname 的用户组中。
7.从用户组中删除用户:
sudo gpasswd -d username groupname
这会将名为 username 的用户从名为 groupname 的用户组中删除。
8.修改用户组密码:
sudo gpasswd groupname
这会让你设置名为 groupname 的用户组的密码。
用户信息
finger,w,who,users等命令可以用于查看和管理当前登录的用户信息。
1.finger(需要安装)
2.w
- -h:不显示列头信息。
- -s:只显示登录名和终端。
- -u:以用户及终端显示用户登入情况。
- -f:显示从何处登录。
- -i:显示用户的IP地址。
w 显示系统中当前用户的信息, 以及他们的进程。
第一行中依次显示:当前时间,系统的持续运行时间, 登录的用户数,和最近1,5,15分钟 的系统平均负载(loadaverage)。
接下来的条目显示每位用户的: 登录名, tty 名, 远程主机, 登录时间, 空闲时间,JCPU,PCPU, 以及 他们 当前进程 的 命令行。
JCPU时间指某个tty上所有进程用掉的时间, 不包括过去的后台任务, 但是包括正在 运行 的 后台任务。
PCPU 时间指当前进程用掉的时间, 可以在 "what" 域看到当前进程。
3.who
- -a, --all:显示所有登录的用户,包括系统的启动进程。
- -b, --boot:显示系统的启动时间。
- -d, --dead:显示已经注销的用户。
- -H, --heading:显示列标题。
- -l, --login:显示登录系统的用户。
- -m, --mesg:显示用户接收的消息状态。
- -q, --count:显示登录用户的数量。
- -r, --runlevel:显示当前运行级别。
- -s, --short:仅显示用户名、终端和登录时间。
- -T, -w, --mesg:显示用户是否可以接收消息(通常显示 "+" 或 "-")。
- --time:显示用户最后活动时间。
- -u, --users:显示登录的用户数量。
4.users
这个命令不需要任何选项,直接运行即可列出当前登录系统的用户名。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了