前言

在我们日常开发中经常会需要用到临时文件,本文就给大家介绍了关于Shell建立与使用临时性文件的相关内容,分享出来供大家参考学习,话不多说了,来一起看看详细的介绍:
虽然使用管道可以省去建立临时性文件的需求,不过有时候临时性文件还是派的上用场的。UNIX不同于其他操作系统的地方就是:它没有那种将不再需要的文件设法神奇删除的想法。反倒提供了两个特殊目录:/tmp和/var/tmp(旧系统为:/usr/tmp),这些文件可正常被存储,当它们未被清理干净时也不会弄乱一般的目录。大部分系统上的/tmp都会在系统开机时清空,不过/var/tmp下的重新开机时仍需存在,因为有些文本编辑程序,会将它们的备份文件存放在这里,从而系统毁损后可用来恢复数据。
因为/tmp目录使用频繁,有些系统就会将它放在常驻内存型的文件系统里,以便快速访问,如下面这个例子:
root@localhost:~/training# df /tmp Filesystem 1K-blocks Used Available Use% Mounted on swap 568048704 10772216 528398256 2% /tmp
将文件系统放在替换空间区域里,表示它存在于内存中,直到内存资源消耗殆尽时,部分数据才会写入替换空间。
为确保临时性文件会在任务完成时删除,编译语言的程序员可以先开启文件,再下达unlink()系统调用。这么做就会马上删除文件,但因为它仍在开启状态,所以仍可继续访问,直到文件关闭或工作结束为止,只要其中一个先发生即可。打开后解除连接的技巧一般来说在非UNIX操作系统下是无法运行的,在加载于UNIX文件系统中目录上的外部文件系统也是这样,且在大多数脚本语言中无法使用它。
$$变量
共享的目录或同一个程序的多个执行实例,都可能造成文件名冲突,在Shell脚本里的传统做法就是使用进程ID,可以在Shell变量$$中取得,构建成临时性文件名的一部分。要解决完整临时性文件名发生问题的可能性,可使用环境变量覆盖目录名称,通常是TMPDIR。另外,你也应该使用trap命令,要求在工作完成时删除临时性文件,因此,常见的Shell脚本起始如下:
umask 077 # 删除用户以外其他人的所有访问权
TMPFILE=${TMPDIR-/tmp}/myprog.$$ # 产生临时性文件名
trap 'rm -f $TMPFILE' EXIT # 完成时删除临时性文件
mktemp程序
像/tmp/myprog.$$这样的文件名会有这个问题:太好猜了!攻击者只需要在目标程序执行时列出目录几次,就可以找出它正在使用的是哪些临时性文件。通过预先建立适当的指定文件,攻击者可以让你的程序失败或读取伪造的数据,甚至重设文件权限,以便于攻击者读取文件。
处理此类安全性议题时,文件名必须是不可预知的。BSD与GUN/Linux系统都提供了mktemp命令,供用户建立难以猜测的临时性文件名称。虽然底层的mktemp()函数库调用已由POSIX标准化,但mktemp命令却没有。如果你的系统没有mktemp,我们建议你安装OpenBSD的可移植版本
mktemp采用含有结尾X字符的文件名模板(可选用的),我们建议至少使用12个X。程序会用从随机数字与进程ID所产生的文件或数字字符串来取代它们,所建立的文件名不允许与其他人访问,然后将文件名打印在标志输出上,这里看看mktemp的使用:
# TMPFILE=`mktemp /tmp/myprog.XXXXXXXXXXXX` || exit 1 # 建立唯一的临时性文件 # ls -l $TMPFILE # 列出临时性文件 -rw------- 1 root root 0 8月 28 18:57 /tmp/myprog.yW0oosXxljx5
进程编号在文件名尾号可以看出,但根本无法预测。当临时性文件无法建立或没有mktemp可用时,条件式exit命令可确保马上终止程序并带出错误输出。
最新版的mktemp允许省略模板;它会使用/tmp/tmp.XXXXXXXXXX。然而,较旧版本仍是需要模板,所以你的Shell版本请避免使用这种省略方式.
为避免在程序里将目录名称直接编码,可使用-t选项: 让mktemp使用环境变量TMPDIR所指定的目录或/tmp, -d选项要求建立临时性目录:
root@localhost:/tmp# DIR=`mktemp -d -t myprog.XXXXXXXXXXXX` || exit 1 # 建立临时性目录 root@localhost:/tmp# ls -lFd $DIR drwx------ 2 root root 4096 8月 28 19:06 /tmp/myprog.Hayy9pDnDBEB/ # 列出目录本身
由于组与其他人都无法访问目录,攻击者也无从得知你继续放入的文件名称,不过如果你的版本是开放公众读取的,当然还是可能猜出来!由于目录无法列出成列表,所以没有权限的攻击者就无法确认他的猜测。
/dev/random与/dev/urandom特殊文件
有些系统会提供两种随机伪设备:/dev/random与/dev/urandom。现在这些仅在BSD系统、GUN/linux、IBM AIX 5.2、Mac OS X与Sun Solaris 9, 搭配两个第三方的实例与早期Solaris版本的计算修整程序上,提供此支持。这些设备的任务,是提供永不为空的随机字节数据流:这样的数据来源是许多加密程序与安全应用程序所需要的。虽然已经有很多的简单算法可以产生这种虚拟随机数据流,但其实要产生一个真正的随机数据其实是很难的事。
这两个设备的差别,在/dev/random会一直封锁,直到系统产生的随机数已充分够用,所以它可以确保高品质的随机数。相对地,/dev/urandom不会死锁,其数据的随机程度也不高。
由于这些设备是共享资源,攻击者轻易就能加载拒绝服务,通过读取该设备并丢弃数据,阻断/dev/random。现在比较一下这两个设备,请注意它们两个在count参数下的不同:
root@localhost:/tmp# time dd count=1 ibs=1024 if=/dev/random > /dev/null # 读取1KB的随机码元祖 0+1 records in 0+1 records out 110 bytes (110 B) copied, 0.000108837 s, 1.0 MB/s root@localhost:/tmp# time dd count=1024 ibs=1024 if=/dev/urandom > /dev/null # 读取1MB的随机码元祖 1024+0 records in 2048+0 records out 1048576 bytes (1.0 MB) copied, 0.0832226 s, 12.6 MB/s
/dev/random被读取的越多,它的响应越慢。我们用这两个设备在几个系统上试验,发现要自/dev/random上提取10MB的数据,竟耗掉了一天或一天以上的时间。而/dev/urandom在我们最快的系统上执行,三秒钟即可产生相同的数据。
这两个伪设备都可以取代mktemp,成为产生难以推测的临时性文件名的替代方案:
$ TMPFILE=/tmp/secret.$(cat /dev/urandom | od -x | tr -d ' ' | head -n 1) $ echo $TMPFILE /tmp/secret.00000003ba2c845df949a7535088c8805479fdf
此处,我们从/dev/urandom读取二进制字节数据流,以od将其转换为十六进制,使用tr去掉空格,之后满一行时停止。因为od将每个输出行转换为16个字节,因而提供了16 * 8 = 128个随机位,或是2的128次方,种可能的副文件名。如果该文件名建立在仅用户可列出的目录中,则攻击者无从猜测!
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。
# shell
# 创建临时文件
# 临时文件
# 建立文件
# Shell脚本创建指定大小文件的测试数据
# 判断文件是否存在的shell脚本代码
# shell按行读取文件的3种方法
# 这两个
# 元祖
# 文件系统
# 就会
# 随机数
# 放在
# 会在
# 死锁
# 转换为
# 的是
# 开机时
# 加载
# 操作系统
# 几个
# 在这里
# 会有
# 相关内容
# 就能
# 多个
# 很难
相关文章:
专业公司网站制作公司,用什么语言做企业网站比较好?
建站之星安装后如何配置SEO及设计样式?
如何通过主机屋免费建站教程十分钟搭建网站?
建站之星收费标准详解:套餐费用及年费价格表一览
如何快速配置高效服务器建站软件?
建站VPS选购需注意哪些关键参数?
制作网站的公司有哪些,做一个公司网站要多少钱?
php json中文编码为null的解决办法
建站org新手必看:2024最新搭建流程与模板选择技巧
如何快速搭建个人网站并优化SEO?
,南京靠谱的征婚网站?
如何快速重置建站主机并恢复默认配置?
如何用y主机助手快速搭建网站?
高防网站服务器:DDoS防御与BGP线路的AI智能防护方案
如何在Golang中处理模块冲突_解决依赖版本不兼容问题
建站主机空间推荐 高性价比配置与快速部署方案解析
如何确认建站备案号应放置的具体位置?
,巨量百应是干嘛的?
如何做静态网页,sublimetext3.0制作静态网页?
自助网站制作软件,个人如何自助建网站?
零基础网站服务器架设实战:轻量应用与域名解析配置指南
阿里云网站搭建费用解析:服务器价格与建站成本优化指南
西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?
Swift开发中switch语句值绑定模式
官网建站费用明细查询_企业建站套餐价格及收费标准指南
北京企业网站设计制作公司,北京铁路集团官方网站?
相亲简历制作网站推荐大全,新相亲大会主持人小萍萍资料?
专业的网站制作设计是什么,如何制作一个企业网站,建设网站的基本步骤有哪些?
广州营销型建站服务商推荐:技术优势与SEO优化解析
建站之星后台管理系统如何操作?
如何在云指建站中生成FTP站点?
网站制作中优化长尾关键字挖掘的技巧,建一个视频网站需要多少钱?
C#怎么创建控制台应用 C# Console App项目创建方法
如何解决ASP生成WAP建站中文乱码问题?
如何配置支付宝与微信支付功能?
高端企业智能建站程序:SEO优化与响应式模板定制开发
头像制作网站在线制作软件,dw网页背景图像怎么设置?
如何通过二级域名建站提升品牌影响力?
网站网页制作电话怎么打,怎样安装和使用钉钉软件免费打电话?
香港服务器选型指南:免备案配置与高效建站方案解析
建站之星如何快速生成多端适配网站?
香港网站服务器数量如何影响SEO优化效果?
沈阳个人网站制作公司,哪个网站能考到沈阳事业编招聘的信息?
,网站推广常用方法?
如何高效生成建站之星成品网站源码?
活动邀请函制作网站有哪些,活动邀请函文案?
七夕网站制作视频,七夕大促活动怎么报名?
桂林网站制作公司有哪些,桂林马拉松怎么报名?
制作网站的软件免费下载,免费制作app哪个平台好?
表情包在线制作网站免费,表情包怎么弄?
*请认真填写需求信息,我们会在24小时内与您取得联系。