Linux用户基础知识
一、Linux用户管理背景和知识模块概述
#什么是Linux的用户管理 Linux 的用户管理是指对系统中用户账户的创建、删除、修改以及权限分配等一系列操作的管理过程。它主要涉及到用户账户信息的存储、用户身份验证以及对用户访问系统资源的控制。 #linux用户管理的意义 linux操作系统属于类Unix操作系统,Unix操作系统来源于Multics,Multics起初的设计就是一个多用户的操作系统,这样设计的主要目的是可以让多个用户共同使用操作系统,这样的设计能增加计算机硬件资源的使用率。Unix借鉴了Multics系统的设计思想,所以Unix系统也支持多用户访问,那Linux借鉴了Unix系统的设计思想,所以Linux系统也支持多用户访问。 最初的多用户设计主要是用于增加计算机硬件资源的使用率,但是随着操作系统的不断发展,多用户访问的操作系统除了能增加计算机硬件资源的使用率外,还带来了以下好处: 1.资源共享与协作 硬件资源共享:多个用户可以共享计算机的硬件资源,如打印机、扫描仪等外部设备,以及 CPU、内存和存储等内部资源。这避免了为每个用户单独配备一套完整的硬件设备,提高了硬件资源的利用率,降低了成本。 数据共享与协作:多用户操作系统允许用户之间方便地共享数据和文件。不同用户可以在同一台计算机上创建、编辑和访问共享文件夹中的文件,便于团队协作完成项目,提高工作效率。例如,在企业环境中,员工可以共享文档、报表等文件,方便信息交流和协同工作。 2.提高系统可靠性和稳定性 进程隔离:每个用户的进程在操作系统中是相对独立的,一个用户的程序崩溃或出现错误,通常不会影响到其他用户的正常使用。操作系统通过进程管理和内存保护机制,确保不同用户的进程之间相互隔离,提高了系统的整体可靠性和稳定性。即使某个用户的程序出现问题,也不会导致整个系统崩溃,其他用户可以继续正常工作。 系统监控与管理:多用户操作系统提供了更完善的系统监控和管理功能。系统管理员可以对各个用户的活动进行监控,及时发现并解决系统中出现的问题。例如,管理员可以查看每个用户对系统资源的使用情况,如 CPU 占用率、内存使用量等,以便合理分配资源,优化系统性能。同时,管理员还可以对用户的访问权限进行管理,确保系统的安全性和稳定性。 3.用户个性化与灵活性 用户个性化设置:每个用户可以根据自己的需求和偏好进行个性化设置,如桌面背景、字体、颜色方案等。这些个性化设置不会影响其他用户的使用环境,每个用户都能在自己熟悉和舒适的环境中工作。 软件安装与使用:不同用户可以根据自己的工作和学习需求安装和使用不同的软件。例如,一个用户可能需要安装绘图软件进行设计工作,另一个用户可能需要安装编程工具进行软件开发,多用户操作系统允许每个用户独立地安装和使用所需的软件,互不干扰,提供了更大的灵活性。 4.安全性增强 用户认证与授权:多用户操作系统通过用户认证和授权机制,确保只有授权用户能够访问系统资源。每个用户都有自己的用户名和密码,系统会对用户的身份进行验证,只有验证通过的用户才能登录系统,并根据其权限访问相应的资源。这有效地防止了未经授权的访问,保护了系统和用户的数据安全。 访问控制:操作系统可以为不同用户或用户组设置不同的访问权限,对文件、文件夹和系统功能进行精细的访问控制。例如,管理员可以将某些敏感文件设置为只有特定用户或用户组才能读取和写入,其他用户则没有访问权限。这种访问控制机制可以保护重要数据的安全性,防止数据泄露和误操作。 5.对当代软件设计产生了深远影响 当代的软件设计也参考了多用户操作系统的设计思想,现在几乎所有带有网络功能的软件都是多用户形式的,通过用户登录获取更好的软件体验。 #Linux用户管理模块知识构成 1.本地用户管理 2.本地密码管理 3.本地用户组管理 4.本地用户组密码管理 5.自定义缺省用户配置 6.禁用用户登录 7.网络用户介绍
二、用户管理详解
1、Linux系统中的用户种类介绍
在 Linux 系统中,用户主要分为以下几类: 1. 根用户(root) root 用户具有系统的最高权限,能够对系统进行任何操作,包括安装和卸载软件、修改系统配置文件、管理用户和用户组等。 root 用户通常用于系统的初始设置、系统维护、管理任务以及执行一些只有根用户才能执行的特定命令。但由于其权限过高,误操作可能会对系统造成严重破坏,因此在日常使用中,一般不建议使用根用户登录系统,而是使用普通用户登录,在需要执行特权操作时使用 sudo 命令来临时获取根权限。 2. 普通用户 普通用户权限受到系统和文件所有者的限制,只能在其被授权的范围内进行操作,如访问自己的家目录、运行自己有权限执行的程序等。 普通用户用于日常的工作和操作,如文档编辑、运行普通应用程序等。每个普通用户都有自己的家目录,用于存储个人文件和配置信息。 3. 系统用户 系统用户通常是系统在安装过程中自动创建的,用于运行特定的系统服务和进程,一般不用于交互式登录。系统用户对系统资源的访问权限是有限的,仅满足其运行特定服务的需要。 例如,apache 用户通常用于运行 Web 服务器进程,mysql 用户用于运行 MySQL 数据库服务等。这些系统用户的存在可以提高系统的安全性,将不同的服务和进程隔离开来,减少因某个服务被攻击而导致系统整体被入侵的风险。

