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 相关文章推荐
Python3读取UTF-8文件及统计文件行数的方法
May 22 Python
Python学习之用pygal画世界地图实例
Dec 07 Python
pyqt5 从本地选择图片 并显示在label上的实例
Jun 13 Python
python与C、C++混编的四种方式(小结)
Jul 15 Python
python re模块匹配贪婪和非贪婪模式详解
Feb 11 Python
python实现密码验证合格程序的思路详解
Jun 01 Python
使用Tensorflow-GPU禁用GPU设置(CPU与GPU速度对比)
Jun 30 Python
Python调用C语言程序方法解析
Jul 07 Python
python使用matplotlib:subplot绘制多个子图的示例
Sep 24 Python
python 如何设置守护进程
Oct 29 Python
详解Python中如何将数据存储为json格式的文件
Nov 18 Python
python re模块常见用法例举
Mar 01 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云打印类完整示例
2016/10/15 PHP
php7 参数、整形及字符串处理机制修改实例分析
2020/05/25 PHP
面向对象的Javascript之二(接口实现介绍)
2012/01/27 Javascript
jquery 定位input元素的几种方法小结
2013/07/28 Javascript
JavaScript设计模式之工厂模式和构造器模式
2015/02/11 Javascript
JavaScript获取页面中超链接数量的方法
2015/11/09 Javascript
全面解析Bootstrap表单使用方法(表单样式)
2015/11/24 Javascript
js实现图片上传并正常显示
2015/12/19 Javascript
jQuery侧边栏实现代码
2016/05/06 Javascript
Javascript中apply、call、bind的巧妙使用
2016/08/18 Javascript
js中用cssText设置css样式的简单方法
2016/09/19 Javascript
jQuery中$.ajax()方法参数解析
2016/10/22 Javascript
NodeJS配置HTTPS服务实例分享
2017/02/19 NodeJs
详解create-react-app 2.0版本如何启用装饰器语法
2018/10/23 Javascript
如何在JavaScript中优雅的提取循环内数据详解
2019/03/04 Javascript
vue.config.js常用配置详解
2019/11/14 Javascript
解决elementUI 切换tab后 el_table 固定列下方多了一条线问题
2020/07/19 Javascript
全面了解python中的类,对象,方法,属性
2016/09/11 Python
Python实现读取机器硬件信息的方法示例
2018/06/09 Python
pandas 按照特定顺序输出的实现代码
2018/07/10 Python
python网络爬虫 Scrapy中selenium用法详解
2019/09/28 Python
python通过安装itchat包实现微信自动回复收到的春节祝福
2020/01/19 Python
用于ETL的Python数据转换工具详解
2020/07/21 Python
Python自动化测试中yaml文件读取操作
2020/08/20 Python
美国祛痘、抗衰老药妆品牌:Murad
2016/08/27 全球购物
Derek Rose官网:英国高档睡衣、家居服和内衣品牌
2020/01/18 全球购物
幼儿园春游活动方案
2014/01/19 职场文书
关于旅游的活动方案
2014/08/15 职场文书
民主生活会对照检查材料思想汇报
2014/09/27 职场文书
2014年学校食堂工作总结
2014/11/25 职场文书
《陶罐和铁罐》教学反思
2016/03/03 职场文书
七年级之家长会发言稿范文
2019/09/04 职场文书
python tkinter实现定时关机
2021/04/21 Python
详解JAVA中的OPTIONAL
2021/06/14 Java/Android
MySQL选择合适的备份策略和备份工具
2022/06/01 MySQL
关于Redis的主从复制及哨兵问题
2022/06/16 Redis