python检查目录文件权限并修改目录文件权限的操作
我就废话不多说了,还是直接看代码吧!
#-*-coding:utf-8-*-
#@authorflynetcn
importsys,os,pwd,stat,datetime;
LOG_FILE='/var/log/checkDirPermission.log';
nginxWritableDirs=[
'/var/log/nginx',
'/usr/local/www/var',
];
otherReadableDirs=[
'/var/log/nginx',
'/usr/local/www/var/log',
];
dirs=[];
files=[];
deflogger(level,str):
logFd=open(LOG_FILE,'a');
logFd.write(datetime.datetime.now().strftime('%Y-%m-%d%H:%M:%S.%f')+":"+("WARNING"iflevelelse"NOTICE")+str);
logFd.close();
defwalktree(top,callback):
forfinos.listdir(top):
pathname=os.path.join(top,f);
mode=os.stat(pathname).st_mode;
ifstat.S_ISDIR(mode):
callback(pathname,True);
walktree(pathname,callback);
elifstat.S_ISREG(mode):
callback(pathname,False);
else:
logger(1,"walktreeskipping%s\n"%(pathname));
defcollectPath(path,isDir=False):
ifisDir:
dirs.append(path);
else:
files.append(path);
defcheckNginxWritableDirs(paths):
uid=pwd.getpwnam('nginx').pw_uid;
gid=pwd.getpwnam('nginx').pw_gid;
fordinpaths:
dstat=os.stat(d);
ifdstat.st_uid!=uid:
try:
os.chown(d,uid,gid);
except:
logger(1,"chown(%s,nginx,nginx)failed\n"%(d));
defcheckOtherReadableDirs(paths,isDir=False):
fordinpaths:
dstat=os.stat(d);
ifisDir:
checkMode=5;
willBeMode=dstat.st_mode|stat.S_IROTH|stat.S_IXOTH;
else:
checkMode=4;
willBeMode=dstat.st_mode|stat.S_IROTH;
ifint(oct(dstat.st_mode)[-1:])&checkMode!=checkMode:
try:
os.chmod(d,willBeMode);
except:
logger(1,"chmod(%s,%d)failed\n"%(d,oct(willBeMode)));
if__name__=="__main__":
fordinnginxWritableDirs:
walktree(d,collectPath)
dirs=dirs+files;
checkNginxWritableDirs(dirs);
dirs=[];
files=[];
fordinotherReadableDirs:
walktree(d,collectPath)
checkOtherReadableDirs(dirs,True);
checkOtherReadableDirs(files,False);
补充知识:Python中获取某个用户对某个文件或目录的访问权限
在Python中我们通常可以使用os.access()函数来获取当前用户对某个文件或目录是否有某种权限,但是要获取某个用户对某个文件或目录是否有某种权限python中没有很好的方法直接获取,因此我写了个函数使用stat和pwd模块来实现这一功能。
#!/usr/bin/envpython #-*-coding:utf-8-*- importos importpwd importstat defis_readable(path,user): user_info=pwd.getpwnam(user) uid=user_info.pw_uid gid=user_info.pw_gid s=os.stat(path) mode=s[stat.ST_MODE] return( ((s[stat.ST_UID]==uid)and(mode&stat.S_IRUSR>0))or ((s[stat.ST_GID]==gid)and(mode&stat.S_IRGRP>0))or (mode&stat.S_IROTH>0) ) defis_writable(path,user): user_info=pwd.getpwnam(user) uid=user_info.pw_uid gid=user_info.pw_gid s=os.stat(path) mode=s[stat.ST_MODE] return( ((s[stat.ST_UID]==uid)and(mode&stat.S_IWUSR>0))or ((s[stat.ST_GID]==gid)and(mode&stat.S_IWGRP>0))or (mode&stat.S_IWOTH>0) ) defis_executable(path,user): user_info=pwd.getpwnam(user) uid=user_info.pw_uid gid=user_info.pw_gid s=os.stat(path) mode=s[stat.ST_MODE] return( ((s[stat.ST_UID]==uid)and(mode&stat.S_IXUSR>0))or ((s[stat.ST_GID]==gid)and(mode&stat.S_IXGRP>0))or (mode&stat.S_IXOTH>0) )
使用方法
printis_readable('/home',root)
printis_writable('/home',root)
printis_executable('/home',root)
printis_readable('/tmp',admin)
printis_writable('/tmp',admin)
printis_executable('/tmp',admin)
以上这篇python检查目录文件权限并修改目录文件权限的操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。