3个问题检验你的Linux 运维水平

楼赛第1期比赛题目解析

前言:

楼赛是实验楼推出的常规周赛,每周会选取一个主题,每个主题下会根据实际开发中面临的问题来给出题目,让参赛者来解决问题,从而达到能够实际动手解决问题的能力,也可以验证自己的开发水平。

第1 期楼赛的主题是 Linux,涉及 Linux 用户管理、sudo 权限设置、MySQL 及 nginx 排错等知识点。题目难度不大,有过 Linux 运维经验的都可以快速完成。

虽然第一期的楼赛已经结束了,但是依旧有非常多的小伙伴询问标准答案,因此制作了题目解析文档,希望对大家有所帮助。答案并不一定是最优的方案,欢迎大家贴出更优的解决方案。

题目1:为新同事创建系统账户

你所面临的问题:

实验楼研发团队有一台独立的测试服务器,每位同事都在上面拥有一个账号,用来日常开发测试。今天有一位叫楼赛的同事入职,需要你帮他创建新账号。

创建的新账号要求如下:

  • 用户名:lousai
  • Home 目录:/home/lousai
  • 允许 lousai 使用 SSH 登陆系统
  • lousai 用户默认使用 zsh
  • lousai 用户需要 sudo 权限

解析:

其中1,2,4 三个要求只需要一个 adduser 命令就可以完成:

sudo adduser --home /home/lousai --shell /usr/bin/zsh lousai

由于实验楼环境的配置,新创建的用户只要有密码,默认是允许通过 SSH 登录的,所以需求 3 不需要做任何事情。

最后需求 5 需要 sudo 权限,可以直接将新用户加入到 sudo 组:

sudo usermod -aG sudo lousai

至此,五个需求都已经完成,提交结果让实验楼的系统帮你测试下吧。

题目2:数据库无法启动

你所面临的问题:

新同事小楼在本地搭建的开发环境使用 MySQL 数据库,因为一些误操作无法启动,并且忘记了 MySQL 的 root 密码。

请帮她在右边的实验环境(指实验楼的在线开发环境,可以点击这里进行进入环境查看)中启动 MySQL 并重设 MySQL 的 root 密码,让她可以登录进去恢复数据。

恢复后的数据库要求如下:

  • mysql 服务处于运行状态
  • mysql 的 root 密码重新设置为 shiyanlou

解析:

在这道题目中有三个坑:

  1. MySQL 服务无法启动 – bind address 配置错误
  2. MySQL 服务无法启动 – /var/run/mysqld 权限配置错误
  3. MySQL root 密码忘记

前两个坑都可以在尝试 sudo service mysql start 命令后查看 /var/log/mysql/error.log 报错日志发现。

坑1相关的报错日志:

《3个问题检验你的Linux 运维水平》 图片描述

修复的方法是把 /etc/mysql/my.cnf 配置文件中的 bind-address 改为 127.0.0.1 监听到本地就可以了。

坑2相关的报错日志:

《3个问题检验你的Linux 运维水平》 图片描述

Permission denied 的错误显示出来我们就需要去看下是哪个目录是没有权限,第二句日志中表示无法创建 /var/run/mysqld/mysqld.sock,去查看 /var/run/msyqld 发现默认的所有者是 shiyanlou 用户,这就是问题所在了。修复方法:

sudo chown mysql:msyql /var/run/mysqld

最后坑3则是很常规的重制 MySQL 密码了:

# 停止 mysql 服务
sudo service mysql stop

# 使用 mysql_safe 方式启动 mysql 服务
sudo mysqld_safe --skip-grant-tables&

然后使用 mysql 命令直接登录无需密码验证:

mysql -uroot mysql

登陆 mysql 后可以重新设置 root 的密码:

> UPDATE user SET password=PASSWORD("shiyanlou") WHERE user='root';
> FLUSH PRIVILEGES;

退出后使用 sudo service mysql restart 重新启动 mysql 服务,遍可以提交结果获得美丽的 PASS 标志了。

《3个问题检验你的Linux 运维水平》 图片描述

题目3:让实验楼网站恢复访问

你所面临的问题:

小楼这次闯下大祸,不小心把线上的实验楼网站搞挂了。实验楼的网站使用的是 nginx 服务,目前无法启动。

右边(指实验楼的在线开发环境,可以点击这里进行进入环境查看)给你的是实验楼的服务器,请尝试在最短的时间内让实验楼恢复访问。你所节省的每一分钟,都能挽留上百名实验楼的用户。

注意:实验楼网站页面目录为 /home/shiyanlou/page

目标

恢复访问的要求如下:

  • nginx 服务处于运行状态
  • 在实验环境中使用 Firefox 浏览器访问本地 http://localhost
  • 可以进入实验楼的主页,如下图:

《3个问题检验你的Linux 运维水平》 此处输入图片的描述

解析:

这道题目中也包含三个坑:

  1. nginx 的配置文件格式错误
  2. nginx 默认端口号被占用
  3. nginx 配置中的站点目录错误

首先尝试启动 nginx 会发现报错,查看日志:

《3个问题检验你的Linux 运维水平》 图片描述

日志里就一句话,告诉了我们真相,在 /etc/nginx/sites-enabled/default 第36 行中有语法错误。修改这个文件在下面这行后面加上缺失的分号:

try_files $uri $uri/ =404;

坑1可以通过 nginx -t 检查配置文件语法的方式发现。

坑2可以在日志中发现原因:

《3个问题检验你的Linux 运维水平》 图片描述

当前 80 端口通过访问发现是 apache,把 apache 停止就可以了:

sudo service apache2 stop

最后一个坑题目中已经给出提示:实验楼网站页面目录为 /home/shiyanlou/page

而配置文件中写的是 /home/shiyanlou/,更新文件中的这一行:

《3个问题检验你的Linux 运维水平》 图片描述

完成后重启 nginx:

sudo service nginx restart

再次打开浏览器访问 http://localhost 就能够看到我们实验楼熟悉的主页了。

《3个问题检验你的Linux 运维水平》 图片描述

后记

实验楼的比赛模块还在试运营中,我们期待能创建一个真实体现参与者水平的竞赛模式。不同于侧重算法的 OJ、ACM一类的,楼赛考验的是动手能力,分析和解决问题的能力。这些正是实验楼的动手实践学IT理念所推崇的。

第2期楼赛主题:数据库,一共4个问题,你可以看看你是否能够解决这些问题:

《3个问题检验你的Linux 运维水平》 Paste_Image.png

    原文作者:实验楼
    原文地址: https://www.jianshu.com/p/7fe4442fbc54
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