一、知识点总结
1.1 用户账户管理基础
Linux是一个多用户多任务操作系统,每个用户都有唯一的用户名和用户标识符(UID)。用户管理是系统管理员最基本的工作之一。
常用命令:
useradd [选项] 用户名
主要参数说明:
-m:自动创建用户主目录(/home/用户名)
-s:指定用户登录Shell(如/bin/bash)
-G:将用户添加到附加组(逗号分隔多个组)
-d:指定用户主目录路径
-p:直接设置用户密码(不推荐,不安全)
示例:
sudo useradd -m -s /bin/bash -G jsj24 jsj0217
上述命令创建用户jsj0217,自动创建家目录,指定bash为登录Shell,并加入jsj24附加组。
1.2 用户组管理
Linux用户组用于批量管理用户权限。每个用户有一个主组(GID)和多个附加组。
常用命令:
groupadd [选项] 组名
groups 用户名 # 查看用户所属组
groupmod [选项] 组名 # 修改组信息
groupdel 组名 # 删除组
创建组后,可通过useradd的-G参数或将用户加入组:
sudo groupadd jsj24
sudo usermod -aG jsj24 用户名
1.3 密码管理与锁定
用户密码管理是用户管理的重要组成部分。Linux使用shadow机制存储加密密码。
常用命令:
passwd [用户名] # 修改密码(root可改任意用户,普通用户只能改自己的)
passwd -l 用户名 # 锁定用户密码(禁止登录)
passwd -u 用户名 # 解锁用户密码
passwd -S 用户名 # 查看用户密码状态
passwd -e 用户名 # 强制用户下次登录时修改密码
passwd -S查看状态时输出格式:用户名 状态 最近修改日期 最小间隔 最大间隔 警告天数 宽限天数
状态标识:L=锁定,P=有密码,NP=无密码
1.4 文件权限基础(rwx)
Linux文件权限是安全模型的核心。每个文件有三类权限,分别对应三类用户:
权限类型:r(读read=4)、w(写write=2)、x(执行execute=1)
用户类别:u(文件属主user)、g(所属组group)、o(其他用户others)
权限组合示例:
rwxr-xr– => 754
rw-r–r– => 644 (普通文件默认权限)
rwxr-xr-x => 755 (目录默认权限/可执行文件)
通过ls -l命令可查看文件权限:
ls -l 文件名 # 查看文件详细信息(含权限)
ls -ld 目录名 # 查看目录本身的信息
1.5 chmod命令(修改权限)
chmod命令用于修改文件权限,支持数字法和符号法两种方式。
数字法:
chmod 755 文件名 # 属主rwx(7),组r-x(5),其他r–(5)
chmod 644 文件名 # 属主rw-(6),组r–(4),其他r–(4)
符号法:
chmod u+x 文件名 # 给属主添加执行权限
chmod g-w 文件名 # 去掉组的写权限
chmod o=r 文件名 # 设置其他用户权限为只读
chmod a+x 文件名 # 给所有用户添加执行权限
符号说明:u=属主,g=组,o=其他,a=所有,+=添加,-=去除,=设置
1.6 chown命令(修改属主属组)
chown命令用于修改文件的属主和属组。
常用格式:
chown 新属主 文件名 # 修改属主
chown 新属主:新属组 文件名 # 同时修改属主和属组
chown :新属组 文件名 # 仅修改属组
chown -R 属主:属组 目录 # 递归修改目录及目录下所有文件
注意:修改属主需要root权限(使用sudo)。
1.7 umask默认权限掩码
umask定义了用户创建文件/目录时的默认权限掩码。系统从最大权限中减去umask值得到实际权限。
计算规则:
文件默认权限 = 666 – umask(文件无执行权限)
目录默认权限 = 777 – umask(目录有执行权限)
常见umask值:
umask 0022 => 文件644(rw-r–r–),目录755(rwxr-xr-x) [最常见]
umask 0027 => 文件640(rw-r—–),目录750(rwxr-x—) [更严格]
umask 0077 => 文件600(rw——-),目录700(rwx——) [最严格]
查看和设置umask:
umask # 显示八进制值
umask -S # 显示符号形式
umask 0027 # 临时修改(仅当前会话有效)
永久修改:将umask值写入~/.bashrc文件:
echo "umask 0027" >> ~/.bashrc
source ~/.bashrc
1.8 su与sudo切换用户
Linux中切换用户身份有两种主要方式:su和sudo。
su命令:
su 用户名 # 切换到指定用户(需要目标用户密码)
su – 用户名 # 切换并加载目标用户的环境变量
su # 切换到root用户
sudo命令:
sudo 命令 # 以root权限执行命令(需要当前用户密码)
区别:su需要目标用户的密码,切换后获得目标用户的全部权限;sudo只需要当前用户密码,临时提权执行单条命令,更加安全可控。
将普通用户加入sudo组可获得sudo权限:
sudo usermod -aG sudo 用户名
二、知识点对应例题
以下例题围绕本文知识点设计,涵盖用户管理、权限管理、信号量等核心考点,每题包含题目、选项、答案和详细解析。
例题1:用户创建命令参数
题目:在Linux系统中,使用useradd命令创建新用户时,以下哪个参数可以自动创建用户的家目录?
A. -g B. -m C. -d D. -s
答案:B
解析:-m参数表示–create-home,自动为用户创建家目录(默认在/home/用户名下)。-g参数用于指定用户的主组,-d参数用于指定家目录路径(但不自动创建),-s参数用于指定用户的登录Shell。如果不加-m参数,useradd默认不会创建家目录,用户登录后会进入根目录,且无法加载.bashrc等配置文件,造成使用不便。
例题2:chmod权限数字计算
题目:某文件权限为rw-r–r–,其对应的八进制数字表示是多少?
A. 644 B. 755 C. 655 D. 744
答案:A
解析:权限rw-r–r–拆分为三组:属主rw-(read+write=4+2+0=6),组r–(read=4+0+0=4),其他r–(read=4+0+0=4),组合起来就是644。755对应rwxr-xr-x(属主有执行权限),655对应rw-r-xr-x(不常见),744对应rwxr–r–(属主有执行权限)。
例题3:umask与默认权限
题目:某用户的umask值为0027,则该用户新建的文件默认权限是多少?
A. 644 B. 640 C. 755 D. 750
答案:B
解析:umask的权限计算采用按位逻辑运算,而非简单算术减法。文件默认权限 = 666 AND (NOT umask)。NOT 027(按位取反,只取低9位)= 750,666 AND 750 = 640。因此umask=0027时,新建文件默认权限为640(rw-r—–),其他用户不可读。
例题4:chown命令用法
题目:要将文件test.txt的属主改为user1,属组改为devgroup,以下哪个命令是正确的?
A. chown user1:devgroup test.txt B. chown devgroup:user1 test.txt
C. chown user1.devgroup test.txt D. chgrp user1 test.txt
答案:A
解析:chown命令修改属主和属组的格式为chown 属主:属组 文件名,属主和属组之间用冒号:分隔。选项B把属主和属组位置写反了;选项C用了点号分隔,这是旧式写法(chown user1.devgroup),虽然某些系统也支持,但标准写法是用冒号;选项D的chgrp命令只能修改属组,不能同时修改属主。
例题5:passwd命令锁定用户
题目:管理员需要锁定用户testuser的密码,使其无法登录,应使用以下哪个命令?
A. passwd -d testuser B. passwd -l testuser C. passwd -u testuser D. passwd -k testuser
答案:B
解析:passwd -l(lock)命令会锁定用户密码,在/etc/shadow文件中该用户的密码字段前添加!号,使其无法通过密码认证登录。passwd -d(delete)会删除用户密码(使其无密码,反而更危险);passwd -u(unlock)是解锁操作,与锁定相反;passwd -k(kill)会删除用户的过期密码信息,强制用户下次登录时修改密码。
例题6:信号量与互斥(操作系统综合)
题目:如果有3个进程共享同一互斥段,每次最多允许2个进程进入该互斥段,则信号量的初值应设置为(),当有3个进程都尝试进入时,信号量的值为()。
A. 2, -1 B. 3, 0 C. 2, -2 D. 1, -1
答案:A
解析:信号量初值代表可同时进入的进程数,最多允许2个进程进入,所以初值为2。第1个进程P操作:S=2-1=1,进入;第2个进程P操作:S=1-1=0,进入;第3个进程P操作:S=0-1=-1,被阻塞等待。因此当3个进程都尝试进入时,信号量值为-1(绝对值1表示有1个进程在等待队列中)。
三、实验内容
本实验在Kali Linux环境下进行,虚拟机软件为VMware Workstation Pro,登录账号为zouhuixin0217(姓名拼音+学号后四位)。以下为实验环境确认和具体操作步骤。
3.0 实验环境确认
打开终端后,首先使用who命令查看当前登录用户信息:
who

