您的当前位置:首页正文

Qcould lab Linux 学习教程

来源:要发发知识网

1 Linux基础入门
2 搭建 FTP 文件服务
3 Nginx搭建静态网站

Linux 基础入门

目录操作

创建目录

使用 mkdir 命令创建目录

mkdir $HOME/testFolder

<checker type="output-contains" command="ls $HOME -la" hint="创建 testFolder 目录">
<keyword regex="testFolder" />
</checker>

切换目录

使用 cd 命令切换目录

cd $HOME/testFolder

使用 cd ../ 命令切换到上一级目录

cd ../

移动目录

使用 mv 命令移动目录

mv $HOME/testFolder /var/tmp

<checker type="output-contains" command="ls /var/tmp -la" hint="移动 testFolder 目录到 /var/tmp">
<keyword regex="testFolder" />
</checker>

删除目录

使用 rm -rf 命令删除目录

rm -rf /var/tmp/testFolder

<checker type="output-contains-no" command="ls /var/tmp" hint="目录 testFolder 未删除">
<keyword regex="testFolder" />
</checker>

查看目录下的文件

使用 ls 命令查看 [/etc][etc] 目录下所有文件和文件夹

ls /etc

<bubble for="etc">
/etc 目录默认是 *nix 系统的软件配置文件存放位置
</bubble>

文件操作

<time>5min ~ 10min</time>

创建文件

使用 touch 命令创建文件

touch ~/testFile

执行 ls 命令, 可以看到刚才新建的 testFile 文件

ls ~

<checker type="output-contains" command="ls $HOME -la" hint="创建 testFile 文件">
<keyword regex="testFile" />
</checker>

复制文件

使用 cp 命令复制文件

cp ~/testFile ~/testNewFile

<checker type="output-contains" command="ls $HOME -la" hint="复制 testFile 文件为 testNewFile">
<keyword regex="testNewFile" />
</checker>

删除文件

使用 rm 命令删除文件, 输入 y 后回车确认删除

rm ~/testFile

<checker type="output-contains-no" command="ls $HOME" hint="文件 testFile 未删除">
<keyword regex="testFile" />
</checker>

查看文件内容

使用 cat 命令查看 .bash_history 文件内容

cat ~/.bash_history

过滤, 管道与重定向

<time>5min ~ 10min</time>

过滤

过滤出 /etc/passwd 文件中包含 root 的记录

grep 'root' /etc/passwd

递归地过滤出 /var/log/ 目录中包含 linux 的记录

grep -r 'linux' /var/log/

管道

简单来说, Linux 中管道的作用是将上一个命令的输出作为下一个命令的输入, 像 pipe 一样将各个命令串联起来执行, 管道的操作符是 |

比如, 我们可以将 cat 和 grep 两个命令用管道组合在一起

cat /etc/passwd | grep 'root'

过滤出 /etc 目录中名字包含 ssh 的目录(不包括子目录)

ls /etc | grep 'ssh'

重定向

可以使用 > 或 < 将命令的输出重定向到一个文件中

echo 'Hello World' > ~/test.txt 

<checker type="output-contains" command="cat ~/test.txt" hint="将 Hello World 输出到 test.txt 文件中">
<keyword regex="Hello World" />
</checker>

运维常用命令

<time>5min ~ 10min</time>

ping 命令

ping -c 4 

netstat 命令

netstat 命令用于显示各种网络相关信息,如网络连接, 路由表, 接口状态等等

列出所有处于监听状态的tcp端口

netstat -lt

查看所有的端口信息, 包括 PID 和进程名称

netstat -tulpn

ps 命令

过滤得到当前系统中的 ssh 进程信息

ps -aux | grep 'ssh'

完成实验

恭喜!您已经成功完成了 Linux 入门运维的实验任务。

搭建 FTP 文件服务

安装并启动 FTP 服务

<time>5min ~ 10min</time>

安装 VSFTPD

使用 yum 安装 [vsftpd][]:

