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实现划词翻译
Apr 23 Python
python正则表达式re模块详解
Jun 25 Python
python使用pyhook监控键盘并实现切换歌曲的功能
Jul 18 Python
在Python中实现贪婪排名算法的教程
Apr 17 Python
python类:class创建、数据方法属性及访问控制详解
Jul 25 Python
Python 专题三 字符串的基础知识
Mar 19 Python
Python学生成绩管理系统简洁版
Apr 05 Python
python并发爬虫实用工具tomorrow实用解析
Sep 25 Python
Python表达式的优先级详解
Feb 18 Python
Python脚本去除文件的只读性操作
Mar 05 Python
Tensorflow中批量读取数据的案列分析及TFRecord文件的打包与读取
Jun 30 Python
python文件名批量重命名脚本实例代码
Apr 22 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
PHP生成数组再传给js的方法
2014/08/07 PHP
Laravel配置全局公共函数的方法步骤
2019/05/09 PHP
php经典趣味算法实例代码
2020/01/21 PHP
php-7.3.6 编译安装过程
2020/02/11 PHP
php实现图片压缩处理
2020/09/09 PHP
[HTML/CSS/Javascript]WWTJS
2007/09/25 Javascript
Jquery进度条插件 Progress Bar小问题解决
2011/07/12 Javascript
js性能优化 如何更快速加载你的JavaScript页面
2012/03/17 Javascript
20行代码实现的一个CSS覆盖率测试脚本
2013/07/07 Javascript
处理及遍历XML文档DOM元素属性及方法整理
2013/08/23 Javascript
jquery mobile事件多次绑定示例代码
2013/09/13 Javascript
js实现显示当前状态的导航效果代码
2015/08/28 Javascript
JS+CSS实现类似QQ好友及黑名单效果的树型菜单
2015/09/22 Javascript
Bootstrap+jfinal退出系统弹出确认框的实现方法
2016/05/30 Javascript
在JavaScript中调用Java类和接口的方法
2016/09/07 Javascript
十大 Node.js 的 Web 框架(快速提升工作效率)
2017/06/30 Javascript
JavaScript实现的原生态Tab标签页功能【兼容IE6】
2017/09/18 Javascript
ui-router中使用ocLazyLoad和resolve的具体方法
2017/10/18 Javascript
jQuery实现table表格checkbox全选的方法分析
2018/07/04 jQuery
jQuery 实现倒计时天,时,分,秒功能
2018/07/31 jQuery
Vue 实现展开折叠效果的示例代码
2018/08/27 Javascript
TypeScript类型声明书写详解
2019/08/28 Javascript
Python中使用中文的方法
2011/02/19 Python
python获取本机mac地址和ip地址的方法
2015/04/29 Python
Python素数检测的方法
2015/05/11 Python
Python编程pygame模块实现移动的小车示例代码
2018/01/03 Python
Python 3 使用Pillow生成漂亮的分形树图片
2019/12/24 Python
解决Python 函数声明先后顺序出现的问题
2020/09/02 Python
常用的四种CSS透明属性介绍
2014/04/12 HTML / CSS
会计专业毕业生自我鉴定
2013/10/29 职场文书
培训主管的岗位职责
2013/11/23 职场文书
教师考核评语
2014/04/28 职场文书
社区平安建设汇报材料
2014/08/14 职场文书
2014乡镇党委副书记对照检查材料思想汇报
2014/10/09 职场文书
2015年五一劳动节活动总结
2015/02/09 职场文书
丧事主持词
2015/07/02 职场文书