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 Deque 模块使用详解
Jul 04 Python
Python发送form-data请求及拼接form-data内容的方法
Mar 05 Python
Python之pandas读写文件乱码的解决方法
Apr 20 Python
python得到qq句柄,并显示在前台的方法
Oct 14 Python
Django处理多用户类型的方法介绍
May 18 Python
python 自定义装饰器实例详解
Jul 20 Python
关于Django Models CharField 参数说明
Mar 31 Python
django实现模板中的字符串文字和自动转义
Mar 31 Python
pandas DataFrame运算的实现
Jun 14 Python
python的launcher用法知识点总结
Aug 07 Python
Django中使用Celery的方法步骤
Dec 07 Python
Python基础之元组与文件知识总结
May 19 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
漫威DC御用漫画家去世 他的表情包曾走红网络
2020/04/09 欧美动漫
phpexcel导入excel数据使用方法实例
2013/12/24 PHP
thinkphp缓存技术详解
2014/12/09 PHP
Zend Framework框架Smarty扩展实现方法
2016/03/22 PHP
php连接mysql之mysql_connect()与mysqli_connect()的区别
2020/07/19 PHP
phpStudy vscode 搭建debug调试的教程详解
2020/07/28 PHP
jQuery的运行机制和设计理念分析
2011/04/05 Javascript
JS等比例缩小图片尺寸的实例
2013/02/27 Javascript
jquery实现excel导出的方法
2013/04/04 Javascript
jquery实现div阴影效果示例代码
2013/09/16 Javascript
使用CSS样式position:fixed水平滚动的方法
2014/02/19 Javascript
css+js实现部分区域高亮可编辑遮罩层
2014/03/04 Javascript
three.js绘制地球、飞机与轨迹的效果示例
2017/02/28 Javascript
详解升级react-router 4 踩坑指南
2017/08/14 Javascript
JS前端知识点 运算符优先级,URL编码与解码,String,Math,arguments操作整理总结
2019/06/27 Javascript
jQuery中DOM常见操作实例小结
2019/08/01 jQuery
基于JavaScript实现留言板功能
2020/03/16 Javascript
Python动态加载模块的3种方法
2014/11/22 Python
使用sklearn之LabelEncoder将Label标准化的方法
2018/07/11 Python
机器学习实战之knn算法pandas
2019/06/22 Python
Django基础三之视图函数的使用方法
2019/07/18 Python
Django Aggregation聚合使用方法解析
2019/08/01 Python
pycharm快捷键汇总
2020/02/14 Python
canvas版人体时钟的实现示例
2021/01/29 HTML / CSS
找到您丢失的钥匙、钱包和手机:Tile
2017/05/19 全球购物
意大利大型购物中心:Oliviero.it
2017/10/19 全球购物
美国领先的在线旅游网站:Orbitz
2018/11/05 全球购物
blueseventy官网:铁人三项和比赛泳衣
2021/02/06 全球购物
网络程序员自荐信
2014/01/25 职场文书
剪枝的学问教学反思
2014/02/07 职场文书
大学生通用个人的自我评价
2014/02/10 职场文书
财务总监岗位职责
2014/03/07 职场文书
乡镇安全生产月活动总结
2015/05/08 职场文书
评奖评优个人先进事迹材料
2015/11/04 职场文书
Python 如何将integer转化为罗马数(3999以内)
2021/06/05 Python
OpenCV-Python实现油画效果的实例
2021/06/08 Python