rbash限制用户执行的命令

软连接

sudo ln -s /bin/bash /bin/rbash
sudo bash -c 'echo "/bin/rbash" >> /etc/shells'
sudo chsh -s /bin/rbash $ruser

建一个直接使用/bin/rbash的用户

useradd -s /bin/rbash $ruser

ruser是需要限制的用户名

在这个用户目录下创建一个.bin,存放用户可以执行的命令

mkdir -p /home/$ruser/.bin

通过软连接执行命令

ln -s /bin/clear /home/$ruser/.bin/clear

编辑文件/home/$ruser/.bashrc,添加export PATH=$HOME/.bin/.

文件一定要以# .bashrc为首行.

示例

#!/bin/bash

# rbash脚本
create_user()
{
if [ ! -f "/bin/rbash" ];then
ln -s /bin/bash /bin/rbash
fi count=`cat /etc/shells | grep /bin/rbash | wc -l`
if [ $count -eq 0 ];then
bash -c 'echo "/bin/rbash" >> /etc/shells'
fi count=`cat /etc/passwd | grep $user | wc -l`
if [ $count != 0 ];then
# -n参数, 不换行输出
echo -n "[ The user already exists, modify the shell? ] "
read flag
if [ $flag == "y" ];then
chsh -s /bin/rbash $user
fi
else
aa=`openssl passwd -1 $password`
useradd -s /bin/rbash -p $aa -d /home/$user $user
fi if [ ! -d "/home/$user/bin" ];then
mkdir -p /home/$user/bin
fi } # 添加相应的命令的软连接
add_command()
{
for i in $com;do
count=`ls /home/$user/bin/ | grep "$i" | wc -l`
if [ $count -eq 0 ];then
path=`which $i`
ln -s $path /home/$user/bin/$i
fi
done
} bash_profile()
{
echo "export PATH=/home/$user/bin/" >> /home/$user/.bashrc
} info()
{
echo "Restricted Rbash!" > /etc/motd
} clear_history()
{
# 清空历史记录
echo "" > ~/.bash_history
history -c
} p_v()
{
if [ $UID != 0 ];then
echo "You need to be root to perform this command."
exit 1
fi
if [ "$user" == "" ];then
echo "Please enter user name."
exit 1
fi
if [ "$password" == "" ];then
echo "Please enter user password."
exit 1
fi
} user=$1
password=$2 main()
{
# 允许的命令, 用空格进行分隔
# cd命令在rbash上是受限的, 建立软连接也不能执行
com="ifconfig ip ls" p_v # 如果用户已存在注释create_user和bash_profile
create_user
add_command
bash_profile
# info
clear_history
} main

rbash限制用户执行的命令的更多相关文章

  1. psacct监视用户执行的命令,如cpu时间和内存战胜,实时进程记账

    psacct监视用户执行的命令,如cpu时间和内存战胜,实时进程记账

  2. linux记录每个用户执行的命令

    1.在/etc/profile中添加如下代码: #history USER_IP=`>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'` HISTD ...

  3. 解决SSH登录用户执行的命令部分环境变量参数不生效的问题

    问题概况 linux机器在/etc/profile配置完成环境变量后,SSH到目标机器执行命令,但是获取不到已配置的环境变量值. 例如场景: 在/etc/profile配置了http代理 export ...

  4. Android Java执行Shell命令

    最新内容建议直接访问原文:http://www.trinea.cn/android/android-java-execute-shell-commands/ 主要介绍Android或Java应用中如何 ...

  5. C# 动态执行批处理命令

    本文转载:http://www.cnblogs.com/lenic/p/4097045.html C# 动态执行一系列控制台命令,并允许实时显示出来执行结果时,可以使用下面的函数.可以达到的效果为: ...

  6. ubuntu普通用户无法使用usdo命令

    1.切换到root用户下,怎么切换就不用说了吧,不会的自己百度去. 2.添加sudo文件的写权限,命令是: chmod u+w /etc/sudoers 3.编辑sudoers文件 vi /etc/s ...

  7. Linux禁止普通用户使用crontab命令

    cron计划任务默认root用户与非root用户都可以执行,当然如果在安全方面想禁用这部分用户,则可以通过两个文件来解决: cron.allow cron.deny cron.allow:定义允许使用 ...

  8. 【linux】让普通用户执行root的程序

    再有些时候,比如zabbix监控中,需要使用netstat命令查看当前网络链接状态,但是zabbix用户没有权限执行netstat,会导致监控失败,为此使用如下即可解决 chmod +s /bin/n ...

  9. SQL SERVER普通用户需要什么权限才能执行sp_configure命令

    SQL SERVER普通用户需要什么权限才能执行sp_configure命令呢? 例如如下存储过程所示 CREATE PROCEDURE PRC_TEST AS BEGIN    exec sp_co ...

随机推荐

  1. 简明Python3教程 15.异常

    简介 当程序发生意外情况时则产生异常. 例如你需要读一个文件而这个文件并不存在会咋样?又或者是程序运行时你把它误删除了呢? 上述情形通过异常进行处理. 类似的,如果你的程序存在一些非法语句会发生什么呢 ...

  2. CCNP路由实验之七 动态路由之BGP

     CCNP路由实验之七 动态路由之BGP 动态路由协议能够自己主动的发现远程网络,仅仅要网络拓扑结构发生了变化,路由器就会相互交换路由信息,不仅能够自己主动获知新添加的网络,还能够在当前网络连接失 ...

  3. theano 安装杂记

    0. MinGW MinGW:Windows 下的 g++等linux 下的编译工具: Anaconda 下 MinGW 的安装(进行 windows cmd 界面):conda install mi ...

  4. c#如何获得ModelVisual3D中MeshGeometry3D对象

    原文:c#如何获得ModelVisual3D中MeshGeometry3D对象 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/m0_37591671 ...

  5. 从源码角度看MySQL memcached plugin——0.大纲

    本系列文章介绍MySQL memcached plugin插件.剖析已经完成.先把链接弄好,内容会陆续补上. 大纲如下: 系统结构和引擎初始化(已完成) 线程模型和连接的状态机 containers表 ...

  6. DirectX 图形流水线

    Direct3D 的可编程流水线用来为实时游戏渲染图形(一个词概括——实时渲染) 上面的图是Dx11的实时渲染流水线,Dx的几个版本都是向下兼容的. Input-Assembler Stage: 输入 ...

  7. Win8Metro(C#)数字图像处理--2.6图像对比度调整

    原文:Win8Metro(C#)数字图像处理--2.6图像对比度调整  2.6图像对比度调整函数 [函数名称] 图像对比度调整函数ContrastAdjustProcess(WriteableBi ...

  8. <input type="image"> 和 <img> 用法区别

    原文:<input type="image"> 和 <img> 用法区别 w3c定义如下: Image <input type="image ...

  9. 用VS2010构建MASM的编程环境,开始使用MASM(翻译自《Inetl汇编语言程序设计》一书的作者Kip R. Irvine的文章Getting Started with MASM),两种方法搭建IA-32汇编设计环境

    http://blog.csdn.net/jinsonghu/article/details/5688020 http://blog.csdn.net/jinsonghu/article/detail ...

  10. awk积累

    1. 计算一个文本中每一列的和 [root@centos ~]# cat aaa.txt [root@centos ~]# awk 'BEGIN{a=0;b=0;c=0}{a+=$1;b+=$2;c+ ...