linux 特定用户ssh,linux - 如何在登录后将SSH用户限制为一组预定义的命令?

你为什么不写自己的login-shell? 为此使用Bash会非常简单,但您可以使用任何语言。

Bash中的示例

使用您喜欢的编辑器创建文件;(这可以是任何名称或路径,但应该是&和&&):

#!/bin/bash

commands=("man" "pwd" "ls" "whoami")

timestamp(){ date +'%Y-%m-%s %H:%M:%S'; }

log(){ echo -e "$(timestamp)\t$1\t$(whoami)\t$2" > /var/log/rbash.log; }

trycmd()

{

# Provide an option to exit the shell

if [[ "$ln" == "exit" ]] || [[ "$ln" == "q" ]]

then

exit

# You can do exact string matching for some alias:

elif [[ "$ln" == "help" ]]

then

echo "Type exit or q to quit."

echo "Commands you can use:"

echo " help"

echo " echo"

echo "${commands[@]}" | tr ' ' '\n' | awk '{print " " $0}'

# You can use custom regular expression matching:

elif [[ "$ln" =~ ^echo\ .*$ ]]

then

ln="${ln:5}"

echo "$ln" # Beware, these double quotes are important to prevent malicious injection

# For example, optionally you can log this command

log COMMAND "echo $ln"

# Or you could even check an array of commands:

else

ok=false

for cmd in "${commands[@]}"

do

if [[ "$cmd" == "$ln" ]]

then

ok=true

fi

done

if $ok

then

$ln

else

log DENIED "$cmd"

fi

fi

}

# Optionally show a friendly welcome-message with instructions since it is a custom shell

echo "$(timestamp) Welcome, $(whoami). Type 'help' for information."

# Optionally log the login

log LOGIN "$@"

# Optionally log the logout

trap "trap=\"\";log LOGOUT;exit" EXIT

# Optionally check for '-c custom_command' arguments passed directly to shell

# Then you can also use ssh user@host custom_command, which will execute /root/rbash.sh

if [[ "$1" == "-c" ]]

then

shift

trycmd "$@"

else

while echo -n "> " && read ln

do

trycmd "$ln"

done

fi

您所要做的就是将此可执行文件设置为登录shell。 例如,编辑;文件,并将该用户&的当前登录shell替换为&&。

这只是一个简单的例子,但您可以根据需要将其设置为高级,这个想法就在那里。 小心不要通过更改自己和唯一用户的登录shell来锁定自己。 并始终测试奇怪的符号和命令,看它是否真的安全。

你可以用以下方法测试它:;。

注意,确保匹配整个命令,并注意通配符! 最好排除Bash符号,如;,&,&&,||,$,并确认反引号。

根据您给用户的自由度,它不会比这更安全。 我发现通常我只需要让一个只能访问少量相关命令的用户,在这种情况下,这确实是更好的解决方案。但是,您是否希望提供更多自由,监狱和权限可能更合适。 很容易犯错误,只有在已经太晚的时候才会注意到。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/467403.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

水晶报表的推模式

在一个多层结构中,水晶报表的使用往往比较繁琐:1、在项目中添加数据集,形成xsd文件2、利用xsd文件,在水晶报表环境中生成报表3、回到.net,添加rpt文件这样做的坏处除了繁琐,就是在UI层直接要访问数据库&…

关于sql和MySQL的语句执行顺序(必看!!!)

ql和mysql执行顺序,发现内部机制是一样的。最大区别是在别名的引用上。 一、sql执行顺序 (1)from (3) join (2) on (4) where (5)group by(开始使用select中的别名,后面的语句中都可以使用)(6) avg,sum.... (7)having (8) select (9) distinct (10) orde…

fedora linux命令,Fedora Linux的一些常用设置和常用命令

1.设置常用路径跳转:alias ubootcd /opt/U-boot-2009.11_tekkaman/U-boot-2009.11_tekkaman/2.samba服务重启命令在更改ip后,或修改samba配置文件后,如果没有重启服务,所作的修改实际上是不会生效的重启网络服务的命令是service network rest…

10大黑客专用的 Linux 操作系统,你了解哪些?

今天列出一些最常用、最受欢迎的Linux发行版来学习黑客和渗透测试。1. Kali LinuxKali Linux是最著名的Linux发行版,用于道德黑客和渗透测试。Kali Linux由Offensive Security开发,之前由BackTrack开发。Kali Linux基于Debian。它带有来自安全和取证各个…

【windows phone】CollectionViewSource的妙用

