python检查目录文件权限并修改目录文件权限的操作


Posted in Python onMarch 11, 2020

我就废话不多说了,还是直接看代码吧!

# -*- coding: utf-8 -*-
# @author flynetcn
import sys, 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 = [];
 
def logger(level, str):
	logFd = open(LOG_FILE, 'a');
	logFd.write(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')+": "+("WARNING " if level else "NOTICE ")+str);
	logFd.close();
 
def walktree(top, callback):
	for f in os.listdir(top):
		pathname = os.path.join(top, f);
		mode = os.stat(pathname).st_mode;
		if stat.S_ISDIR(mode):
			callback(pathname, True);
			walktree(pathname, callback);
		elif stat.S_ISREG(mode):
			callback(pathname, False);
		else:
			logger(1, "walktree skipping %s\n" % (pathname));
 
def collectPath(path, isDir=False):
	if isDir:
		dirs.append(path);
	else:
		files.append(path);
	
 
def checkNginxWritableDirs(paths):
	uid = pwd.getpwnam('nginx').pw_uid;
	gid = pwd.getpwnam('nginx').pw_gid;
	for d in paths:
		dstat = os.stat(d);
		if dstat.st_uid != uid:
			try:
				os.chown(d, uid, gid);
			except:
				logger(1, "chown(%s, nginx, nginx) failed\n" % (d));
 
def checkOtherReadableDirs(paths, isDir=False):
	for d in paths:
		dstat = os.stat(d);
		if isDir:
			checkMode = 5;
			willBeMode = dstat.st_mode | stat.S_IROTH | stat.S_IXOTH;
		else:
			checkMode = 4;
			willBeMode = dstat.st_mode | stat.S_IROTH;
		if int(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__":
	for d in nginxWritableDirs:
		walktree(d, collectPath)
	dirs = dirs + files;
	checkNginxWritableDirs(dirs);
	dirs = [];
	files = [];
	for d in otherReadableDirs:
		walktree(d, collectPath)
	checkOtherReadableDirs(dirs, True);
	checkOtherReadableDirs(files, False);

补充知识:Python中获取某个用户对某个文件或目录的访问权限

在Python中我们通常可以使用os.access()函数来获取当前用户对某个文件或目录是否有某种权限,但是要获取某个用户对某个文件或目录是否有某种权限python中没有很好的方法直接获取,因此我写了个函数使用stat和pwd模块来实现这一功能。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
import pwd
import stat

def is_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)
   )

def is_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)
   )

def is_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)
   )

使用方法

print is_readable('/home', root)
print is_writable('/home', root)
print is_executable('/home', root)

print is_readable('/tmp', admin)
print is_writable('/tmp', admin)
print is_executable('/tmp', admin)

以上这篇python检查目录文件权限并修改目录文件权限的操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
用实例说明python的*args和**kwargs用法
Nov 01 Python
使用Python神器对付12306变态验证码
Jan 05 Python
Python迭代和迭代器详解
Nov 10 Python
Python cookbook(数据结构与算法)保存最后N个元素的方法
Feb 13 Python
好的Python培训机构应该具备哪些条件
May 23 Python
Python爬虫框架Scrapy基本用法入门教程
Jul 26 Python
pandas 选取行和列数据的方法详解
Aug 08 Python
Python3.7 pyodbc完美配置访问access数据库
Oct 03 Python
python selenium 执行完毕关闭chromedriver进程示例
Nov 15 Python
python 实现读取csv数据,分类求和 再写进 csv
May 18 Python
如何用Python徒手写线性回归
Jan 25 Python
浅谈Python列表嵌套字典转化的问题
Apr 07 Python
python 链接sqlserver 写接口实例
Mar 11 #Python
浅谈Python中range与Numpy中arange的比较
Mar 11 #Python
python读取当前目录下的CSV文件数据
Mar 11 #Python
python闭包、深浅拷贝、垃圾回收、with语句知识点汇总
Mar 11 #Python
在Python中用GDAL实现矢量对栅格的切割实例
Mar 11 #Python
将 Ubuntu 16 和 18 上的 python 升级到最新 python3.8 的方法教程
Mar 11 #Python
利用Python裁切tiff图像且读取tiff,shp文件的实例
Mar 10 #Python
You might like
phpmyadmin安装时提示:Warning: require_once(./libraries/common.inc.php)错误解决办法
2011/08/18 PHP
phpmyadmin下载、安装、配置教程
2017/05/16 PHP
JavaScript 创建对象和构造类实现代码
2009/07/30 Javascript
javascript中关于break,continue的特殊用法与介绍
2012/05/24 Javascript
js获取元素到文档区域document的(横向、纵向)坐标的两种方法
2013/05/17 Javascript
按钮接受回车事件的三种实现方法
2014/06/06 Javascript
Jquery仿IGoogle实现可拖动窗口示例代码
2014/08/22 Javascript
jQuery中insertBefore()方法用法实例
2015/01/08 Javascript
深入探秘jquery瀑布流的实现
2016/01/30 Javascript
Select2.js下拉框使用小结
2016/10/24 Javascript
js图片延迟加载(Lazyload)三种实现方式
2017/03/01 Javascript
bootstrap栅格系统示例代码分享
2017/05/22 Javascript
nodejs用gulp管理前端文件方法
2018/06/24 NodeJs
vue-cli初始化项目中使用less的方法
2018/08/09 Javascript
解决betterScroll在vue中存在图片时,出现拉不动的问题
2018/09/27 Javascript
使用NestJS开发Node.js应用的方法
2018/12/03 Javascript
在vue中使用echarts(折线图的demo,markline用法)
2020/07/20 Javascript
[02:43]DOTA2亚洲邀请赛场馆攻略——带你走进东方体育中心
2018/03/19 DOTA
Python 用户登录验证的小例子
2013/03/06 Python
python正则表达式抓取成语网站
2013/11/20 Python
Python装饰器decorator用法实例
2014/11/10 Python
Python实现MySQL操作的方法小结【安装,连接,增删改查等】
2017/07/12 Python
python+selenium select下拉选择框定位处理方法
2019/08/24 Python
彪马日本官网:PUMA日本
2019/01/31 全球购物
英国领先的在线高尔夫设备零售商:Golfgeardirect
2020/12/11 全球购物
简述安装Slackware Linux系统的过程
2012/01/12 面试题
高校辅导员推荐信范文
2013/12/25 职场文书
初中化学教学反思
2014/01/23 职场文书
宾馆总经理岗位职责
2014/02/14 职场文书
大学毕业生个人自荐书
2014/07/02 职场文书
四风问题党员个人整改措施
2014/10/27 职场文书
民事和解协议书格式
2014/11/29 职场文书
婚礼迎宾词大全
2015/08/10 职场文书
《西游记》读后感(3篇)
2019/09/20 职场文书
关于nginx 实现jira反向代理的问题
2021/09/25 Servers
以下牛机,你有几个
2022/04/05 无线电