图1:使用who命令查看当前登录用户信息
3.1 任务1:用户账户管理
步骤(1):创建用户组并新建用户
操作描述:创建用户组jsj24,然后新建用户jsj0217(jsj+学号后4位),同时将其加入组jsj24。
sudo groupadd jsj24
sudo useradd -m -s /bin/bash -G jsj24 jsj0217
命令解释:
sudo groupadd jsj24:以管理员权限创建新用户组jsj24。
sudo useradd -m -s /bin/bash -G jsj24 jsj0217:创建新用户jsj0217,-m参数自动创建家目录,-s /bin/bash指定登录Shell为bash,-G jsj24将用户加入jsj24附加组。
id jsj0217
验证命令:使用id命令查看用户jsj0217的UID、GID及所属组信息,确认用户创建成功且已加入jsj24组。

图2:创建用户组jsj24并新建用户jsj0217

图3:使用id命令验证用户jsj0217的组信息
步骤(2):创建第二个用户并加入组
操作描述:创建用户jsj240217(jsj24+学号后4位),并让其加入jsj24组。
sudo useradd -m -s /bin/bash -G jsj24 jsj240217
id jsj240217
命令解释:
与步骤(1)类似,创建新用户jsj240217并加入jsj24组。通过id命令验证用户信息。

