python檢查目錄文件權(quán)限并修改目錄文件權(quán)限的操作
我就廢話不多說了,還是直接看代碼吧!
# -*- 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中獲取某個用戶對某個文件或目錄的訪問權(quán)限
在Python中我們通??梢允褂胦s.access()函數(shù)來獲取當前用戶對某個文件或目錄是否有某種權(quán)限,但是要獲取某個用戶對某個文件或目錄是否有某種權(quán)限python中沒有很好的方法直接獲取,因此我寫了個函數(shù)使用stat和pwd模塊來實現(xiàn)這一功能。
#!/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檢查目錄文件權(quán)限并修改目錄文件權(quán)限的操作就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
手把手教你pycharm專業(yè)版安裝破解教程(linux版)
這篇文章主要介紹了 手把手教你pycharm專業(yè)版安裝破解教程(linux版),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-09-09
Python實現(xiàn)多線程抓取網(wǎng)頁功能實例詳解
這篇文章主要介紹了Python實現(xiàn)多線程抓取網(wǎng)頁功能,結(jié)合具體實例形式詳細分析了Python多線程編程的相關(guān)操作技巧與注意事項,并附帶demo實例給出了多線程抓取網(wǎng)頁的實現(xiàn)方法,需要的朋友可以參考下2017-06-06
Python實現(xiàn)求兩個數(shù)組交集的方法示例
這篇文章主要介紹了Python實現(xiàn)求兩個數(shù)組交集的方法,涉及Python數(shù)組遍歷、排序、判斷、追加等相關(guān)操作技巧,需要的朋友可以參考下2019-02-02
python try...finally...的實現(xiàn)方法
這篇文章主要介紹了python try...finally...的實現(xiàn)方法,幫助大家更好的理解和使用python,感興趣的朋友可以了解下2020-11-11
用Python編寫腳本使IE實現(xiàn)代理上網(wǎng)的教程
這篇文章主要介紹了用Python編寫腳本使IE實現(xiàn)代理上網(wǎng)的教程,“著名的”goagent代理也是基于同樣原理實現(xiàn),需要的朋友可以參考下2015-04-04
Python爬蟲之Selenium鼠標事件的實現(xiàn)
這篇文章主要介紹了Python爬蟲之Selenium鼠標事件的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-12-12
python實現(xiàn)sublime3的less編譯插件示例
這篇文章主要介紹了python實現(xiàn)sublime3的less編譯插件示例的相關(guān)資料2014-04-04

