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
并非万无一失,有经验的用户可能会找到绕过的方法,所以它更适合对付“普通”用户。

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

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

Amazon Nova
Amazon Nova

亚马逊云科技(AWS)推出的一系列生成式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

相关专题

更多
python开发工具
python开发工具

php中文网为大家提供各种python开发工具,好的开发工具,可帮助开发者攻克编程学习中的基础障碍,理解每一行源代码在程序执行时在计算机中的过程。php中文网还为大家带来python相关课程以及相关文章等内容,供大家免费下载使用。

720

2023.06.15

python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

627

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

744

2023.07.25

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

617

2023.07.31

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

1236

2023.08.03

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

547

2023.08.04

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

575

2023.08.04

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

700

2023.08.11

php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

74

2025.12.31

热门下载

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

精品课程

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

共48课时 | 6.4万人学习

Git 教程
Git 教程

共21课时 | 2.3万人学习

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

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