无论如何,Python os.access()都会读取文件

时间:2015-01-02 18:56:15

标签: python

我有一个脚本可以检查文件是否存在漏洞。如果文件路径存在,则脚本将检查是否可以读取该文件。但是,当我设置文件的权限时,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

1 个答案:

答案 0 :(得分:3)

从上次评论中可以看出,您在Linux中运行脚本为root,除非您真的知道您的内容是什么 做。

如果您在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)