在windows phone中绑定集合数据的时候,有时候需要分层数据,通常需要以主从试图形式显示。通常的方法是将第二个ListBox(主视图)的数据源绑定到第一个ListBox (从视图)的SelectedItem,或者通过第…

ftp linux包,图文详解Ubuntu搭建Ftp服务器的方法(包成功)

一、今天下午由于课程的要求不得已做了Ubuntu搭建Ftp服务器的实验,但是实验指导书还是N年前的技术,网上搜了一大把,都是模模糊糊的!在百般困难中终于试验成功,特把经验分给大家 希望大家少走弯路!二、详细步…

产品狗,工作三年,转行AI应该怎样规划?

作为AI 初学者来说,最大的问题就是:资料太多!!!看不完!!!不知道如何取舍!!!人的精力有限!!!大部分想转行AI算法…

业务系统里面常见的方法接口设计

在程序中用得最多的还是方法,在处理业务的系统中如何设计方法是一个很重要的问题。很多系统由于缺乏统一的约定而导致维护困难。本文主要介绍的是偶在平常的开发中总结出来的一些方法设计的思路。希望大家不嫌弃。 1. 简单的方法 void DoSth(args) { // …

linux python 信号,Python模块之信号(signal)

在了解了Linux的信号基础之 后,Python标准库中的signal包就很容易学习和理解。signal包负责在Python程序内部处理信号,典型的操作包括预设信号处理函数,暂 停并等待信号,以及定时发出SIGALRM等。要注意,signal包主要是…

你为什么喜欢VIM?

昨天看到的一个讨论,说vim有没有那么必要?所以写了这篇文章,在评论区说出你的观点,当然说出你的观点的时候,你拿不到一百万,也得不到小红花,但也是因为你的评论,我可能会开心一整天。…

新世纪篇章

团队blog开通http://www.cnblogs.com/team/solartimes.html还没弄明白怎么搞。。。一阵研究solartimes成员,快来注册。。。 转载于:https://www.cnblogs.com/konimeter/archive/2005/09/19/239671.html

RTT大牛告诉你,混合微内核是什么?

RT-Thread之前写过好几篇文章介绍微内核,然而不少开发者依然不清楚到底微内核操作系统是什么。为此,我们特别整理了5期快问快答,来为大家答疑解惑!RT-Thread Smart称作是混合微内核操作系统,为什么叫混合微内核操作系统…

linux操作指令及根目录介绍

1. 查看当做操作目录位置 > pwd 2. 查看(当前)目录里边的文件内容 > ls //list > ls -l 或ll //显示文件的详细信息 > ls -al //all显示文件的详细信息(包括隐藏文件) > ls -a //显示目录全部文件名字(包括隐藏文件) > ls [-al] 目录 //查看指定目录的文件信…

计算机linux运维日记,计算机的运维系统情况

其实,对于计算机的主要部件来说,计算机是有硬件和软件组成的,并且能够通过硬件和软件的协同工作完成了的,而对于一些计算机的硬件,则是由一些不同的部件进行完成的,那么其中主要的补间就是内存,…

Linux ALSA 图解

最近在解决一个音频的问题,所以正好借这个机会来把音频的东西重新梳理一下,总结是一个很好的习惯,能方便自以后遇到问题快速排查问题。平台「MT8167」内核版本「kernel 4.4」音频读数据函数流程tinyalsa调用读取函数IOCTL调用流程读取数据到应…

OpenGL学习笔记-坐标系统

转换关系: 局部坐标系 (模型矩阵)》 世界坐标系(观察矩阵)》观察坐标(投影矩阵)》裁剪坐标 Vclip Mprojection * Mview * Mmodel * Vlocal 裁剪空间(透视划分)》标准化设…

将一段复杂文本变成字符串的赋值语句

因为需要在C#的代码中,写入一大段的js代码和网页代码,试验已经没有问题了。实现时却碰到一个小问题,就是大段的js和html代码,应该以什么方式存在。最省事的方式,其实就是存在一个单独的文件中,每次读入即可…

ARM 原子操作里的两个汇编指令

今天一个读者朋友给我留言,问了这个问题,ARM原子操作的汇编代码,还给我截图了两个不同的解释,让我说哪个是正确的。原子操作的起因是为了内核同步,保证数据在正确性,之前已经吹过一波,可以看这几…

解决Ubuntu下pycharm无法输入中文的问题

sudo nautilus在这个界面中通过“计算机”进入pycharm.sh所在文件夹。一般在安装包的bin文件夹中。3、在文件pycharm.sh中添加红色字样内容(根据自己实际pycharm.sh文件内容适当添加)[maokxlocalhost bin]$ vi pycharm.sh# ----------------------------…