linux 实现普通用户只允许使用部分命令

本文介绍了一种在Linux系统中限制普通用户仅能使用特定命令的方法。通过创建受限shell并配置用户环境变量来达到目的。但该方法存在局限性,如无法完全限制cd命令及tab补全功能不稳定等问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

linux 实现普通用户只允许使用部分命令

 

由于公司奇葩需求,需要给所有开发用户开通所有服务器的只能查看权限,结合现有jumpserver实现扩展,搭建jumpserver省略,推送一个普通用户


接下来的操作都是在系统里,这里我写了一个脚本用于实现,只允许check_user用户执行 cat ls tail tailf命令

#!/bin/bash

User="check_user"
Command="cat ls tail tailf"

ln -s /bin/bash /bin/rbash
User_alive=`cat /etc/passwd | grep check_user|wc -l`
if [ $User_alive -eq 1 ]
then
    sed -i "/$User/s/\/bin\/bash/\/bin\/rbash/" /etc/passwd
    mkdir /home/$User/bin
    touch /home/$User/.bash_profile
    if [ -f /home/$User/.bash_profile ]
    then
        chown root. /home/$User/.bash_profile
        chmod 755 /home/$User/.bash_profile
        echo > /home/$User/.bash_profile
cat >> /home/$User/.bash_profile <<EOF 
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs

PATH=\$HOME/bin
EOF
    else
        echo "profile is not exist"
        exit "6"
    fi
else
    echo "User is not exist"
    exit 5
fi
for i in $Command
do
    dir=`whereis $i | awk "{print $2}"`
    ln -s $dir /home/$User/bin
done

 

以上转自

转自https://blog.51cto.com/chentianwang/2062053

 

 

 

实现后发现后续问题目前还没有解决
1,本想把cd加上,但是centos是可以,ubuntu是不可以,因为cd在ubuntu里不算命令是内置内核里的,不知怎么解决
2,tab补全功能有的机器可以,有的不可以不知道为什么

这边测试了直接cd 不行

centos7和centos6的cd位置也不一样

后面发现cd 需要先执行一下bash才可以,而且必须是root切换到read_user才可以。

https://en.wikipedia.org/wiki/Restricted_shell

在/usr/bin下查看cd 还是需要bash执行。

只能修改Command="bash cd cat ls tail tailf",这样用户会有执行bash的权限。还是要根据实际情况设置。

 

 

 

 

### Linux 系统配置普通用户使用 Java 命令教程 为了使普通用户能够在 Linux 系统中成功使用 `java` 命令,需要完成以下几个方面的操作: #### 1. 安装 JDK 并验证版本 确保目标系统已经安装了合适的 JDK 版本。如果没有安装,则需下载并解压对应的 JDK 包(如 `.bin` 或 `.rpm`)。以下是具体的操作方法: - 对于 `.bin` 类型的包,赋予其可执行权限并通过命令运行它: ```bash chmod +x jdk-6u45-linux-x64.bin ./jdk-6u45-linux-x64.bin ``` - 对于 `.rpm` 类型的包,同样需要设置可执行权限,并通过 RPM 工具进行安装: ```bash chmod +x jdk-8u25-linux-i586.rpm rpm -ivh jdk-8u25-linux-i586.rpm ``` 确认安装完成后,可通过以下命令检查 Java 的版本号以验证是否正常工作: ```bash java -version ``` 此步骤用于检测系统的 OpenJDK 是否已预装或者手动安装后的 JDK 能否被识别[^2]。 #### 2. 设置 JAVA_HOME 环境变量 为了让所有用户都能访问到 Java 及其工具集,必须正确设定全局环境变量 `JAVA_HOME` 和将其路径加入到 `PATH` 中去。 - **对于单个用户的临时配置** 可以直接在终端输入如下指令来定义这些变量仅限本次登录期间有效: ```bash export JAVA_HOME=/usr/java/jdk1.8.0_25/ export PATH=$JAVA_HOME/bin:$PATH ``` - **实现跨会话持久化更改** 要使得上述改动长期存在而不必每次重新声明,应该把它们写入 shell 初始化脚本里比如 `.bashrc`,`.profile` 或者 `/etc/profile` 文件之中视情况而定。下面展示如何针对特定个人账户做这样的调整: ```bash echo 'export JAVA_HOME="/usr/lib/jvm/java-8-oracle"' >> ~/.bashrc echo 'export PATH="$JAVA_HOME/bin:$PATH"' >> ~/.bashrc source ~/.bashrc ``` 此处假设 Oracle 提供的标准发行版位于目录 `/usr/lib/jvm/java-8-oracle/` 下面,请依据实际部署位置替换相应字符串[^1]^。 #### 3. 更新系统范围内的链接 (Optional but Recommended) 有时即使设置了正确的 `$JAVA_HOME` ,某些应用程序仍可能无法自动定位至最新版本的 JRE/JDK 。这时可以考虑创建符号连接指向最新的二进制文件夹从而简化管理过程: ```bash sudo update-alternatives --install /usr/bin/java java /path/to/new/version 1 sudo update-alternatives --config java ``` 这一步骤允许管理员轻松切换不同供应商之间提供的多个实例之间的优先级顺序[^3]. 至此为止你应该完成了必要的准备工作以便任何具备适当权限级别的人都可以在他们的命令提示符下键入 “java” 来调用关联程序啦! --- ### 注意事项 尽管以上指南涵盖了大多数常见场景下的需求,但在特殊情况下还可能存在额外的要求取决于具体的业务逻辑或框架依赖关系等因素影响最终效果表现形式有所差异所以建议始终参照官方文档获取最权威的信息来源作为参考标准之一[^4].
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值