4.1 UNIX系统的用户和组
4.1.1 用户与UID
- UID定义:用户身份唯一标识符,16位或32位整数,范围0-65535。系统用户UID为0(root)、1-999(系统服务),普通用户从1000开始分配
- 特殊UID:UID 0具有最高权限,应避免创建非root用户使用此值
- UID冲突风险:不同用户名但相同UID会被系统视为同一用户,导致权限混乱
4.1.2 组与GID
- GID机制:组标识符用于权限管理,用户可属于多个组,主组信息存储在
/etc/passwd
,附加组在/etc/group
- 组权限优势:允许按部门或项目划分权限,例如仅允许
kmem
组访问内核内存 - 历史设计:早期使用16位整数存储GID以节省磁盘空间,现代系统扩展为32位
4.2 用户和组管理核心文件
4.2.1 /etc/passwd
- 结构解析:
username:x:UID:GID:Comment:/home/dir:/bin/bash
七个冒号分隔字段,包含用户基本信息 - 密码字段:现代系统用
x
占位,实际密码存储在/etc/shadow
- UID分类:0(root)、1-999(系统)、1000+(普通用户)
4.2.2 /etc/shadow
- 加密机制:
$加密算法$salt$哈希值
(如$6$salt$hash
使用SHA-512) - 安全特性:
- 仅root可读(权限400)
- 字段包含密码过期时间、最小修改间隔等策略
- 密码锁定:
!!
或*
表示账户被锁定
4.2.3 /etc/group
- 格式示例:
groupname:x:1234:user1,user2
字段含义:组名、密码占位符、GID、成员列表 - 附加组管理:用户可通过
newgrp
切换活动组
4.2.4 /etc/login.defs
- 关键配置项:
PASS_MAX_DAYS 90 # 密码最长有效期 UID_MIN 1000 # 最小普通用户UID CREATE_HOME yes # 自动创建主目录 ENCRYPT_METHOD SHA512 # 密码加密算法
4.2.5 /etc/default/useradd
- 默认参数:定义新用户的默认shell、主目录路径、过期时间等
4.3 用户管理命令
4.3.1 useradd/adduser
-
创建用户示例:
useradd -m -u 1500 -s /bin/zsh -c "Dev User" alice
-m
:创建主目录-s
:指定登录Shell
-
系统账户创建:
-r
选项创建UID<1000的系统账户
4.3.2 userdel
- 彻底删除用户:
userdel -r bob
删除账户并移除主目录 - 强制删除:
-f
选项可删除已登录用户(慎用)
4.3.3 usermod
- 修改主组:
usermod -g developers alice
- 附加组管理:
usermod -aG docker alice
(避免覆盖原有组)
4.4 组管理命令
4.4.1 groupadd
- 创建系统组:
groupadd -r -g 120 sysadmin
4.4.2 groupdel
- 删除条件:组内无用户时才可删除,否则需
-f
强制删除
4.4.3 groupmod
- 重命名组:
groupmod -n new_developers dev_team
4.5 密码管理
4.5.1 策略配置
- 密码复杂度:通过PAM模块设置(如
minlen=8 ucredit=-1
要求至少1大写字母) - 过期策略:
passwd -n 7 -x 30 -w 5 alice # 7天不可改,30天过期,提前5天警告
4.5.2 passwd命令
- 锁定账户:
passwd -l alice
在shadow文件中添加!
- 查看状态:
passwd -S alice
显示密码最后修改时间和状态
4.6 综合管理实例
4.6.1 用户添加流程
- 创建用户:
useradd -m -s /bin/bash john
- 设置密码:
passwd john
(交互式输入) - 加入附加组:
usermod -aG sudo john
4.6.2 用户删除步骤
- 终止进程:
killall -u john
- 删除用户:
userdel -r john
4.7 其他关键命令
4.7.1 身份信息
- id:显示用户UID、GID及所属组
id alice
→uid=1001(alice) gid=1001(dev) groups=1001(dev),998(docker)
4.7.2 登录监控
- who:显示登录用户、终端、时间
who -uH
显示空闲时间
4.7.8 su与sudo
- 环境切换:
su - root
(加载目标用户环境变量) vssu root
(保留当前环境) - sudo配置:
# /etc/sudoers alice ALL=(ALL) NOPASSWD: /usr/bin/apt-get
4.8 练习题
4.8.1 思考题
(1)为了提高系统的安全性,对用户密码应如何管理?
(2)叙述文件/etc/passwd、/etc/shadow和/etc/group文件的作用及其结构。
(3)为何要上锁一个用户?如何锁定一个用户?当需要时如何解锁?
(4)如何在删除一个用户时也同时删除它的家目录,在做操作时应注意些什么问题?
(5)如何观察当前系统的运行级别?
(6)如何确定用户所使用的终端?
(7)红帽的用户管理与Ubuntu的有什么不同,在使用时应注意此什么?
4.8.2 选择题
(1)在UNIX/Linux系统添加新用户的命令是( )。
A.groupadd B.usermod C.userdel D.useradd
(2)添加用户时使用参数( )可以指定用户目录。
A.-d B.-p C.-u D.-c
(3)用户mytest修改自己的密码可使用( )。
A.passwd B.passwd -d mytest C.passwd mytest D.passwd -l
(4)解锁一个用户的命令和选项对为( )。
A.passwd -u B.passwd -x C.passwd -d D.passwd -l
(5)删除一个用户密码所使用的命令和选项对为( )。
A.passwd -u B.passwd -x C.passwd -d D.passwd -l
4.8.3 综合题
(1)试述Linux系统的访问控制机制。
(2)试述su和sudo命令的用法及控制机制。
(3)试述如何进行用户和组管理。
4.8.4 答案
1.思考题
(1)为了提高系统的安全性,对用户密码应如何管理?
解:
每个用户都要按规定设置和使用密码,。使用密码时应注意以下几个问题:
(1)密码应该按规定定期或不定期的修改。
(2)密码内不应包含完整的单词、生日、电话号码、姓名、用户名、组名、宠物和地址等信息。(3)不同系统和用户应该有不同的密码。
(4)密码应易记且不要写在纸上。
(5)要保密,不要共用密码。
(6)输入密码时不要让别人看见,也不要窥视别人的密码。
系统的安全与方便是矛盾的,不能因方便而忽略安全问题,也不能因过于强调安全而影响正常使用,应该在安全和方便之间找到平衡点或进行取舍。
(2)叙述文件/etc/passwd、/etc/shadow和/etc/group文件的作用及其结构。
解:请参见4.2.1、4.2.2和4.2.3。
(3)为何要上锁一个用户?如何上锁一个用户?当需要时如何解锁?
解:
超级用户或具有管理权限的用户或以根据需要上锁或解锁一个用户。上锁一个用户的理由有很多,比如离开原工作岗位、离开单位或长期出差学习等,也可以是不“遵纪守法”等。上锁用户可以使用命令
# passwd -l user # usermod -L user
解锁时可以使用命令
#passwd -u user # usermod -U user
(4)如何在删除一个用户时也同时删除它的家目录,在做操作时应注意些什么问题?
解:
若在删除一个用户时,也同时删除它的家目录,可使用-r选项。比如,删除用户zhang3,并,同时要删除他的家目录,可以使用如下命令
# userdel -r zhang3
这里需要提醒的是,在删除用户家目录时或用户数据时,要确认再三,在确保不会造成后果时,才能删除。因此,在删除用户时,可以不同时删除用户家目录,经再三确认后,再使用rm等命令删除。
(5)如何观察当前系统的运行级别?
解:
观察或确定系统的当前运行级别,可以使用命令
$ who -r
$ runlevel
(6)如何确定用户所使用的终端?
解:
确定用户所使用的终端可以使用命令
$ tty
当使用-s选项运行tty时,即执行命令“tty -s”时,什么也不输出,只返回状态。状态为0时,表示命令是在终端上运行的,否则表示是在后台等非终端环境下运行的。这点在shell脚本中确定程序是在终端控制下运行或是在后台无终端控制下运行的非常有用。
(7)红帽的用户管理与Ubuntu的有什么不同,在使用时应注意此什么?
解:
主要从用户创建的角度观察此问题。
(1)若不带选项运行useradd,如useradd newuser,则按照默认方式创建newuser,但在红帽和Ubuntu中的结果是不同。这主要是因为在两类系统的/etc/login.defs(见4.2.4)和/usr/default/useradd(见4.2.5)的内容不同造成的。这些不同主要表现在是否创建家目录、家目录的权限和用户SHELL是sh或bash等方面。
以useradd test用户为例,默认情况下:
在红帽下,test的家目录/home/test,且为其创建家目录,使用/bin/bash作为登录shell。若不创建家目录,可使用-M选项。
在Ubuntu下,test的家目录/home/test,但不为其创建家目录,使用/bin/sh作为登录shell。若要创建家目录,可使用-m选项。
创建用户时,是否创建用户家目录,默认情况下取决于/etc/login.defs中变量CREATE_HOME的值,但可以使用-m强制创建,也可以使用-M强制不创建。不创建用户家目录也是常见的,当多个用户共用一个家目录时,只要第一个用户创建时创建了家目录就可以,而以后用户直接使用已经存在的目录。这时应该注意目录的存取权限问题,必要时可将这类用户放在一个组中,但要求目录及内容能被同组人按特定权限访问。
若仔细观察,用户还可以发现用户家目录的权限也不相同,在红帽和Ubuntu下分别为700(rwx------)和755(rwxr-xr-x)。这是由/etc/login.defs中的UMASK所决定的。
(2)若要让useradd在两类系统中的行为相同,可修改/etc/login.defs或/usr/default/useradd。比如,若要让Ubuntu默认也创建用户家目录,则可以在其/etc/login.defs中增加如下一行:
CREATE_HOME yes
若在创建用户时没有创建家目录,用户创建后,还可手工为其创建家目录,但后要修改家目录归属关系和存取权限。
最简单的办法是,将红帽中的/etc/login.defs和/usr/default/useradd复制到Ubuntu,或将Ubuntu中的/etc/login.defs和/usr/default/useradd复制到红帽,但要注意副作用。
2.选择题
(1)D;(2)A;(3)A;(4)A;(5)C
3.综合题
(1)试述Linux系统的访问控制机制。
解:
对UNIX/Linux系统的管理与使用是以用户(user)为主体的。自然人要想使用系统,必须以某个已在系统中存在的用户身份登录,且通过密码验证后,才能进入系统,并按权限使用。
Unix/Linux系统中有两类用户:超级用户和一般用户。超级用户有至高无上的权力,可做任何事情;一般用户只能在给定的权限范围内进行工作,不得越权行事。用户又按实际的需要分成不同的组(group)。同组用户按规定和目的享有某些共同的权限。
root用户或具有管理权限的用户可以创建或删除用户,当需要时可以创建用户。当一个用户(离开岗位、离开单位或长期出差)不再使用时,可以将其删除,也可以将其上锁。需要时,再创建或解锁。
对于系统中不再使用的用户帐号,应尽早的删除它,因为多余用户的存在可能是安全的隐患。删除用户可以使用userdel命令,删除用户时,是否同时删除用户家目录或数据要视具体情况而定。
每个用户都要按规定设置和使用密码,密码管理命令为passwd
(2)试述su和sudo命令的用法。
解:
①su
su命令的功能是在使用者不退出系统的情况下以其它新用户的身份工作。当不指定用户时,默认root。当不指定任务时,将以新用户的身份启动一个shell;当指定任务时,则以新用户的身份执行任务。在以新用户工作的过程中,有效uid和有效gid变为了新用户的uid和gid。
当不使用登录模式(-、-l或--login)时,su不会为新用户正确设置环境变量。
若要实现身份的彻底转换一定要采用登录模式(使用-、-l或--login选项)。
工作完毕后,按^D变为原来的自己。
在Linux系统中,su的使用都受PAM的控制,具体的控制文件为/etc/pam.d/su和/etc/pam.d/su-l的控制,具体情况参见教材或su的在线文档。
②sudo
sudo的功能是以其它用户(当然也包括root用户)的身份执行命令。
sudo的配置文件是/etc/sudoers,能使用sudo命令的用户必须在此文件中定义,且设置正确。系统为此配置文件提供了一个专用的编辑命令visudo,除了编辑修改sudoers文件外,还可帮助使用者检查配置文件内容的正确性。修改sudoers文件时请使用visudo,但不同系统中使用的编辑器不同,红帽使用vi,Ubuntu使用的是nano。
关于sudoers的设置可参考sudo和sudo.conf的man手册,具体操作可参见实验4。
使用sudo命令,具体管理“角色”或职能的普通用户(比如test),可以履行root用户的的管理职能。若要让一个普通用户(比如test)变为管理员或具有管理职能的用户,最简单办法是:在红帽系统可将其加入wheel组;在Ubuntu中,将其加入sudo或admin组。命令为
# usermod -G wheel test
# usermod -G sudo test
关于sudo命令的使用,可以安装vsftpd软件包为例说明如下:
红帽
# dnf install vsftpd -y # root用户
$ sudo dnf install vsftpd -y # 管理员用户(比如刚才的test)
Ubuntu
# apt install vsftpd -y # root用户
$ sudo apt install vsftpd -y # 管理员用户(比如刚才的test)
(3)试述如何进行用户和组管理。
解:
对UNIX/Linux系统的管理与使用是以用户(user)为主体的。自然人要想使用系统,必须以某个已在系统中存在的用户身份登录,且通过密码验证后,才能进入系统,并按权限使用。
UNIX/Linux系统的用户又按实际的需要分成不同的组(group)。同组用户按规定和目的享有某些共同的权限。
root用户或具有管理权限的用户可以创建或删除用户,也可创建或删除组。没有任何特殊要求时,创建用户zhang3时只需要,执行命令
# useradd zhang3
就可以了。这里,将按默认规定在创建用户zhangsan时,也同时创建一个zhang3组,且用户zhang3所在的组为zhang3。
现在,假定系统需要使用特定的组(组名为mygrp,GID为66)和特定的用户(用户为myproc,UID为666),其它的由系统默认,创建的方法及过程如下:
# groupadd -g 66 mygrp
# useradd -m -g mygrp -u 666 myproc
以上操作是在GID为66,UID为666在之前均未使用过的情况,若是已经使用过的,需要在命令中使用-o,告诉命令useradd或groupadd,创建新用户或新组时,要使用已经使用过的GUI或UID,或者说,要创建ID不唯一的用户或组。方法如下:
# groupadd -o -g 66 mygrp
# useradd -m -g mygrp -o -u 666 myproc
每个用户都要按规定设置和使用密码。对于系统中不再使用的用户帐号,应尽早的删除它,因为多余用户的存在可能是安全的隐患。删除用户可以使用userdel命令,删除用户时,是否同时删除用户家目录或数据要视具体情况而定。
删除用户时,一般不删除家目录,原因是家目录可能被共享或存放有重要数据,因此需要慎之又慎,确认再三。用户的家目录删除,可在确定不会造成后果的情况下,使用带有-r选项的rm命令删除。
若要删除用户时,同时删除用户的家目录,可以使用带有-r选项的userdel命令。
总结
- 最小权限原则:使用sudo代替直接切换root
- 定期审计:检查
/etc/passwd
和/etc/shadow
的权限(应为644和400) - 密码策略:启用SHA-512加密,设置90天过期周期
通过深入理解这些机制和工具,管理员可有效提升系统的安全性和管理效率。