2、普通用户和系统用户创建
创建用户我们使用的命令是useradd或者adduser,这两个命令功能是一样的。一个用户的创建意味着这个用户可以使用这个用户所在操作系统的资源,所以创建是只有系统管理员才能进行的操作,所以我们需要使用root用户来进行用户的创建,实际上在用户管理模块涉及到的命令大多都需要使用管理员账号来执行。 adduser命令在不同的 Linux 发行版中可能有所不同,但通常也用于创建用户。在一些发行版中,它是useradd的一个符号链接,功能基本相同;在另一些发行版中,adduser是一个更友好、交互式的创建用户工具。例如,在 Ubuntu 中使用adduser命令创建用户时,会提示用户输入用户的详细信息,如全名、房间号码等,并且会自动创建用户的家目录和设置一些默认权限。使用方式很简单,直接在命令行输入adduser newuser,然后按照提示操作即可。 任何用户必须属于一个用户组。当使用useradd命令创建用户且不指定用户组的情况下,会创建一个和该用户同名的用户组。 当使用useradd命令创建一个用户的时候,默认情况会在/home/创建同名的家目录,同时会在/var/spool/mail/目录下创建同名的邮件文件,邮件文件里面用于保存该用户收到的邮件。 useradd ot会在/home下创建/home/ot的目录,该目录作为ot用户的家目录,同时会在/var/spool/mail/目录下创建/var/spool/mail/ot的邮件文件,用于保存ot用户收到的邮件。 -c"注释信息":为用户添加描述性注释,通常用于记录用户的全名、部门等信息。 -d 家目录路径:指定用户的家目录。若不指定,默认是 /home/用户名。 -m:若指定的家目录不存在,自动创建它。常与-d 配合使用。 -s 登录Shell:设定用户登录后使用的默认 Shell。常见的有 /bin/bash、/bin/zsh 等。 -u UID:手动指定用户的用户 ID(UID)。若无特殊需求,不建议手动指定。 -r:创建系统用户,系统用户通常用于运行系统服务,其 UID 一般小于 1000。系统用户不创建家目录和邮件文件 -p 加密密码:直接为用户设置加密后的密码。 -g 用户组名或GID:指定用户的主用户组,可以用组名或组 ID(GID)。 -G 用户组名1,用户组名2...:指定用户要加入的附加用户组,多个组名用逗号分隔。 -N:不创建与用户同名的用户组作为主用户组,而是使用默认组(users)。
3、用户配置文件/etc/passwd详解
/etc/passwd是 Linux 系统中用于存储用户账户信息的重要配置文件。 /etc/passwd文件中的每一行代表一个用户账户信息,每行由 7 个字段组成,字段之间用冒号(:)分隔。其基本格式如下: 用户名:密码占位符:用户ID(UID):组ID(GID):注释信息:家目录:登录Shell 1.用户名:是用户在系统中登录和标识自己的名称,具有唯一性。例如,root、testuser等。 2.密码占位符:在早期的 Linux 系统中,这里存储的是用户密码的加密字符串。但现在,为了提高系统安全性,通常使用x表示密码已被存储在/etc/shadow文件中。 3.用户 ID(UID):是系统用于识别用户的唯一数字标识。UID 0通常被分配给root用户,拥有系统的最高权限。1-999保留给系统用户和服务使用,这些用户通常用于运行特定的系统服务,一般不用于交互登录。1000及以上用于普通用户。 4.组 ID(GID):标识用户所属的主用户组。每个用户都至少属于一个组,用户的文件和目录权限与所属组密切相关。 5.注释信息:通常用于记录用户的一些描述性信息,如用户的真实姓名、部门等。这部分内容可以为空,也可以包含多个字段,字段之间用逗号分隔。 6.家目录:指定用户登录后所在的默认目录,也是用户存储个人文件的主要位置。例如,普通用户的家目录通常在/home/用户名,而root用户的家目录是/root。 7.登录 Shell:指定用户登录后使用的命令解释器。常见的有/bin/bash、/bin/zsh、/bin/sh等。如果设置为/sbin/nologin,则表示该用户不能登录系统,只能用于系统服务或其他特定用途。 在更改 /etc/passwd 时,例如添加新用户,原始的 /etc/passwd 文件将保存为 /etc/passwd-。这种现象也适用于 /etc/shadow-、/etc/gshadow 和 /etc/group- 文件。 当这些文件被更改时,旧文件将以破折号“-”结尾保存。 因此,这些只是备份文件。
4、查看一个用户的信息
1.id命令 id命令主要用于查看用户的用户名,所属组的名字,UID和GID。 id命令在不加参数的情况下,只会查看当前shell用户的用户信息。 id命令可以查看其它用户的信息 -u,--user只查看用户的UID -g,--group只看主用户组的GID -G,--groups查看所有用户组的GID -n,--name查看名称而非数字,必须和 -ugG 一起使用 2./etc/passwd 可以通过查看/etc/passwd文件的内容来查看用户的完整信息,如果想获取特定用户信息需要使用grep命令配合管道进行筛选 3.getent getent命令是用于查询各种数据库(如/etc/passwd、/etc/group等)中信息的工具,它可以按照Name Service Switch (NSS)配置来获取系统用户、组、主机等相关信息,常见的使用场景和功能有: 查询用户信息:在类 Unix 系统中,/etc/passwd文件存储了用户的基本信息。使用getent passwd命令可以获取系统中所有用户的信息,输出内容包括用户名、密码占位符、用户 ID、组 ID、用户描述、主目录和默认 shell 等字段。若只想查看特定用户信息,在命令后加上用户名,如getent passwd root,就只会显示root用户的相关信息。 查询组信息:类似地,/etc/group文件存储了组的相关信息。getent group命令可以获取所有组的信息,每行包含组名、组密码占位符、组 ID 以及属于该组的用户列表。使用getent group wheel,能查询wheel组的详细信息。 查询主机信息:getent hosts命令可根据系统的名称解析配置(如/etc/hosts文件、DNS 设置等)获取主机的 IP 地址和主机名等信息。若系统的/etc/hosts文件中有192.168.1.100 myserver这样的记录,执行getent hosts myserver就能得到192.168.1.100 myserver的查询结果。 查询网络服务信息:getent services命令用于获取系统中定义的网络服务信息,例如常见服务的端口号和协议等。 getent passwd user
5、修改用户的信息
1.usermod -c: 修改用户账户的备注信息。 -d: 修改用户的主目录,使用该选项时,通常需要搭配 -m 选项,这样可以将用户旧主目录下的文件迁移到新的主目录。 -g: 修改用户的主组,主组必须是已经存在的组。 -G: 将用户添加到指定的附加组中,多个组之间用逗号分隔。 -l: 修改用户的登录名。 -s: 修改用户的默认登录 shell。 -u: 修改用户的 UID(用户标识符),新的 UID 必须是唯一的。 -a: 与 -G 选项配合使用,将用户追加到指定的附加组,而不是覆盖原有的附加组。 2./etc/passwd 可以通过修改/etc/passwd来修改用户的信息,但是一般不建议这样做。 3.chfn(非特权命令)chfn 主要用于修改用户的 finger 信息,包括真实姓名、房间号、工作电话、家庭电话等。 用户可以更改自己的信息,但是要提供自己的密码。 4.chsh(非特权命令)chsh 用于修改用户的默认登录 shell。 用户可以更改自己的信息,但是要提供自己的密码。
6、删除一个用户
1.userdel -r 即--remove,在删除用户账户的同时,一并删除该用户的主目录及其邮箱(通常位于/var/spool/mail目录下)。 -f 即--force,强制删除用户账户。即便用户当前已登录,或者其主目录下有正在被使用的文件,也能强制删除。不过使用该选项时要谨慎,因为可能会造成数据丢失或系统不稳定。 #注意事项 (1)权限要求:运行userdel命令需要有 root 权限或者使用sudo,因为删除用户账户涉及对系统关键文件(如/etc/passwd、/etc/shadow等)的修改。 (2)数据备份:在使用-r选项删除用户主目录前,要确保已经备份了重要数据,因为删除操作不可恢复。 (3)进程影响:如果用户有正在运行的进程,直接删除用户账户可能会导致这些进程出现异常。建议先终止用户的所有进程,再删除账户。 (4)用户会话:在删除用户之前,要确保该用户没有正在进行的会话。可以使用 who 或 w 命令查看当前登录的用户,若该用户仍处于登录状态,可使用 pkill -KILL-u username 强制终止其所有进程。找到有所有人为该用户的文件,拷贝到指定目录进行备份,或者干脆删除。 (5)系统依赖:某些系统服务可能依赖特定用户运行,删除这些用户可能会影响系统正常运行。在删除用户前,要确认该用户是否与系统服务有关联。 2./etc/passwd 可以通过修改/etc/passwd配置文件进行用户删除,但是不建议这样,因为会有很多残留的信息不会被同时删除,比如用户的密码信息等。
7、切换用户
su(switch user)是最常用的切换用户的命令,它允许你切换到其他用户账户,有以下两种使用方式: 1.切换到 root 用户 如果你当前是非 root 用户,要切换到 root 用户,可以使用以下命令: su 执行该命令后,系统会提示你输入 root 用户的密码。输入正确密码后,你就会切换到 root 用户。如果你不想每次都输入密码,可以在su后面加上-参数: su- -参数会模拟登录过程,不仅会切换用户身份,还会重新初始化用户的环境变量,让你拥有和直接登录 root 用户一样的环境。 2.切换到指定用户 如果你想切换到其他非 root 用户,可以在su后面加上目标用户名,例如切换到名为testuser的用户: su testuser 执行该命令后,系统会提示你输入testuser用户的密码。输入正确密码后,你就会切换到testuser用户。 同样,使用-参数可以重新初始化用户的环境变量: su- testuser 3.su可以使用-c参数,以某个用户身份执行命令 root用户使用su- gls -c id显示的结果和gls执行id命令的结果是一样的 4.使用场景 (1)普通用户切换到root用户 (2)root用户切换到普通用户 (3)以某个用户身份执行命令而不是切换到指定用户