云计算百科
云计算领域专业知识百科平台

实验:Linux用户和权限管理

一、知识点总结

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动手实践紧密结合,从用户管理的底层机制到文件权限的具体操作,构建了一个较为完整的知识体系。这些技能不仅是网络安全专业学生的基础素养,也是未来从事系统管理、安全运维等工作的必备能力。

────────────────────────────────────────────────────────────

— 全文完 —

赞(0)
未经允许不得转载:网硕互联帮助中心 » 实验:Linux用户和权限管理
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!