图4:创建用户jsj240217并验证
步骤(3):设置用户密码
操作描述:使用passwd命令为新用户jsj0217设置登录密码my123456。
sudo passwd jsj0217
命令解释:
sudo passwd jsj0217:以root权限修改用户jsj0217的密码。系统会提示输入新密码并确认输入。注意密码输入时不会显示字符,这是Linux的安全机制。

图5:使用passwd命令设置用户jsj0217的密码
步骤(4):锁定用户密码
操作描述:使用passwd命令锁定用户jsj0217的密码,然后查看锁定状态。
sudo passwd -l jsj0217
sudo passwd -S jsj0217
命令解释:
sudo passwd -l jsj0217:锁定用户jsj0217的密码,锁定后该用户将无法通过密码认证登录。
sudo passwd -S jsj0217:查看用户jsj0217的密码状态。输出中如果显示"L"(Locked),表示密码已被锁定。

图6:锁定用户密码并查看状态(L表示已锁定)
步骤(5):切换到tty2尝试登录
操作描述:切换到第二个虚拟终端(tty2),尝试以jsj0217用户登录。
Ctrl + Alt + F2 # 切换到tty2终端
在登录提示符下输入用户名jsj0217和密码my123456。
预期结果:登录失败。因为密码已被锁定(步骤4),系统会提示认证失败。

图7:切换到tty2终端并输入用户名登录

图8:密码锁定后登录失败提示
步骤(6):解锁密码并重新登录
操作描述:切回图形界面,使用管理员账户解锁用户密码,然后再在tty2中尝试登录。
Ctrl + Alt + F7 # 切回图形界面(或F1)
sudo passwd -u jsj0217 # 解锁用户密码
命令解释:
Ctrl + Alt + F7:切回图形界面(Kali Linux中图形界面通常在F7,也可能是F1)。
sudo passwd -u jsj0217:解锁用户jsj0217的密码,解除锁定状态后该用户可以正常登录。
预期结果:解锁成功后,回到tty2终端使用jsj0217/my123456登录,应该可以成功登录。

图9:切回图形界面并解锁用户密码

图10:密码解锁成功
步骤(7):查看账号信息
操作描述:登录成功后,查看当前用户的账号信息。
id
whoami
grep jsj0217 /etc/passwd
命令解释:
id:显示当前用户的UID、GID及所属组信息。
whoami:显示当前登录用户名。
grep jsj0217 /etc/passwd:在/etc/passwd文件中搜索jsj0217用户的详细配置信息(包括家目录路径、登录Shell等)。

