你为什么不写自己的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符号,如;,&,&&,||,$,并确认反引号。

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

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

  1. ssh设置免密登录后登录仍需密码可能的原因,以及 ssh 出问题或的调试方法

    免密登录失败 ssh设置免密登录后登录仍需密码可能的原因,home 路径下的对应用户权限不对,或者 .ssh 文件夹权限不对,/home/$user 和 /home/$user/.ssh 路径必须是 ...

  2. 调用API接口登录后,获取用户信息保存到Vuex中并渲染到Vue页面

    文件封装 步骤 核心请求文件 在 apiUse 文件夹中的 index.js 文件写 API接口方法 baseURL + url 后台完整地址 将信息写入 store 文件夹中的 index.js 文 ...

  3. node 后台重定向_登录后重定向到用户原本要访问的页面《 Node.js 应用:重构与改进 #3 》...

    现在我是未登录的状态 ... 可以先试着打开一个内容的编辑界面 ... 会被重定向到登录页面 ... 输入用户名 ... 密码 .. 确认登录 ... 成功以后会把用户重定向到这个用户页面上 ... ...

  4. Linux中ssh访问与ftp登录

    一.实验环境 centos7虚拟机:用做被登录者 kali 2022虚拟机:用做登录者 1.ftp centos7需要安装vsftpd.ftd服务 执行yum -y install vsftpd-* ...

  5. linux 重读环境变量,关于linux中使用source /etc/profile重新读取配置后,新的环境变量只能在当前终端里面有效,新开的终端提示 command not found...

    文章目录 问题 知识点 问题分析及解决 补充 问题 在使用linux桌面环境(通常是ubuntu/debian/deepin等版本的linux)的时候,新增环境变量后,会使用source /etc/p ...

  6. Linux(三)Linux常用命令

    目录 补充 查看帮助 文件管理 查看文件信息ls 文件属性 切换工作目录cd 显示当前工作目录pwd 创建新目录mkdir 创建新文件touch 删除文件或目录rm 拷贝cp 移动/重命名mv 建立连 ...

  7. 在不同域中各个系统拥有自已独立的用户系统时的单点登录问题

    我们在实现业务中经常会碰到多个系统各自有各自的用户登录系统,而且这些系统是各自运行在各自的域下,所以要实现这些系统用户的单点登录就是个问题了,所以自己想了一个方案希望看看是否可行. 1.sso站点必须 ...

  8. 华为交换机和路由器AAA和ssh、telnet远程登录~

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 华为交换机和路由器AAA和ssh.telnet远程登录~ 提华为交换机和路由器AAA和ssh.telnet远程登录~ 一.ssh登录 ...

  9. ssh localhost免密登录

    设置ssh localhost免密登录 安装好ssh后.使用ssh localhost 登录本机会输入密码,每次输入密码会比较麻烦,那么就需要设置免密登录了. 1.进入.ssh目录 cd ~/.ssh ...

最新文章

  1. 我的心愿秀、大家也来秀(show)一下
  2. python序列化和反序列化
  3. [软件更新]Adobe Photoshop Elements 8.0.0
  4. 2021年李永乐6套卷一道无穷小定义的题目
  5. 【机器学习入门笔记2:OpenCV图片读取和展示】20190203
  6. MyBatis源码解析(二)——Environment环境
  7. 好程序员Web前端教程分享JavaScript开发技巧
  8. linux服务器黑屏_xshell连接Linux系统(小红帽7.3)服务器,导致服务器黑屏
  9. debian源码安装bind9.10.6
  10. npm publish 发布一个 Angular 库的时候报错以及解决方法
  11. pic单片机c语言读eeprom,PIC16F877单片机内部EEPROM读写实例
  12. 技术交底软件_【干货分享】软件类产品如何进行专利挖掘与技术交底书撰写?...
  13. 《天天数学》连载25:一月二十五日
  14. 华为5g鸿蒙折叠,华为5G折叠概念新机:麒麟9000+鸿蒙OS 这才是华为的实力
  15. 27个提升效率的iOS开源库推荐
  16. 这个严重 0day 可导致79款 Netgear 路由器遭远程接管,无补丁
  17. 修改本地管理员密码脚本
  18. 专业美妆磨皮大师扩展插件支持PS2021版效果
  19. 2020年蓝桥杯省赛 C++ B组
  20. 点燃创业引擎的天使投资

热门文章

  1. linux 笔记之一mysql源码包安装
  2. Android系统中通过shell命令实现wifi的连接控制
  3. c++ 舞伴配对问题_挑战新物体描述问题,视觉词表解决方案超越人类表现
  4. python注释及语句分类
  5. django-rest-swagger显示接口备注内容
  6. MySQL查询select实例 【笔记】
  7. c++ sleep函数_Linux 多线程应用中如何编写安全的信号处理函数
  8. 普通人学python有意义吗_学python难吗
  9. MATLAB中MEX文件的编写与调试
  10. java 日期 年数_java 日期加减天数、月数、年数的计算方式