首页 > 运维 > linux运维 > 正文

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

P粉602998670
发布: 2025-09-02 10:35:01
原创
415人浏览过
限制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
登录后复制
并非万无一失,有经验的用户可能会找到绕过的方法,所以它更适合对付“普通”用户。

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

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权限,可以这样尝试:

行者AI
行者AI

行者AI绘图创作,唤醒新的灵感,创造更多可能

行者AI 100
查看详情 行者AI
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
登录后复制

以上就是Linux如何限制用户执行某些命令的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

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