图11:查看用户账号信息(id/whoami/grep)
步骤(8):查看用户组信息
操作描述:查看用户jsj0217所属的用户组信息。
groups jsj0217
命令解释:
groups jsj0217:显示用户jsj0217所属的所有组,包括主组和附加组。输出应显示jsj0217属于jsj0217组和jsj24组。

图12:使用groups命令查看用户组信息
步骤(9):修改用户名
操作描述:将用户jsj0217的用户名修改为Macs0217(Macs+学号后4位)。
sudo usermod -l Macs0217 jsj0217
命令解释:
sudo usermod -l Macs0217 jsj0217:-l参数用于修改用户名(login name),将原用户名jsj0217改为Macs0217。注意:被修改的用户当前不能处于登录状态,否则会失败。
id Macs0217
验证:使用id命令确认用户名已修改成功。

图13:使用usermod -l修改用户名为Macs0217
步骤(10):修改用户名并同步修改主目录
操作描述:切换到账户zouhuixin0217,修改用户jsj0217的用户名为Macs0217,并同时将其用户主目录修改为/home/Macs0217。
sudo usermod -l Macs0217 -d /home/Macs0217 -m jsj0217
命令解释:
sudo usermod -l Macs0217:修改用户名为Macs0217。
-d /home/Macs0217:设置新的主目录路径为/home/Macs0217。
-m:将原主目录的内容移动到新主目录(等价于-mv,同时更新/etc/passwd中的路径)。
id Macs0217
ls -ld /home/Macs0217
grep Macs0217 /etc/passwd
验证:分别使用id、ls -ld、grep命令确认用户名、主目录路径均已正确修改。

图14:使用usermod修改用户名并同步迁移主目录

图15:验证用户名和主目录修改结果
3.2 任务2:文件权限管理
步骤(1):创建脚本文件
操作描述:切换到图形界面,在桌面目录下以当前用户身份创建脚本文件pwd.sh,并向其中追加内容"pwd"。
cd /home/zouhuixin0217/桌面
echo pwd >> pwd.sh
命令解释:
cd /home/zouhuixin0217/桌面:切换到桌面目录。
echo pwd >> pwd.sh:将字符串"pwd"追加写入到pwd.sh文件中(>>表示追加,如果文件不存在则创建)。注意这里echo输出的是字符串"pwd"而非当前目录路径,若要输出当前目录应使用echo $(pwd) >> pwd.sh。
ls -l pwd.sh
验证:查看pwd.sh文件的详细信息,确认文件已创建成功。

图16:在桌面目录创建pwd.sh脚本文件并查看
步骤(2):查看umask默认权限掩码
操作描述:查看系统中新建文件或目录的默认权限掩码。
umask
umask -S
命令解释:
umask:以八进制形式显示当前用户的权限掩码值(通常为0022)。
umask -S:以符号形式显示权限掩码(如u=rwx,g=rx,o=rx)。
umask值决定了新创建文件的默认权限:文件默认权限=666-umask,目录默认权限=777-umask。当umask=0022时,新建文件权限为644(rw-r–r–),新建目录权限为755(rwxr-xr-x)。

图17:使用umask命令查看默认权限掩码(八进制形式)

图18:使用umask -S查看默认权限掩码(符号形式)
步骤(3):新建文件和目录并验证权限
操作描述:新建文件test1和目录tt2,查看它们的权限,验证是否与umask设定的默认权限相符。
touch test1
mkdir tt2
ls -l test1
ls -ld tt2
命令解释:
touch test1:创建空文件test1。
mkdir tt2:创建目录tt2。
ls -l test1:查看文件test1的详细信息(权限、属主、大小等)。
ls -ld tt2:查看目录tt2本身的详细信息(-d参数表示只看目录本身,不看目录内容)。
预期结果:文件test1权限为rw-r–r–(644),目录tt2权限为rwxr-xr-x(755),与umask=0022时的默认权限一致。

图19:新建文件test1和目录tt2并查看权限(与umask默认权限相符)
步骤(4):修改文件权限
操作描述:修改pwd.sh文件的权限为r-xr–r–(即数字544)。
chmod 544 pwd.sh
ls -l pwd.sh
命令解释:
chmod 544 pwd.sh:使用数字法修改pwd.sh的权限。5= r-x(属主有读和执行权限),4= r–(组用户只有读权限),4= r–(其他用户只有读权限)。修改后权限为r-xr–r–。
ls -l pwd.sh:验证权限修改是否成功。

