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代码使其加快作用域内的查找
Mar 30 Python
利用python爬取软考试题之ip自动代理
Mar 28 Python
Python 加密的实例详解
Oct 09 Python
Python实现的读写json文件功能示例
Jun 05 Python
用python求一个数组的和与平均值的实现方法
Jun 29 Python
使用PyTorch训练一个图像分类器实例
Jan 08 Python
Python 实现平台类游戏添加跳跃功能
Mar 27 Python
Python sublime安装及配置过程详解
Jun 29 Python
keras和tensorflow使用fit_generator 批次训练操作
Jul 03 Python
最新PyCharm 2020.2.3永久激活码(亲测有效)
Nov 26 Python
解决Tkinter中button按钮未按却主动执行command函数的问题
May 23 Python
Python 数据可视化工具 Pyecharts 安装及应用
Apr 20 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/01/02 PHP
PHP概率计算函数汇总
2015/09/13 PHP
WordPress开发中自定义菜单的相关PHP函数使用简介
2016/01/05 PHP
PHP中$GLOBALS['HTTP_RAW_POST_DATA']和$_POST的区别分析
2017/07/03 PHP
Laravel中七个非常有用但很少人知道的Carbon方法
2017/09/21 PHP
判断页面是关闭还是刷新的js代码
2007/01/28 Javascript
JQuery制作的放大效果的popup对话框(未添加任何jquery plugin)分享
2013/04/28 Javascript
利用ajaxfileupload插件实现文件上传无刷新的具体方法
2013/06/08 Javascript
jquery ajax,ashx,json的用法总结
2014/02/12 Javascript
在jquery boxy中添加百度地图坐标拾取注意流程
2014/04/03 Javascript
jQuery实现渐变弹出层和弹出菜单的方法
2015/02/20 Javascript
使用DeviceOne实现微信小程序功能
2016/12/29 Javascript
使用angularjs.foreach时return的问题解决
2018/09/30 Javascript
python中stdout输出不缓存的设置方法
2014/05/29 Python
python追加元素到列表的方法
2015/07/28 Python
Python中列表list以及list与数组array的相互转换实现方法
2017/09/22 Python
Python在不同目录下导入模块的实现方法
2017/10/27 Python
Python Numpy库datetime类型的处理详解
2019/07/13 Python
TensorFlow实现打印每一层的输出
2020/01/21 Python
Python AutoCAD 系统设置的实现方法
2020/04/01 Python
通过自学python能找到工作吗
2020/06/21 Python
通过Python实现Payload分离免杀过程详解
2020/07/13 Python
解决python 在for循环并且pop数组的时候会跳过某些元素的问题
2020/12/11 Python
Java里面StringBuilder和StringBuffer有什么区别
2016/06/06 面试题
Ajax主要包含了哪些技术
2014/06/12 面试题
教师开学感言
2014/02/14 职场文书
政府绩效管理实施方案
2014/05/04 职场文书
优秀少先队辅导员先进事迹材料
2014/05/18 职场文书
优秀本科毕业生自荐信
2014/07/04 职场文书
无房证明范本
2014/09/17 职场文书
单位委托函范文
2015/01/29 职场文书
遗失证明范文
2015/06/19 职场文书
Vue实现动态查询规则生成组件
2021/05/27 Vue.js
详细聊聊关于Mysql联合查询的那些事儿
2021/10/24 MySQL
24年收藏2000多部退役军用电台
2022/02/18 无线电
Linux下搭建SFTP服务器的命令详解
2022/06/25 Servers