yum install vsftpd -y

<checker type="output-contains" command="ls /etc/vsftpd -la" hint="安装 vsftpd">
<keyword regex="vsftpd.conf" />
</checker>

启动 VSFTPD

安装完成后,启动 FTP 服务:

service vsftpd start

启动后,可以看到系统已经[监听了 21 端口][21]:

netstat -nltp | grep 21

此时,访问 [ftp://${runtime.vars.cvmIpAddress}][] 可浏览机器上的 [/var/ftp][ftp-home] 目录了。

<bubble for="21">
FTP 协议默认使用 21 端口作为服务端口
</bubble>

<locate for="ftp-home" path="/var/ftp" hint="默认 FTP 访问目录在此" />

<checker type="output-contains" command="netstat -nltp" hint="启动 vsftp 服务">
<keyword regex=":21" />
</checker>

配置 FTP 权限

<time>5min ~ 10min</time>

目前 FTP 服务登陆允许匿名登陆,也无法区分用户访问,我们需要配置 FTP 访问权限

了解 VSFTP 配置

vsftpd 的配置目录为 [/etc/vsftpd][0],包含下列的配置文件:

  • [vsftpd.conf][1] 为主要配置文件
  • [ftpusers][2] 配置禁止访问 FTP 服务器的用户列表
  • [user_list][3] 配置用户访问控制

阅读上述配置以了解更多信息。如果您准备好了,点击下一步开始修改配置来设置权限。

<locate for="0" path="/etc/vsftpd" hint="vsftp 配置目录" />

<locate for="1" path="/etc/vsftpd/vsftpd.conf" hint="vsftp 主要配置" />

<locate for="2" path="/etc/vsftpd/ftpusers" hint="vsftp 黑名单用户列表" />

<locate for="3" path="/etc/vsftpd/user_list" hint="vsftp 用户访问控制" />

阻止匿名访问和切换根目录

匿名访问和切换根目录都会给服务器带来[安全风险][safety],我们把这两个功能关闭。

[编辑 /etc/vsftpd/vsftpd.conf][edit],[找到下面两处配置][find]并修改:

# 禁用匿名用户
anonymous_enable=NO

# 禁止切换根目录
chroot_local_user=YES

编辑完成后,按 Ctrl + S 保存配置,重新启动 FTP 服务,如:

service vsftpd restart

<bubble for="safety">
匿名访问让所有人都可以上传文件到服务器上而无需鉴权,而允许切换根目录则可能产生越权访问问题。
</bubble>

<bubble for="find">
在代码编辑器中,用 Ctrl + F 进行搜索,Mac 用户用 Cmd + F 进行搜索
</bubble>

<locate for="1" path="/etc/vsftpd/vsftpd.conf" hint="编辑主配置文件" />

<edit for="edit" file="/etc/vsftpd/vsftpd.conf" />

<checker type="output-contains" command="cat /etc/vsftpd/vsftpd.conf" hint="修改配置以禁止匿名用户访问">
<keyword regex="^anonymous_enable=NO" />
</checker>

<checker type="output-contains" command="cat /etc/vsftpd/vsftpd.conf" hint="修改配置以禁止用户切换根目录">
<keyword regex="^chroot_local_user=YES" />
</checker>

<checker type="output-contains" command="curl ftp://${runtime.vars.cvmIpAddress} -v 2>&1" hint="重启 FTP 服务">
<keyword regex="530" />
</checker>

创建 FTP 用户

创建一个用户 ftpuser [:question][user]:

useradd ftpuser

为用户 ftpuser 设置密码 [:question][password]:

echo "${runtime.vars.allocatedPassword}" | passwd ftpuser --stdin

<bubble for="user">
为了方便后面的实验步骤,不建议使用其它的用户名
</bubble>

<bubble for="password">
下面命令中的密码为实验室为您生成,为了方便后面的实验步骤,不建议使用其他密码
</bubble>

<checker type="output-contains" command="cat /etc/passwd" hint="创建 FTP 用户(如果您使用其它用户,请直接下一步)">
<keyword regex="ftpuser:" />
</checker>

限制该用户仅能通过 FTP 访问

限制用户 ftpuser 只能通过 FTP 访问服务器,而不能直接登录服务器:

usermod -s /sbin/nologin ftpuser

<checker type="output-contains" command="cat /etc/passwd" hint="限制 FTP 用户登录方式">
<keyword regex="ftpuser:/sbin/nologin" />
</checker>

为用户分配主目录

为用户 ftpuser 创建[主目录][ftp-home]并约定:

/data/ftp 为主目录, 该目录不可上传文件

/data/ftp/pub 文件只能上传到该目录下

mkdir -p /data/ftp/pub

创建登录欢迎文件 [:question][welcome]:

echo "Welcome to use FTP service." > /data/ftp/welcome.txt

设置访问权限:

chmod a-w /data/ftp && chmod 777 -R /data/ftp/pub

设置为用户的主目录:

usermod -d /data/ftp ftpuser

<bubble for="ftp-home">
用户的主目录是用户通过 FTP 登录后看到的根目录
</bubble>

<bubble for="welcome">
方便用户登录后可以看到欢迎信息,并且确定用户确实登录到了主目录上。
</bubble>

<checker type="output-contains" command="ls -la /data" hint="创建目录 /data/ftp">
<keyword regex="ftp" />
</checker>

<checker type="output-contains" command="ls -ld /data/ftp" hint="设置 /data/ftp 访问权限为 a-w">
<keyword regex="dr-xr-xr-x" />
</checker>

<checker type="output-contains" command="ls -ld /data/ftp/pub" hint="设置 /data/ftp/pub 访问权限为 777">
<keyword regex="drwxrwxrwx" />
</checker>

<checker type="output-contains" command="cat /etc/passwd" hint="设置 /data/ftp 为用户 ftpuser 的主目录">
<keyword regex="ftpuser" />
<keyword regex="/data/ftp" />
</checker>

<checker type="output-contains" command="ls -la /data/ftp" hint="创建登录欢迎文件 welcome.txt">
<keyword regex="welcome" />
</checker>

准备域名和证书

<time>15min ~ 30min</time>

注:如果您不需要通过域名访问 FTP 服务器则可以直接点击“已完成,下一步”跳过域名和证书的准备环节

域名注册

如果您还没有域名,可以[在腾讯云上选购][buy_link],过程可以参考下面的视频。

  • [视频 - 在腾讯云上购买域名][buy_domain_video]

域名解析

域名购买完成后, 需要将域名解析到实验云主机上,实验云主机的 IP 为:

${runtime.vars.cvmIpAddress}
  • [视频 - 如何在腾讯云上解析域名][video_resolve_domain]

<video for="video_resolve_domain" platform="qq" vid="t0507ps9kxo" name="域名解析"></video>

域名设置解析后需要过一段时间才会生效,通过 ping 命令检查域名是否生效 [:question][replace],如:

ping 

如果 ping 命令返回的信息中含有你设置的解析的 IP 地址,说明解析成功。

访问 FTP 服务

<time>5min ~ 10min</time>

FTP 服务已安装并配置完成,下面我们来使用该 FTP 服务

访问 FTP 服务

根据您个人的工作环境,选择一种方式来访问已经搭建的 FTP 服务

通过 Windows 资源管理器访问

Windows 用户可以复制下面的[链接][address]到资源管理器的地址栏访问:

<bubble for="address">
如果您申请了域名,可以将链接中的 Ip 地址替换为对应的域名访问 FTP 服务
</bubble>

ftp://ftpuser:${runtime.vars.allocatedPassword}@${runtime.vars.cvmIpAddress}

通过 FTP 客户端工具访问

FTP 客户端工具众多,下面推荐两个常用的:

  • [WinSCP][ws] - Windows 下的 FTP 和 SFTP 连接客户端
  • [FileZilla][fz] - 跨平台的 FTP 客户端,支持 Windows 和 Mac

下载和安装 FTP 客户端后,使用下面的凭据进行连接即可:

[主机][host]:

<bubble for="host">
如果您申请了域名,可以将Ip 地址替换为对应的域名作为访问凭据
</bubble>

${runtime.vars.cvmIpAddress}

用户:

ftpuser

密码:

${runtime.vars.allocatedPassword}

如果能够正常连接,那么大功告成,您可以开始使用属于您自己的 FTP 服务器了!

接下来,请上传任意一张图片到您的 FTP 服务器上的pub目录下,然后,就可以在 [/data/ftp/pub][ftp] 中看到了。

注意: 请不要直接上传文件到根目录下,您应该选择上传到 pub 目录下

<locate for="ftp" path="/data/ftp/pub" hint="上传后,重新打开此目录查看文件" />

<checker type="output-contains-no" command="ls -1p /data/ftp/pub | grep -v '/' | wc -l" hint="上传图片到 FTP 服务器上">
<keyword regex="0" />
</checker>

大功告成

恭喜!您已经成功完成了搭建 FTP 服务器的实验任务。

搭建静态网站

搭建Http静态服务器环境

<time>15min ~ 30min</time>

搭建静态网站,首先需要部署环境。下面的步骤,将告诉大家如何在服务器上通过 Nginx 部署 HTTP 静态服务。

安装 Nginx

在 CentOS 上,可直接使用 yum 来安装 Nginx

yum install nginx -y

安装完成后,使用 nginx 命令启动 Nginx:

nginx

<bubble for="help">
如果无法访问,请重试用 nginx -s reload 命令重启 Nginx
</bubble>

<checker type="output-contains" command="ls /usr/sbin/" hint="Nginx 未安装">
<keyword regex="nginx" />
</checker>

<checker type="output-contains" command="netstat -nltp" hint="Nginx 未启动">
<keyword regex="nginx" />
<keyword regex="80" />
</checker>

配置静态服务器访问路径

外网用户访问服务器的 Web 服务由 Nginx 提供,Nginx 需要配置静态资源的路径信息才能通过 url 正确访问到服务器上的静态资源。

打开 Nginx 的默认配置文件 [/etc/nginx/nginx.conf][1] ,修改 Nginx 配置,将默认的 root /usr/share/nginx/html; 修改为: root ,如下:

/// <example verb="edit" file="/etc/nginx/nginx.conf" />
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    include /etc/nginx/conf.d/*.conf;

    server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  _;
        root         

        include /etc/nginx/default.d/*.conf;

        location / {
        }

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }

}

<locate hint="这里是所有静态资源请求的根路径"/>

nginx -s reload

重启后,现在我们应该已经可以使用我们的静态服务器了,现在让我们新建一个静态文件,查看服务是否运行正常。

首先让我们在 [/data][data-path] 目录 下创建 目录,如:

<locate for="data" hint="该目录作为服务器的根目录使用"/>

mkdir -p 

<locate for="1" path="/etc/nginx/nginx.conf" hint="编辑默认服务器配置,修改网站的根路径" />

<checker type="output-contains" command="ls /data/ -la" hint="在 /data目录 下创建 目录">
<keyword />
</checker>

创建第一个静态文件

在 目录下创建我们的第一个静态文件 [index.html][1]

/// <example verb="edit"  />
<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <title>第一个静态文件</title>
</head>
<body>
Hello world!
</body>
</html>

到此,一个基于 Nginx 的静态服务器就搭建完成了,现在所有放在 目录下的的静态资源都可以直接通过域名访问。

<locate 是服务器的根目录"/>

<locate for="1" hint="添加 index.html 文件" />

<bubble for="indicate-hello-world">
如果无显示,请刷新浏览器页面
</bubble>

完成实验

恭喜!您已经成功完成了 搭建Http静态服务器环境 的实验任务。