用户身份与文件权限
本章将详细讲解文件的所有者、所属组以及其他人可对文件进行的读(r)、写(w)、执行(x)等操作,以及如何在 Linux 系统中添加、删除、修改用户账户信息。
隐藏权限能够给系统增加一层隐形的防护层,让黑客最多只能查看关键日志信息,而不能进行修改或删除。
而文件的访问控制列表(Access Control List,ACL)可以进一步让单一用户、用户组对单一文件或目录进行特
殊的权限设置,让文件具有能满足工作需求的最小权限。
如何使用 su 命令与 sudo 服务让普通用户具备管理员的权限,不仅可以满足日常的工作需求,还可以确保系统
的安全性。
用户身份与能力
这个 root 管理员就是存在于所有类 UNIX 系统中的超级用户。它拥有最高的系统所有权,能
够管理系统的各项功能,如添加/删除用户、启动/关闭服务进程、开启/禁用硬件设备等
查看用户
# cat /etc/passwd
useradd
useradd 命令用于创建新的用户,格式为“useradd [选项] 用户名”。
可以使用 useradd 命令创建用户账户。使用该命令创建用户账户时,默认的用户家目录会
被存放在/home 目录中,默认的 Shell 解释器为/bin/bash,而且默认会创建一个与该用户同名
的基本用户组。
一旦用户的解释器被设置为 nologin,则代表该用户不能登录到系统中
# useradd -d /home/linux -u 8888 -s /sbin/nologin linuxprobe
[root@linuxprobe ~]# id linuxprobe
groupadd
groupadd 命令用于创建用户组,格式为“groupadd [选项] 群组名”。
[root@linuxprobe ~]# groupadd ronny
usermod
usermod 命令用于修改用户的属性,格式为“usermod [选项] 用户名”。
usermod [-LU][-c <备注>][-d <登入目录>][-e <有效期限>][-f <缓冲天数>][-g <群组>][-G <群组>][-l <帐号名称>][-s <shell>][-u <uid>][用户帐号]
用户的信息保存在/etc/passwd 文件中,可以直接用文本编辑器来修改其中的用
户参数项目,也可以用 usermod 命令修改已经创建的用户信息,诸如用户的 UID、基本/扩展
用户组、默认终端等
# usermod -G root linuxprobe
# id linuxprobe
更改登录目录
# usermod -d /home/hnlinux linuxprobe
改变用户的uid
# usermod -u 777 linuxprobe
passwd
passwd 命令用于修改用户密码、过期时间、认证信息等,格式为“passwd [选项] [用户名]”。
-l 锁定用户,禁止其登录
-u 解除锁定,允许用户登录
--stdin 允许通过标准输入修改用户密码,如 echo "NewPassWord" | passwd --stdin Username
-d 使该用户可用空密码登录系统
-e 强制用户在下次登录时修改密码
-S 显示用户的密码是否被锁定,以及密码所采用的加密算法名称
userdel
userdel 命令用于删除用户,格式为“userdel [选项] 用户名”。
-f 强制删除用户
-r 同时删除用户及用户家目录
文件权限与归属
文件权限的数字法表示基于字符表示(rwx)的权限计算而来,其目的是简化权限的表示。
例如,若某个文件的权限为 7 则代表可读、可写、可执行(4+2+1);若权限为 6 则代表可读、
可写(4+2)。
文件的隐藏属性
Linux 系统中的文件除了具备一般权限和特殊权限之外,还有一种隐藏权限,即被隐藏起
来的权限,默认情况下不能直接被用户发觉。
chattr
chattr 命令用于设置文件的隐藏权限,格式为“chattr [参数] 文件”。如果想要把某个隐藏
功能添加到文件上,则需要在命令后面追加“+参数”,如果想要把某个隐藏功能移出文件,
则需要追加“-参数”。
lsattr
lsattr 命令用于显示文件的隐藏权限,格式为“lsattr [参数] 文件”。
su 命令与 sudo 服务
使得许多系统命令和服务只能被root管理员来使用,但是这也让普通用户受到了更多的权限束缚,
从而导致无法顺利完成特定的工作任务。
su 命令可以解决切换用户身份的需求,使得当前用户在不退出登录的情况下,顺畅地切
换到其他用户,比如从 root 管理员切换至普通用户
另外,当从 root 管理员切换到普通用户时是不需要密码验证的,而从普通用户切换成 root
管理员就需要进行密码验证了;这也是一个必要的安全检查
[root@linuxprobe ~]# su - linuxprobe
[linuxprobe@linuxprobe root]$ su root
Password:
[root@linuxprobe ~]# su - linuxprobe
Last login: Mon Aug 24 19:27:09 CST 2017 on pts/0
[linuxprobe@linuxprobe ~]$ exit
logout
[root@linuxprobe ~]#
sudo 命令把特定命令的执行权限赋予给指定用户
sudo 命令用于给普通用户提供额外的权限来完成原本 root 管理员才能完成的任务,格式
为“sudo [参数] 命令名称”。
-h 列出帮助信息
-l 列出当前用户可执行的命令
-u 用户名或 UID 值 以指定的用户身份执行命令
-k 清空密码的有效时间,下次执行 sudo 时需要再次进行密码验证
-b 在后台执行指定的命令
-p 更改询问密码的提示语
总结来说,sudo 命令具有如下功能:
➢ 限制用户执行指定的命令:
➢ 记录用户执行的每一条命令;
➢ 配置文件(/etc/sudoers)提供集中的用户管理、权限与主机等参数;
➢ 验证密码的后 5 分钟内(默认值)无须再让用户再次验证密码。
当然,如果担心直接修改配置文件会出现问题,则可以使用 sudo 命令提供的 visudo 命令
来配置用户权限。这条命令在配置用户权限时将禁止多个用户同时修改 sudoers 配置文件,还
可以对配置文件内的参数进行语法检查,并在发现参数错误时进行报错。
support ALL=(ALL) ALL
这样,普通用户support就能够执行root权限的所有命令
如果需要让某个用户只能使用 root 管理员的身份执行指定的命令,切记一定要给
出该命令的绝对路径,否则系统会识别不出来。我们可以先使用 whereis 命令找出命令所对应
的保存路径,然后把配置文件第 99 行的用户权限参数修改成对应的路径即可
[root@linuxprobe ~]# visudo
98 root ALL=(ALL) ALL
99 linuxprobe ALL=(ALL) /usr/bin/cat
不知大家是否发觉
在每次执行 sudo 命令后都会要求验证一下密码。虽然这个密码就是当前登录用户的密码,但
是每次执行 sudo 命令都要输入一次密码其实也挺麻烦的,这时可以添加 NOPASSWD 参数,
使得用户执行 sudo 命令时不再需要密码验证
[linuxprobe@linuxprobe ~]$ exit
logout
[root@linuxprobe ~]# whereis poweroff
poweroff: /usr/sbin/poweroff /usr/share/man/man8/poweroff.8.gz
[root@linuxprobe ~]# visudo
………………省略部分文件内容………………
96 ##
97 ## Allow root to run any commands anywhere
98 root ALL=(ALL) ALL
99 linuxprobe ALL=NOPASSWD: /usr/sbin/poweroff
如果不需要密码验证的话,则按照这样的格式来配置
USER_FLAG HOST_FLAG=(RUNAS_FLAG) NOPASSWD: COMMAND_FLAG
用户 哪些机器=(以何种身份) 执行什么命令
这样,当切换到普通用户后再执行命令时,就不用再频繁地验证密码了,我们在日常工
作中也就痛快至极了。
[linuxprobe@linuxprobe ~]$ sudo poweroff
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY