0

0

Linux如何限制用户执行某些命令

P粉602998670

P粉602998670

发布时间:2025-09-02 10:35:01

|

432人浏览过

|

来源于php中文网

原创

限制linux用户执行命令的关键是使用rbash结合path控制或sudoers白名单。首先将用户shell设为/bin/rbash,创建独立的bin目录存放允许命令的符号链接,并通过配置文件锁定path指向该目录,同时设置文件只读防止篡改。例如:sudo usermod -s /bin/rbash limiteduser,再创建/home/limiteduser/bin并链接ls、date等命令,最后在.profile中固定path并设为400权限。此方法简单有效,但存在绕过风险;更安全的方式是通过visudo配置sudoers文件,采用“白名单”精确授权特定用户以特定身份执行特定命令,如devuser all=(all) nopasswd: /usr/bin/git pull,避免使用黑名单机制以防规则冲突。此外,可编写自定义shell脚本作为登录shell实现高度定制化控制,但复杂度较高。为防rbash被绕过,必须确保用户无法修改path相关文件、不能调用bash -c或使用其他语言解释器(如python、perl)执行系统命令,必要时还需禁用某些内置命令和重定向操作。综合来看,rbash适合轻量级限制,sudoers适用于精细权限管理,而高安全场景建议多层防护结合。

linux如何限制用户执行某些命令

想要在Linux里限制某个用户能跑哪些命令,说白了,就是给他套个“紧箍咒”。这事儿其实有不少办法,从修改他登录后用的那个壳子(shell),到更精细地控制他能用

sudo
干什么,甚至直接调整命令的执行权限,都是可以考虑的路径。关键在于,我们得找到那个最适合当前场景的平衡点。

限制Linux用户执行某些命令,这事儿我个人觉得,得看你限制的粒度有多细,以及你对安全性的要求有多高。

一个比较直接且常见的做法是利用受限的Bash shell (rbash)。当你把一个用户的默认shell设置为

/bin/rbash
时,这个用户就会受到一些限制。比如,他不能改变目录(
cd
),不能设置
PATH
环境变量,不能重定向输出等等。但光有
rbash
还不够,你需要配合调整用户的
PATH
环境变量,让它只包含你允许的命令所在的目录。

举个例子,你可以创建一个目录,比如

/home/limiteduser/bin
,然后在这个目录里放一些你允许用户执行的命令的符号链接。然后把用户的
.bash_profile
或者
.profile
文件修改一下,把
PATH
设置为这个目录,并且确保用户没有权限修改这个文件。

# 假设用户名为limiteduser
sudo usermod -s /bin/rbash limiteduser
sudo mkdir /home/limiteduser/bin
# 在这个bin目录里创建允许的命令的软链接
sudo ln -s /bin/ls /home/limiteduser/bin/ls
sudo ln -s /bin/date /home/limiteduser/bin/date
# 然后修改limiteduser的.bash_profile或.profile
# 确保PATH只包含/home/limiteduser/bin,并且用户无权修改
echo 'export PATH=$HOME/bin' | sudo tee /home/limiteduser/.bash_profile > /dev/null
sudo chown limiteduser:limiteduser /home/limiteduser/.bash_profile
sudo chmod 400 /home/limiteduser/.bash_profile # 只读

这样一来,

limiteduser
登录后,理论上只能执行
/home/limiteduser/bin
目录下的命令,也就是
ls
date
。不过,
rbash
并非万无一失,有经验的用户可能会找到绕过的方法,所以它更适合对付“普通”用户。

ColorMagic
ColorMagic

AI调色板生成工具

下载

另一个更强大、更细粒度的控制方式是利用

sudoers
文件。通过
visudo
命令编辑
/etc/sudoers
文件(或者
/etc/sudoers.d/
下的文件),你可以精确地指定哪些用户可以以哪个用户的身份执行哪些命令,甚至可以要求或不要求输入密码。 比如,如果你想让用户
devuser
只能执行
/usr/bin/git pull
这个命令,并且不需要密码:

devuser ALL=(ALL) NOPASSWD: /usr/bin/git pull

如果你想限制

devuser
不能执行
rm -rf /
,但允许他执行其他需要sudo的命令,这通常不是直接拒绝某个命令,而是只授予他明确允许的命令。但如果你真的想明确拒绝某个命令,并且他有其他sudo权限,可以这样尝试:

devuser ALL=(ALL) ALL, !/usr/bin/rm # 这种方式需要非常小心,因为ALL的顺序和匹配规则很复杂,容易出错。

我更倾向于“白名单”模式,即只允许执行明确指定的命令,而不是试图黑名单。

还有一种是自定义一个受限的shell脚本。你可以编写一个Python或Bash脚本,让它作为用户的登录shell。在这个脚本里,你可以实现更复杂的逻辑来判断用户输入的命令是否允许执行。这给了你最大的灵活性,但实现起来也最复杂,需要对脚本编写和安全有较好的理解。

如何防止受限用户绕过rbash的限制?

说实话,

rbash
虽然方便,但它并不是一个滴水不漏的“笼子”。经验丰富的用户总会想方设法跳出去。要尽可能地防止绕过,我们需要做几件事:

首先,死死地锁住

PATH
环境变量。这是最关键的一点。确保用户登录后,
PATH
变量只包含你允许的命令所在的目录,并且用户对
.bash_profile
.profile
或任何可能设置
PATH
的文件都没有写权限。我通常会把这些文件设置为只读,并且所有者是root,或者至少用户不能修改。如果用户能改
PATH
,他就能把
/bin
/usr/bin

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
自建git服务器
自建git服务器

git服务器是目前流行的分布式版本控制系统之一,可以让多人协同开发同一个项目。本专题为大家提供自建git服务器相关的各种文章、以及下载和课程。

978

2023.07.05

git和svn的区别
git和svn的区别

git和svn的区别:1、定义不同;2、模型类型不同;3、存储单元不同;4、是否拥有全局版本号;5、内容完整性不同;6、版本库不同;7、克隆目录速度不同;8、分支不同。php中文网为大家带来了git和svn的相关知识、以及相关文章等内容。

580

2023.07.06

git撤销提交的commit
git撤销提交的commit

Git是一个强大的版本控制系统,它提供了很多功能帮助开发人员有效地管理和控制代码的变更,本专题为大家提供git 撤销提交的commit相关的各种文章内容,供大家免费下载体验。

275

2023.07.24

git提交错误怎么撤回
git提交错误怎么撤回

git提交错误撤回的方法:git reset head^:撤回最后一次提交,恢复到提交前状态。git revert head:创建新提交,内容与之前提交相反。git reset :使用提交的 sha-1 哈希撤回指定提交。交互式舞台区:标记要撤回的特定更改,然后提交,排除已撤回更改。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

568

2024.04.09

git怎么对比两个版本的文件内容
git怎么对比两个版本的文件内容

要对比两个版本的 git 文件,请使用 git diff 命令:git diff 比较工作树和暂存区之间的差异。git diff 比较两个提交或标签之间的差异。git diff 输出显示差异块,其中 + 表示添加的行,- 表示删除的行, 表示修改的行。可使用 gitkraken、meld、beyond compare 等可视化工具更直观地查看差异。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

533

2024.04.09

磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

1564

2023.06.21

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

716

2023.06.29

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

300

2023.06.30

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

3

2026.03.11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 10.5万人学习

Git 教程
Git 教程

共21课时 | 4.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号