图20:使用chmod 544修改pwd.sh权限并验证
步骤(5):执行脚本文件
操作描述:执行当前目录下的pwd.sh脚本文件。
./pwd.sh
命令解释:
./pwd.sh:执行当前目录(.表示当前目录)下的pwd.sh脚本文件。注意执行本地文件必须使用./前缀,不能只写文件名,这是Linux的安全机制,防止执行恶意程序。
预期结果:如果权限设置正确(有执行权限x),脚本会执行其中的命令并输出结果。如果提示Permission denied,需要检查文件权限和目录权限。

图21:执行pwd.sh脚本文件
步骤(6):修改文件属主和属组
操作描述:修改文件test1的属主为Macs0217,属组为jsj24。
sudo chown Macs0217:jsj24 test1
ls -l test1
命令解释:
sudo chown Macs0217:jsj24 test1:以root权限修改test1的属主为Macs0217,属组为jsj24。属主和属组之间用冒号:分隔。
ls -l test1:验证属主和属组修改是否成功。

图22:使用chown修改test1的属主和属组并验证
步骤(7):给属主添加执行权限
操作描述:使test1文件的属主具有可执行权限。
chmod u+x test1
ls -l test1
命令解释:
chmod u+x test1:使用符号法给test1文件的属主(user)添加执行权限(+x)。修改后属主权限从rw-变为rwx。
ls -l test1:验证权限修改结果。修改后test1的权限应变为rwxr–r–(属主有rwx权限)。

