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发送邮件实例讲解(python发邮件附件可以使用email模块实现)
Dec 03 Python
Python中类型关系和继承关系实例详解
May 25 Python
python 异常处理总结
Oct 18 Python
python使用Tkinter实现在线音乐播放器
Jan 30 Python
Python实现找出数组中第2大数字的方法示例
Mar 26 Python
python实现数据分析与建模
Jul 11 Python
python输出数组中指定元素的所有索引示例
Dec 06 Python
Python JSON编解码方式原理详解
Jan 20 Python
Python模块 _winreg操作注册表
Feb 05 Python
Python Django view 两种return的实现方式
Mar 16 Python
基于Python中random.sample()的替代方案
May 23 Python
通过实例解析python subprocess模块原理及用法
Oct 10 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实现货币换算的方法
2014/11/29 PHP
浅谈thinkphp的实例化模型
2015/01/04 PHP
PHP处理二进制数据的实现方法
2016/06/13 PHP
jquery异步调用页面后台方法‏(asp.net)
2011/03/01 Javascript
Javascript实现简单的富文本编辑器附演示
2014/06/16 Javascript
angularjs表格分页功能详解
2016/01/21 Javascript
Bootstrap入门书籍之(五)导航条、分页导航
2016/02/17 Javascript
AngularJS封装指令方法详解
2016/12/12 Javascript
JS实现图片预览的两种方式
2017/06/27 Javascript
使用ef6创建oracle数据库的实体模型遇到的问题及解决方案
2017/11/09 Javascript
js删除数组中的元素delete和splice的区别详解
2018/02/03 Javascript
jQuery实现菜单的显示和隐藏功能示例
2018/07/24 jQuery
微信小程序视图容器(swiper)组件创建轮播图
2020/06/19 Javascript
vue实现弹框遮罩点击其他区域弹框关闭及v-if与v-show的区别介绍
2018/09/29 Javascript
jQuery轮播图功能制作方法详解
2019/12/03 jQuery
node.js中对Event Loop事件循环的理解与应用实例分析
2020/02/14 Javascript
vue 通过 Prop 向子组件传递数据的实现方法
2020/10/30 Javascript
python中requests库session对象的妙用详解
2017/10/30 Python
Python文件操作基本流程代码实例
2017/12/11 Python
python八皇后问题的解决方法
2018/09/27 Python
详解python项目实战:模拟登陆CSDN
2019/04/04 Python
python tkinter控件布局项目实例
2019/11/04 Python
python+selenium+chromedriver实现爬虫示例代码
2020/04/10 Python
python交互模式基础知识点学习
2020/06/18 Python
Python3+RIDE+RobotFramework自动化测试框架搭建过程详解
2020/09/23 Python
css3让div随鼠标移动而抖动起来
2014/02/10 HTML / CSS
html5 input元素新特性_动力节点Java学院整理
2017/07/06 HTML / CSS
中科前程Java笔试题
2016/11/20 面试题
就业自我评价
2014/02/04 职场文书
学生自我评语大全
2014/04/18 职场文书
2014年母亲节寄语
2014/05/07 职场文书
群众路线教育实践活动个人对照检查材料
2014/09/22 职场文书
个人四风问题整改措施思想汇报
2014/10/04 职场文书
大学社团活动总结怎么写
2019/06/21 职场文书
《中华上下五千年》读后感3篇
2019/11/29 职场文书
直播实况, OMG破敌三路五十分钟大战神技局摩托车
2022/04/01 DOTA