批量修改www目录下的所有文件和目录权限,看是否满足下面安全需求

310 阅读1分钟

批量修改www目录下的所有文件和目录权限,看是否满足下面安全需求

1)所有文件权限为644

2)所有目录权限为755

3)文件和目录所有者为www,所属组为root

如果不满足,改成符合要求

脚本思路

先进入到/www/目录下面
使用for循环,find 命令遍历文件和目录
stat -c %a 用来查看文件和目录的权限
stat -c %U 用来查看文件和目录的所有者
stat -c %G 用来查看文件和目录的所属组
使用if 判断 [ -d $f ] 用来判断是否是目录,
如果目录不符合 755权限,使用chmod 改成755 [ $f_p != '755' ] && chmod 755 $f
剩下的文件不符合644权限,使用chmod 改成644 [ $f_p != '644' ] && chmod 644 $f
文件或者目录所有者不是www,使用chown改成 www所有者
[ $f_u != 'www' ] && chown www $f
文件或者目录所属组不是root,使用chown改成root所属组
[ $f_g != 'root' ] && chown :root $f
#!/bin/bash
cd /www/
for f in `find .`
do
    f_p=`stat -c %a $f`
    f_u=`stat -c %U $f`
    f_g=`stat -c %G $f`
if
    [ -d $f ]
then
    [ $f_p != '755' ] && chmod 755 $f
else
    [ $f_p != '644' ] && chmod 644 $f
fi
    [ $f_u != 'www' ] && chown www $f
    [ $f_g != 'root' ] && chown :root $f
done

 

第二种方法使用

  • 使用find命令查找
  • -type d 指定文件类型为目录
  • ! -type d 指定文件类型不是目录的,当然你也可以使用 -type f 指定文件
  • ! -perm 755 匹配权限不是755的
  • -exec chmod 755 {} ; 使用-exec 选项执行chmod的命令,{}表示命令的参数即为找到的文件,结合起来就是把符合条件的所有文件执行chmod 755的命令
  • ! -user www 所属用户不是www
  • ! -group 所属组不是root
#!/bin/bash 
find /www/ -type d ! -perm 755 -exec chmod 755 {} \;
find /www/ ! -type d ! -perm 644 -exec chmod 644 {} \;
find /www/ ! -user www -exec chown www {} \;
find /wwww/ ! -group root -exec chown :root {} \;

总结:两个脚本第一个主需要find-次,而第二个需要find四次,如果文件体量很大,会很影响工作效率。