图23:使用chmod u+x给test1属主添加执行权限并验证
四、思考题与答案解析
4.1 任务1思考题
思考题1:为什么推荐使用 useradd -m?
题目:为什么在创建用户时,推荐使用 useradd -m 而不是单独使用 useradd?如果不加 -m 参数,在后续使用中会遇到什么麻烦?
答案:
useradd命令不加-m参数时,默认不会自动创建用户的主目录(/home/用户名)。这会导致以下问题:
(1)用户登录后没有正常的家目录,默认进入根目录/,体验极差;
(2).bashrc、.profile、.bash_profile等Shell配置文件无法加载,导致环境变量、别名、提示符定制等都无法生效;
(3)某些程序(如ssh、ftp等)依赖家目录存在才能正常工作,缺少家目录会导致这些服务报错;
(4)邮件系统可能无法正常工作(默认邮件存储在/home/用户名/Maildir或/var/mail/用户名)。
因此,创建普通可登录用户时,始终推荐使用:
sudo useradd -m -s /bin/bash 用户名
思考题2:sudo组与UID=0的区别
题目:在Kali Linux中,将普通用户加入sudo组与直接将其UID设为0有什么本质区别?
答案:
加入sudo组:用户仍然是普通用户,UID不是0(通常是1000以上)。只有通过sudo执行命令时,才会临时以root权限运行指定命令。这是一种"受控提权"机制,可以精确控制哪些用户能执行哪些命令(通过/etc/sudoers配置文件),并且所有sudo操作都会被记录到日志中,便于审计。
UID设为0:该账户在系统层面会被直接当作root用户,拥有几乎全部的超级用户权限,包括修改系统配置、访问所有文件、安装软件等。这非常危险,因为一旦该账户被攻破,攻击者就获得了完整的系统控制权。而且UID=0的账户无法被sudo机制限制,没有任何审计追踪。
本质区别:sudo组是"受控的、临时的、可审计的提权",而UID设为0是"直接获得完整的root权限",后者极其不安全,生产环境中严禁这样做。
思考题3:su命令切换用户
题目:命令su是否可以用来切换到当前没有登录的用户?
答案:
可以。su(switch user)命令切换的是系统账户身份,不要求该用户已经登录到系统中。su只需要知道目标用户的密码(切换到root时不需要密码,因为当前用户已经是root),就可以切换身份执行命令。
但需要注意:如果被切换用户的登录Shell设置为/sbin/nologin或/bin/false,则交互式登录会失败(因为系统不允许该用户进行交互式登录)。此时可以用以下方式使用该用户身份执行命令:
sudo su -s /bin/bash 用户名 -c "命令"
这条命令会以指定用户身份执行单条命令,而不需要交互式登录。
4.2 任务2思考题
思考题4:Permission denied排查
题目:实验中我们修改了pwd.sh的权限为r-xr–r–(即544)。如果此时发现执行该脚本时依然提示"Permission denied",除了文件本身的执行权限外,还需要检查哪个容易被忽视的权限?
答案:
除了文件本身的执行权限外,还需要检查文件所在目录及其所有上级目录是否有执行权限(x权限)。Linux的路径解析机制要求:要访问某个路径上的任意节点(文件或目录),用户对路径中每一级目录都必须有执行(x)权限。
例如,要执行/home/zouhuixin0217/桌面/pwd.sh,用户需要对/home、/home/zouhuixin0217、/home/zouhuixin0217/桌面这三个目录都有x权限。如果桌面目录没有x权限,即使pwd.sh文件本身有执行权限,用户也无法通过./pwd.sh来执行它。
排查方法:
ls -ld /home/zouhuixin0217/桌面
如果目录权限中没有x,可以使用chmod +x目录名来添加执行权限。
思考题5:umask与默认权限
题目:当我们在终端执行echo pwd >> pwd.sh时,系统是如何决定这个新文件的默认权限的?如果想让以后新建的文件默认不允许"其他用户"读取,应该怎么做?
答案:
新建文件的默认权限由umask(用户文件创建掩码)决定。系统创建文件时的计算方式为:
文件默认权限 = 666 – umask(文件默认没有执行权限)
目录默认权限 = 777 – umask(目录默认有执行权限)
例如,当umask为0022时:文件默认权限=666-022=644(rw-r–r–),目录默认权限=777-022=755(rwxr-xr-x)。
如果想让以后新建的文件默认不允许"其他用户"读取,可以将umask改为0027:
umask 0027
此时新建文件默认权限=666-027=640(rw-r—–),其他用户不可读;新建目录默认权限=777-027=750(rwxr-x—)。
若要永久生效,可将umask设置写入~/.bashrc文件:
echo "umask 0027" >> ~/.bashrc
source ~/.bashrc
五、常见问题与解决方案
在实验过程中,可能会遇到以下常见问题。整理如下供参考:
问题1:useradd创建用户后家目录不存在
现象:使用useradd创建用户后,发现/home/目录下没有对应用户的家目录,用户登录时报错。
原因:useradd命令默认行为因系统配置而异。在某些系统(如Kali Linux)中,/etc/login.defs文件中的CREATE_HOME设置可能为no,导致不自动创建家目录。
解决方案:
# 方法1:创建用户时加上-m参数
sudo useradd -m 用户名
# 方法2:手动创建家目录并设置权限
sudo mkdir /home/用户名
sudo chown 用户名:用户名 /home/用户名
sudo cp /etc/skel/.bashrc /etc/skel/.profile /home/用户名/
sudo chown 用户名:用户名 /home/用户名/.bashrc /home/用户名/.profile
问题2:passwd锁定后无法解锁
现象:使用passwd -l锁定用户后,使用passwd -u解锁时报错"passwd: Failed to unlock for user"。
原因:当用户密码为空时,passwd -l不会在密码前加!,而是将密码字段改为*(表示无密码可登录)。此时passwd -u无法解锁,因为并没有真正锁定。
解决方案:
# 先设置密码再锁定
sudo passwd 用户名 # 先设置密码
sudo passwd -l 用户名 # 再锁定
# 如果已经出现锁定失败,可以手动编辑/etc/shadow
sudo nano /etc/shadow
# 找到对应用户行,确保密码字段以!开头(如!$6$…)
问题3:usermod修改用户名失败
现象:使用usermod -l修改用户名时报错"usermod: user jsj0217 is currently used by process XXXX"。
原因:目标用户当前有正在运行的进程(即该用户还登录着),usermod无法修改正在使用中的用户账户。
解决方案:
# 方法1:强制终止该用户的所有会话
sudo pkill -u 用户名
# 然后再执行修改
sudo usermod -l 新用户名 原用户名
# 方法2:从tty或其他会话中注销该用户
# 然后在图形界面终端执行修改
问题4:chmod修改权限后仍无法执行
现象:对脚本文件执行了chmod +x后,执行时仍然提示"Permission denied"。
原因1:文件所在目录没有执行权限(x权限)。Linux路径解析要求对路径上每一级目录都有x权限。
解决方案1:
ls -ld /path/to/directory
chmod +x /path/to/directory
原因2:文件系统挂载时使用了noexec选项(常见于/tmp等临时目录)。
解决方案2:重新挂载文件系统时去掉noexec选项,或将脚本移到允许执行的目录。
原因3:SELinux或AppArmor等强制访问控制模块阻止了执行。
解决方案3:临时禁用SELinux(不推荐生产环境):
sudo setenforce 0 # 临时禁用
# 或修改SELinux上下文:
sudo chcon -t bin_t 文件名
问题5:su切换用户提示"Authentication failure"
现象:使用su切换到其他用户时提示"Authentication failure",但密码确认无误。
原因1:目标用户密码未设置(新创建的用户可能没有密码)。
解决方案1:
sudo passwd 用户名 # 先设置密码
原因2:目标用户的登录Shell被设置为/sbin/nologin或/bin/false。
解决方案2:
sudo chsh -s /bin/bash 用户名 # 修改登录Shell为bash
原因3:/etc/shadow文件权限不正确(应为640或600)。
解决方案3:
sudo chmod 640 /etc/shadow
问题6:sudo命令提示"不在sudoers文件中"
现象:普通用户执行sudo命令时报错"xxx is not in the sudoers file. This incident will be reported."。
原因:该用户未被添加到sudo组,或者/etc/sudoers文件中没有配置该用户的sudo权限。
解决方案:
# 方法1:将用户加入sudo组(推荐)
sudo usermod -aG sudo 用户名
# 方法2:直接编辑sudoers文件(需谨慎)
sudo visudo
# 在root ALL=(ALL:ALL) ALL下方添加:
用户名 ALL=(ALL:ALL) ALL
六、实验总结
本次实验围绕Linux系统的用户账户管理与文件权限管理两大核心主题展开,通过动手实践深入理解了Linux多用户多任务环境下的安全机制。以下是本次实验的主要收获和心得体会:
第一,用户账户管理是Linux系统管理的基础。通过useradd、usermod、passwd等命令,我掌握了创建用户、修改用户属性、设置和锁定密码的完整流程。特别是在实践passwd -l锁定和passwd -u解锁的过程中,我直观地理解了用户密码状态管理的工作机制——锁定实际上是在shadow文件的密码字段前添加!符号,而解锁则是移除该符号。这一过程让我对Linux的认证机制有了更深刻的认识。
第二,文件权限模型是Linux安全体系的核心。通过umask、chmod、chown等命令的实践操作,我理解了rwx三类权限(读、写、执行)如何分别应用于三类用户(属主、组、其他),以及数字法(如755、644)和符号法(如u+x、g-w)两种权限修改方式的差异。特别值得一提的是,在实验中发现即使文件本身设置了执行权限,如果所在目录缺少x权限,仍然无法执行文件——这一发现让我深刻认识到Linux权限检查是路径级别的,需要对路径上每一级目录都有相应权限。
第三,umask机制的设计体现了Linux的"最小权限原则"。默认umask值0022确保新用户创建的文件对其他用户只有读权限而没有写权限,有效防止了未经授权的文件修改。通过修改umask值(如改为0027),可以进一步收紧权限策略,满足不同安全等级的需求。
第四,su与sudo的区别让我理解了"最小权限原则"在实践中的重要性。sudo提供了一种安全的临时提权机制,既保证了管理员能够执行必要的系统管理操作,又通过日志审计和权限细粒度控制降低了安全风险。相比之下,直接将UID设为0的做法虽然简单粗暴,但严重违背了安全最佳实践。
第五,实验过程中遇到的各种问题(如密码锁定后无法登录、usermod因用户登录中而失败、chmod后仍报Permission denied等)恰恰是学习的最佳契机。每一个错误的排查过程都加深了对Linux系统工作机制的理解,也让我养成了"先查看权限再执行操作"的良好习惯。
总体而言,本次实验将操作系统理论知识与Linux动手实践紧密结合,从用户管理的底层机制到文件权限的具体操作,构建了一个较为完整的知识体系。这些技能不仅是网络安全专业学生的基础素养,也是未来从事系统管理、安全运维等工作的必备能力。
────────────────────────────────────────────────────────────
— 全文完 —
网硕互联帮助中心







评论前必须登录!
注册