它没有给出日期的完整路径。
它没有给出查找的完整路径。
它没有给出rm的完整路径。
它执行错误检查。
它没有验证目录的正确性。
让我们再看一下另外一个脚本是如何解决其中的一些问题的。
#!/usr/bin/ksh
cd /directory || exit -1
PATH=/usr/bin; export PATH
/usr/bin/date > log
/usr/bin/find /directory -mtime +7 -ls -exec /usr/bin/rm -rf {} \; \
》 log 2>&1
第二行,cd /directory || exit -1,告诉ksh的尝试使用CD命令进入/directory。如果命令失败,它需要退出脚本并且返回一个–1的代码。在Ksh命令中||意味着“如果上个命令失败”,&&则意味着“如果上个命令成功”。举一个额外的例子,使用命令touch /testfile || echo Could not touch创建一个名为/testfile的文件,或者如果文件不能被创建(也许用户没有足够的权限来创建它),那么在屏幕上会显示“Could not touch”。使用命令touch
/testfile && echo Created file来创建/testfile文件,如果touch命令成功,在屏幕上只会显示“Created file”。用户检查的条件将决定用户是使用||还是&&。
如果脚本继续运行,用户将进入/directory。现在用户可以明确指定用户的路径,如果用户忘记了完整路径可以使用系统搜索命令来锁定。这个方法的例子并没有在这个小脚本中,但它是一个很好的习惯,尤其是在当用户写长的并且更复杂的脚本时;如果用户忘了指定完整的路径,用户的脚本调用木马程序几率将会非常小。
接下来用户调用date的全名是:/usr/bin/date。用户也可以完全指定/usr/bin/find和/usr/bin/rm。通过执行此操作,用户可以让希望在用户系统中插入木马程序并且在用户不知觉的情况下运行的人更加困难。毕竟,如果他们有足够的权限来修改文件/usr/bin,他们可能就有足够的权限来做任何他们想做的事情。
当编写一个脚本,经常需要遵循这些简单的规则:
(责任编辑:)