最近做一个可执行shell调度的需求,要求用户输入shell,然后后台定时调度运行。实现大致为:保存用户的输入,设定时间,crontab定时执行用户的输入。但这里涉及到一个安全问题,如何确定用户的输入是安全的?

最初的想法是过滤危险命令,比如rm -rf /之类的。后来,索性把用户的命令丢到一个特殊文件内,以一个权限很小的用户去执行用户命令就好了。

于是写好的脚本大致如下

sudo runuser -l etl_shell -m -c "
function make_dir(){
local dir_name=\$1
if [ ! -d \$dir_name ];then
mkdir -p \$dir_name
else
echo dir \${dir_name} exist
fi
}
function touch_file(){
local file_name=\$1
if [ ! -f \$file_name ];then
touch \$file_name
else
echo file \${file_name} exist
fi
}
make_dir $script_temp;
touch_file ${script_file}
echo \"$tar_command\" > ${script_file};
chmod 700 ${script_file};
sh ${script_file};
"

手动执行没有问题,命令确实以另一个用户执行了。添加到定时任务crontab。结果发现运行失败,错误是:

udo:抱歉,您必须拥有一个终端来执行 sudo

不允许非终端执行sudo,那只能以root用户来做这件事。而我又没有root用户,只好修改这个规则,允许crontab 执行sudo

找到/etc/sudoers

#
# Disable "ssh hostname sudo <cmd>", because it will show the password in clear.
# You have to run "ssh -t hostname sudo <cmd>".
#
#Defaults requiretty #
# Refuse to run if unable to disable echo on the tty. This setting should also be
# changed in order to be able to use sudo without a tty. See requiretty above.
#
#Defaults !visiblepw

注释掉这两个就好了。

最新文章

  1. 关于 Xcode8打印JSON的时候,NSLog控制台显示不完整
  2. [Data Structure] LCSs——最长公共子序列和最长公共子串
  3. C#中datatable导出excel(三种方法)
  4. javase基础复习攻略《五》
  5. intellij中编译报错: The packaging for this project did not assign a file to the build artifact
  6. 支持向量机(SVM)基础
  7. 《数据结构与算法分析》学习笔记(四)——栈ADT
  8. bzoj1036: [ZJOI2008]树的统计Count 树链剖分+线段树
  9. Android自定义控件步骤总结
  10. 基于webpack的React项目搭建(二)
  11. SQL Server中NULL的一个测试
  12. runTime动态给类添加属性
  13. 结对编程core_6
  14. Docker网络解决方案 - Weave部署记录
  15. unity开源移动库iTween使用完整Demo
  16. NATS—消息通信模型
  17. 最短路径-----迪杰斯特拉算法(C语言版)
  18. python笔记02:列表与元素
  19. tbb静态库编译
  20. 73. 矩阵置零 leetcode JAVA

热门文章

  1. iOS学习笔记之异步图片下载
  2. python 全栈开发,Day36(作业讲解(大文件下载以及进度条展示),socket的更多方法介绍,验证客户端链接的合法性hmac,socketserver)
  3. 步步为营-62-Excel的导入和导出
  4. ERP产品购进批量提交文件(三十六)
  5. #3 Codeforces-865C Gotta Go Fast(期望dp)
  6. BZOJ1966 [Ahoi2005]VIRUS 病毒检测 动态规划
  7. BZOJ1076 [SCOI2008]奖励关 概率 状态压缩动态规划
  8. HTTP 的长连接和短连接
  9. wireshark实战之局域网抓包分析
  10. JavaNIO快速入门