rbash限制用户执行的命令
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限制用户执行的命令的更多相关文章
- psacct监视用户执行的命令,如cpu时间和内存战胜,实时进程记账
psacct监视用户执行的命令,如cpu时间和内存战胜,实时进程记账
- linux记录每个用户执行的命令
1.在/etc/profile中添加如下代码: #history USER_IP=`>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'` HISTD ...
- 解决SSH登录用户执行的命令部分环境变量参数不生效的问题
问题概况 linux机器在/etc/profile配置完成环境变量后,SSH到目标机器执行命令,但是获取不到已配置的环境变量值. 例如场景: 在/etc/profile配置了http代理 export ...
- Android Java执行Shell命令
最新内容建议直接访问原文:http://www.trinea.cn/android/android-java-execute-shell-commands/ 主要介绍Android或Java应用中如何 ...
- C# 动态执行批处理命令
本文转载:http://www.cnblogs.com/lenic/p/4097045.html C# 动态执行一系列控制台命令,并允许实时显示出来执行结果时,可以使用下面的函数.可以达到的效果为: ...
- ubuntu普通用户无法使用usdo命令
1.切换到root用户下,怎么切换就不用说了吧,不会的自己百度去. 2.添加sudo文件的写权限,命令是: chmod u+w /etc/sudoers 3.编辑sudoers文件 vi /etc/s ...
- Linux禁止普通用户使用crontab命令
cron计划任务默认root用户与非root用户都可以执行,当然如果在安全方面想禁用这部分用户,则可以通过两个文件来解决: cron.allow cron.deny cron.allow:定义允许使用 ...
- 【linux】让普通用户执行root的程序
再有些时候,比如zabbix监控中,需要使用netstat命令查看当前网络链接状态,但是zabbix用户没有权限执行netstat,会导致监控失败,为此使用如下即可解决 chmod +s /bin/n ...
- SQL SERVER普通用户需要什么权限才能执行sp_configure命令
SQL SERVER普通用户需要什么权限才能执行sp_configure命令呢? 例如如下存储过程所示 CREATE PROCEDURE PRC_TEST AS BEGIN exec sp_co ...
随机推荐
- WPF使用DynamicDataDisplay.dll显示CPU及内存使用曲线
原文:WPF使用DynamicDataDisplay.dll显示CPU及内存使用曲线 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/wangshub ...
- Android自注-15-Activity生命周期
很长一段时间没有写博客,懒,感慨一下. Activity的生命周期是一块以下附图: 通过代码下面简单的介绍一下.一些内容看代码的凝视: package com.mxy; import android. ...
- android反射组件 (一个)java 它们的定义annotation基础知识
它们的定义annotation它由三部分组成: 它们的定义annotation.使用annotation班.annotation的处理方法. 一.自己定义annotation 元注解包含下面: 1) ...
- WPF ListView控件设置奇偶行背景色交替变换以及ListViewItem鼠标悬停动画
原文:WPF ListView控件设置奇偶行背景色交替变换以及ListViewItem鼠标悬停动画 利用WPF的ListView控件实现类似于Winform中DataGrid行背景色交替变换的效果,同 ...
- MVC HttpUtility.HtmlEncode是如何编码的
using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Text;us ...
- 基于vue开发的多功能的时间选择器组件,开箱即用
好一段时间没有写过博客了,在国庆期间心血来潮优化了一个组件,在日常开发中时常会有需求用到时间选择器,不同的项目需求可能会不一样.近期开发的几个项目中就有需求用到这样的选择器,由于以前有用到相关的组件, ...
- Python写的嗅探器——Pyside,Scapy
使用Python的Pyside和Scapy写的嗅探器原型,拥有基本框架,但是功能并不十分完善,供参考. import sys import time import binascii from PySi ...
- SQLServer 进程无法向表进行大容量复制(错误号: 22018 20253)
原文:SQLServer 进程无法向表进行大容量复制 我的环境:SQL SERVER 2008 R2:发布者 ->SQL SERVER 2017 订阅者 进程无法向表“"dbo&quo ...
- 教你如何在Deepin搭建Qt开发环境(sudo apt-get install qt5-default qt5-qmake g++ qtcreator,也许对龙芯版的Deepin也有用)
首先教大家一种很简单的方法,打开终端输入以下命令: sudo apt-get install qt5-default qt5-qmake g++ qtcreator 上面的命令会自动帮你安装qt5开发 ...
- 青云QingCloud黄允松:最高效的研发管理就是没有管理
摘要: 对于底层技术创新而言,没有管理是最好的管理,小规模作战,快速试错,迅速转变方向,迭代周期一定要短. 钛媒体注:钛媒体.商业价值联合主办的第五届“MIIC移动互联网创新大会”如期举行.2015 ...