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实现抓取页面上链接的简单爬虫分享
Jan 21 Python
Python实现获取网站PR及百度权重
Jan 21 Python
在Python3中使用asyncio库进行快速数据抓取的教程
Apr 02 Python
Python3使用requests登录人人影视网站的方法
May 11 Python
Python爬虫信息输入及页面的切换方法
May 11 Python
Flask入门之上传文件到服务器的方法示例
Jul 18 Python
opencv python统计及绘制直方图的方法
Jan 21 Python
Python之lambda匿名函数及map和filter的用法
Mar 05 Python
用Python识别人脸,人种等各种信息
Jul 15 Python
python 实现方阵的对角线遍历示例
Nov 29 Python
django 连接数据库出现1045错误的解决方式
May 14 Python
利用python如何实现猫捉老鼠小游戏
Dec 04 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中mysql操作buffer用法详解
2015/03/19 PHP
浅谈PHP中JSON数据操作
2015/07/01 PHP
php array_keys 返回数组的键名
2016/10/25 PHP
document.documentElement && document.documentElement.scrollTop
2007/12/01 Javascript
JavaScript入门教程(3) js面向对象
2009/01/31 Javascript
『jQuery』名称冲突使用noConflict方法解决
2013/04/22 Javascript
JQuery DataTable删除行后的页面更新利用Ajax解决
2013/05/17 Javascript
原生JS实现加入收藏夹的代码
2013/10/24 Javascript
JS版的date函数(和PHP的date函数一样)
2014/05/12 Javascript
JS+CSS实现模仿浏览器网页字符查找功能的方法
2015/02/26 Javascript
JavaScript动态插入CSS的方法
2015/12/10 Javascript
AngularJs页面筛选标签小功能
2016/08/01 Javascript
移动端web滚动分页的实现方法
2017/05/05 Javascript
详解vue移动端项目的适配(以mint-ui为例)
2018/08/17 Javascript
React 实现拖拽功能的示例代码
2019/01/06 Javascript
Vue data的数据响应式到底是如何实现的
2020/02/11 Javascript
JavaScript对象字面量和构造函数原理与用法详解
2020/04/18 Javascript
Python解析网页源代码中的115网盘链接实例
2014/09/30 Python
使用Python简单的实现树莓派的WEB控制
2016/02/18 Python
解决Python中字符串和数字拼接报错的方法
2016/10/23 Python
基于python的字节编译详解
2017/09/20 Python
Python使用OpenCV进行标定
2018/05/08 Python
python flask框架实现传数据到js的方法分析
2019/06/11 Python
python中的decimal类型转换实例详解
2019/06/26 Python
Python 如何优雅的将数字转化为时间格式的方法
2019/09/26 Python
python计算导数并绘图的实例
2020/02/29 Python
用Python 爬取猫眼电影数据分析《无名之辈》
2020/07/24 Python
英国人最爱的饰品网站:Accessorize
2016/08/22 全球购物
意大利拉斐尔时尚购物网:Raffaello Network(支持中文)
2018/11/09 全球购物
护理学专业推荐信
2013/12/03 职场文书
护士毕业自我鉴定
2014/02/07 职场文书
《特殊的葬礼》教学反思
2014/04/27 职场文书
个人综合鉴定材料
2014/05/23 职场文书
食堂标语大全
2014/06/11 职场文书
高中国旗下的演讲稿
2014/08/28 职场文书
Oracle创建只读账号的详细步骤
2021/06/07 Oracle