1、脚本要求
- 检查/data/wwwroot/app 目录下所有的文件和目录,看是否满足下面条件
- 所有文件的权限是644
- 所有目录的权限是755
- 文件和目录所有者为www ,所属组是root
- 如果不满足,改成符合要求的
2、脚本编写
#!/bin/bash
cd /data/wwwroot/app
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
3、脚本解释
#!/bin/bash
# 声明脚本使用bash解释器执行
# 切换到目标应用目录,后续操作将在该目录下进行
cd /data/wwwroot/app
# 遍历当前目录(/data/wwwroot/app)及其所有子目录中的文件和目录
# find . 用于查找当前目录下的所有项目(包括文件、子目录、递归子目录内容)
for f in `find .`
do
# 获取当前文件/目录的权限(数字形式,如755、644)
f_p=`stat -c %a $f`
# 获取当前文件/目录的所有者用户名
f_u=`stat -c %U $f`
# 获取当前文件/目录的所属组名
f_g=`stat -c %G $f`
# 判断当前项目是否为目录(-d 是目录判断条件)
if [ -d $f ]
then
# 若为目录且当前权限不是755,则将权限修改为755
# 755权限:所有者可读可写可执行(rwx),组用户和其他用户可读可执行(r-x)
[ $f_p != '755' ] && chmod 755 $f
else
# 若为文件且当前权限不是644,则将权限修改为644
# 644权限:所有者可读可写(rw-),组用户和其他用户仅可读(r--)
[ $f_p != '644' ] && chmod 644 $f
fi
# 若当前所有者不是www用户,则将所有者修改为www
# 通常Web服务进程以www用户运行,确保服务对文件有正确访问权限
[ $f_u != 'www' ] && chown www $f
# 若当前所属组不是root组,则将所属组修改为root
# 保留root组归属,便于系统管理员管控
[ $f_g != 'root' ] && chown :root $f
done
# 脚本功能总结:统一设置/data/wwwroot/app目录下所有文件和目录的权限、所有者和所属组
# 标准化权限配置,避免因权限混乱导致的Web服务访问错误或安全风险
4、脚本核心
- 查看文件权限:
stat -c %a
- 查看文件所属组:
stat -c %G
- 查看文件所有者:
stat -c %U
- && 可以实现:当前面命令执行成功再执行后面的命令
- || 可以实现:当前面命令不成功再执行后面的命令