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实现简单的TCP代理服务器
Oct 08 Python
Django Admin实现上传图片校验功能
Mar 06 Python
浅谈python import引入不同路径下的模块
Jul 11 Python
python奇偶行分开存储实现代码
Mar 19 Python
好的Python培训机构应该具备哪些条件
May 23 Python
Python实现快速傅里叶变换的方法(FFT)
Jul 21 Python
python实现三次样条插值
Dec 17 Python
python实现一次性封装多条sql语句(begin end)
Jun 06 Python
Python matplotlib图例放在外侧保存时显示不完整问题解决
Jul 28 Python
通俗易懂了解Python装饰器原理
Sep 17 Python
深入理解Python变量的数据类型和存储
Feb 01 Python
Python查找算法的实现 (线性、二分,分块、插值查找算法)
Apr 24 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获得文件扩展名三法
2006/11/25 PHP
台湾中原大学php教程孙仲岳主讲
2008/01/07 PHP
php使用glob函数遍历文件和目录详解
2016/09/23 PHP
Ext 表单布局实例代码
2009/04/30 Javascript
javascript闭包的高级使用方法实例
2013/07/04 Javascript
JS创建自定义表格具体实现
2014/02/11 Javascript
Javascript学习笔记之函数篇(五) : 构造函数
2014/11/23 Javascript
适用于javascript开发者的Processing.js入门教程
2016/02/24 Javascript
JS/jquery实现一个网页内同时调用多个倒计时的方法
2017/04/27 jQuery
vue数据双向绑定的注意点
2017/06/23 Javascript
vue组件实现文字居中对齐的方法
2017/08/23 Javascript
JavaScript学习笔记之函数记忆
2017/09/06 Javascript
Vue2(三)实现子菜单展开收缩,带动画效果实现方法
2019/04/28 Javascript
微信小程序实现消息框弹出动画
2020/04/18 Javascript
微信小程序云函数使用mysql数据库过程详解
2019/08/07 Javascript
[01:11:28]DOTA2-DPC中国联赛定级赛 RNG vs Phoenix BO3第一场 1月8日
2021/03/11 DOTA
[05:23]DOTA2-DPC中国联赛2月1日Recap集锦
2021/03/11 DOTA
Python中关于使用模块的基础知识
2015/05/24 Python
python线程、进程和协程详解
2016/07/19 Python
python微信公众号之关注公众号自动回复
2018/10/25 Python
python实现视频分帧效果
2019/05/31 Python
PyQt5基本控件使用之消息弹出、用户输入、文件对话框的使用方法
2019/08/06 Python
Python 使用 PyMysql、DBUtils 创建连接池提升性能
2019/08/14 Python
Python实现直播推流效果
2019/11/26 Python
Python如何向SQLServer存储二进制图片
2020/06/08 Python
python实现xml转json文件的示例代码
2020/12/30 Python
五个2015 年最佳HTML5 框架
2015/11/11 HTML / CSS
马来西亚最好的婴儿商店:Motherhood
2017/09/14 全球购物
美国知名生活购物网站:Goop
2017/11/03 全球购物
意大利奢侈品综合电商网站:MODES
2019/12/14 全球购物
皇家阿尔伯特瓷器美国官网:Royal Albert美国
2020/02/16 全球购物
Envie de Fraise意大利:法国网上推出的孕妇装品牌
2020/10/18 全球购物
Kingsoft金山公司C/C++笔试题
2016/05/10 面试题
毕业生找工作推荐信
2013/11/21 职场文书
销售2014年度工作总结
2014/12/08 职场文书
vue项目如何打包之项目打包优化(让打包的js文件变小)
2022/04/30 Vue.js