我有一个脚本可以检查文件是否存在漏洞。如果文件路径存在,则脚本将检查是否可以读取该文件。但是,当我设置文件的权限时,os.access()无论如何都能读取文件。在Windows中我拒绝了所有权限,在Linux中,我在文件上尝试了chmod 000,并在两台机器上获得了相同的输出。这是代码:
import sys
import os
if len(sys.argv) == 2:
filename = sys.argv[1]
if not os.path.isfile(filename):
print '[-] ' + filename + ' does not exist.'
exit(0)
if not os.access(filename, os.R_OK):
print '[-] ' + filename + ': access denied.'
exit(0)
print '[+] Reading Vulnerabilities From: ' + filename
每当我传递一个不正确的文件名或路径时,os.path.isFile()都可以正常工作,但是os.access()并没有。我对python也很陌生,所有的帮助都将受到赞赏
更新:
当我运行脚本时,我使用命令:
python scriptName.py vuln_banners.txt
我已经跑了
chmod 000 vuln_banners.txt
我得到的唯一输出是:
'[+] Reading Vulnerabilities From: vuln_banners.txt
我跑了
ls -la vuln_banners.txt
得到了输出:
---------- 1 root root 397 Dec 31 22:32 vuln_banners.txt
答案 0 :(得分:3)
从上次评论中可以看出,您在Linux中运行脚本为root
,除非您真的知道您的内容是什么 做。
os.access()将返回 True ,因为即使其权限为 000,您也有权读取该文件强>
当我尝试在 root 权限下运行您的脚本时,我能够重现您的问题。尝试在普通用户下运行它,然后它应该按预期运行。
此外,如果脚本失败,您不希望它返回0
,您想要返回另一个值。值0
表示以无错误退出。您的脚本应该看起来与此类似,其中退出的返回值对您有意义。
import sys
import os
if len(sys.argv) == 2:
filename = sys.argv[1]
if not os.path.isfile(filename):
print '[-] ' + filename + ' does not exist.'
rvalue = 1
elif not os.access(filename, os.R_OK):
print '[-] ' + filename + ': access denied.'
rvalue = 2
else:
print '[+] Reading Vulnerabilities From: ' + filenam
rvalue = 0
exit(rvalue)