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 相关文章推荐
基于asyncio 异步协程框架实现收集B站直播弹幕
Sep 11 Python
详解Python 2.6 升级至 Python 2.7 的实践心得
Apr 27 Python
浅析python协程相关概念
Jan 20 Python
Django中如何防范CSRF跨站点请求伪造攻击的实现
Apr 28 Python
Python实现堡垒机模式下远程命令执行操作示例
May 09 Python
python聚类算法解决方案(rest接口/mpp数据库/json数据/下载图片及数据)
Aug 28 Python
python查看数据类型的方法
Oct 12 Python
利用django model save方法对未更改的字段依然进行了保存
Mar 28 Python
快速解决Django关闭Debug模式无法加载media图片与static静态文件
Apr 07 Python
python + selenium 刷B站播放量的实例代码
Jun 12 Python
python 带时区的日期格式化操作
Oct 23 Python
Python基础之常用库常用方法整理
Apr 30 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中的观察者模式
2010/03/24 PHP
php中对2个数组相加的函数
2011/06/24 PHP
在windows服务器开启php的gd库phpinfo中未发现
2013/01/13 PHP
ECSHOP在PHP5.5及高版本上报错的解决方法
2015/08/31 PHP
php数组函数array_key_exists()小结
2015/12/10 PHP
PHP 中TP5 Request 请求对象的实例详解
2017/07/31 PHP
PHP实现基于回溯法求解迷宫问题的方法详解
2017/08/17 PHP
PHP+MySQL高并发加锁事务处理问题解决方法
2018/04/30 PHP
JS延迟加载(setTimeout) JS最后加载
2010/07/15 Javascript
javascript textarea光标定位方法(兼容IE和FF)
2011/03/12 Javascript
Google官方支持的NodeJS访问API,提供后台登录授权
2014/07/29 NodeJs
jquery实现无限分级横向导航菜单的方法
2015/03/12 Javascript
javascript实现模拟时钟的方法
2015/05/13 Javascript
JS实现自动变化的导航菜单效果代码
2015/09/09 Javascript
jquery实现定时自动轮播特效
2015/12/10 Javascript
JQuery导航菜单选择特效
2016/04/11 Javascript
JavaScript的String字符串对象常用操作总结
2016/05/26 Javascript
微信小程序wx.getImageInfo()如何获取图片信息
2018/01/26 Javascript
使用Webpack 搭建 Vue3 开发环境过程详解
2020/07/28 Javascript
vue cli3.0打包上线静态资源找不到路径的解决操作
2020/08/03 Javascript
[08:29]DOTA2每周TOP10 精彩击杀集锦vol.7
2014/06/25 DOTA
[02:50]【扭转乾坤,只此一招】DOTA2全新版本永雾林渊开启新篇章
2020/12/24 DOTA
CentOS中升级Python版本的方法详解
2017/07/10 Python
Python之批量创建文件的实例讲解
2018/05/10 Python
pyQt4实现俄罗斯方块游戏
2018/06/26 Python
numpy concatenate数组拼接方法示例介绍
2019/05/27 Python
python统计文章中单词出现次数实例
2020/02/27 Python
python pyg2plot的原理知识点总结
2021/02/28 Python
CSS3动画和HTML5新特性详解
2020/08/31 HTML / CSS
PHP开发的一般流程
2013/08/13 面试题
好邻里事迹材料
2014/01/16 职场文书
小班上学期评语
2014/05/05 职场文书
教师岗位职责范本
2015/04/02 职场文书
培训通知书模板
2015/04/17 职场文书
IDEA中sout快捷键无效问题的解决方法
2022/07/23 Java/Android
LyScript实现绕过反调试保护的示例详解
2022/08/14 Python