本来是查 nginx 提示 permission denied 的问题,一不小心差点闯祸,Root 使用还是要小心啊。
1. 从 Permission denied 开始说起
- 今天要把前端页面部署到 nginx,本身特简单一个事情,页面扔服务器,修改 nginx 配置添加一个 server 更新配置完事。
- 结果出了幺蛾子,访问页面提示 403 Forbidden ,查日志一看 Permission denied 。
- 哎,我用的 Root 启动的 nginx 啊,权限问题?
- ps -ef | grep nginx 查看了主进程是 root 后面的 worker(干活的进程) 都是 nobody。
- 百度了下也都说用户改一下就行了,或者就是权限修改下,思考了一下还是改权限吧,打开的这个链接刚好有命令,复制粘贴吧。
- chmod 755 / home/www/ 没细看,直接粘贴过去修改了一下 chmod 755 / home/dist/
- 对,就是这个空格,执行了之后提示了几个 Permission denied ,心里就有点犯嘀咕,什么情况?直觉告诉我不对劲。
- 仔细翻了翻记录,心里咯噔一下,出事了,有个空格。
- 保留作案现场,百度下这个 755 有什么后果,查到了好多 777 ,心想 755 可能问题不大吧。
- 这个连接是不敢关了,再打开一个连接试试,完蛋,打不开了,肯定有问题,看看咋补救吧。
2. 备份权限信息并还原
百度了几篇基本上俩方案,虽然是测试服务器,问题不大,第一条也是直接 pass 。
- 重装系统。
- 找一台机器备份权限,这边还原。
连上另外一台服务器,备份权限。
# 备份根目录及其子目录 getfacl -R / > /tmp/acl.bak # 备份 /bin 目录 getfacl -R /bin > /tmp/acl.bak然后出问题的服务器 xshell、xftp 连接都还在,问题不大。主要是 xshell 的 ssh 连接还在,要不真的要折腾死我了。
# 上传到服务器之后,进行还原 setfacl --restore acl.bak因为两个服务器还是有点差异的,备份的目录权限跟实际的目录权限还是有区别的,所以比较好补救。
服务器上有好几个服务,其中受到影响的除了系统(权限也已经还原),还剩下 oracle,百度了一下,找到了解决方案。
# $ORACLE_HOME可以直接使用,最好还是换成实际的目录把,下面第三节讲危害 chmod 6751 $ORACLE_HOME/bin/oracle这次修复基本上就结束了,花了十来分钟,有惊无险,以后执行可能会导致危险的操作应该会给自己多一点的提醒。
3. 总结下可能有危险的操作
3.1 这里的代码千万不要复制粘贴
# 这里问题出在 / 目录后面还有一个空格,导致后面被截断
chmod 755 / home/dist
chmod 777 / home/dist
rm -rf / home/dist
# 这里问题更容易遇见,在某个环境变量为空的情况下,下面的 $ORACLE_HOME 等于没有
chmod 755 $ORACLE_HOME/
chmod 777 $ORACLE_HOME/
rm -rf $ORACLE_HOME/
3.2 如何防止此类事件出现
3.2.1 chmod 类
- 提前备份好目录权限,以备不时之需。
getfacl -R / > /home/acl.bak
3.2.2 rm 类
- 给 rm 加上一个回收站吧,也有个后悔药吃。
- 将下面代码添加到 ~/.bashrc 文件末尾后,执行 source ~/.bashrc 即可。
- rm 移动文件到 ~/.trash
- lstrash 查看回收站的文件
- untrash 还原回收站里面的文件
- cltrash 清空回收站
- 当回收站文件与要删除文件同名,会提示覆盖,如果类型不一样,一个是文件,另一个是文件夹,会删除失败。
# add trash for safe rm
mkdir -p ~/.trash
alias rm=trash
#alias r=trash
alias lstrash='ls ~/.trash'
alias untrash=undeltrash
alias cltrash=cleartrash
trash()
{
mv $@ ~/.trash/
}
undeltrash()
{
mv -i ~/.trash/$@ ./
}
cleartrash()
{
read -p "clear all? [y/n] : " confirm
[ $confirm == 'y' ] || [ $confirm == 'Y' ] && /bin/rm -rf ~/.trash/*
}
文档信息
- 本文作者:臭粑粑大朱
- 本文链接:https://www.hkyzf.top/2021/08/25/linux-chmod-restore/
- 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)
