漫画赏析:Bash 的历史
在 Linux 中,.bash_history
原本的功能为存储在 bash 下执行过的命令历史,在这里,引申为 bash 的历史。所以在展示 .bash_history
返回了下面的摘自维基百科的内容。
via: http://turnoff.us/geek/bash-history/
作者:Daniel Stori 译者:name1e5s 点评:bestony 校对:wxy
在 Linux 中,.bash_history
原本的功能为存储在 bash 下执行过的命令历史,在这里,引申为 bash 的历史。所以在展示 .bash_history
返回了下面的摘自维基百科的内容。
via: http://turnoff.us/geek/bash-history/
作者:Daniel Stori 译者:name1e5s 点评:bestony 校对:wxy
AWS(Amazon Web Services)是全球领先的云服务器提供商之一。你可以使用 AWS 平台在一分钟内设置完服务器。在 AWS 上,你可以微调服务器的许多技术细节,如 CPU 数量,内存和磁盘空间,磁盘类型(更快的 SSD 或者经典的 IDE)等。关于 AWS 最好的一点是,你只需要为你使用到的服务付费。在开始之前,AWS 提供了一个名为 “Free Tier” 的特殊帐户,你可以免费使用一年的 AWS 技术服务,但会有一些小限制,例如,你每个月使用服务器时长不能超过 750 小时,超过这个他们就会向你收费。你可以在 aws 官网上查看所有相关的规则。
因为我的这篇文章是关于在 AWS 上创建 Linux 服务器,因此拥有 “Free Tier” 帐户是先决条件。要注册帐户,你可以使用此链接。请注意,你需要在创建帐户时输入信用卡详细信息。
让我们假设你已经创建了 “Free Tier” 帐户。
在继续之前,你必须了解 AWS 中的一些术语以了解设置:
通过以下链接登录 AWS 控制台:https://console.aws.amazon.com/ 。
AWS 控制台将如下所示:
1、 创建一个 EC2(虚拟机)实例:在开始安装系统之前,你必须在 AWS 中创建一台虚拟机。要创建虚拟机,在“ 计算 ”菜单下点击 EC2:
2、 现在在 创建实例 下点击 “启动实例” 按钮。
3、 现在,当你使用的是一个 “Free Tier” 帐号,接着最好选择 “Free Tier” 单选按钮以便 AWS 可以过滤出可以免费使用的实例。这可以让你不用为使用 AWS 的资源而付费。
4、 要继续操作,请选择以下选项:
a、 在经典实例向导中选择一个 AMI(Amazon Machine Image),然后选择使用 Red Hat Enterprise Linux 7.2(HVM),SSD 存储
b、 选择 “t2.micro” 作为实例详细信息。
c、 配置实例详细信息:不要更改任何内容,只需单击下一步。
d、 添加存储:不要更改任何内容,只需点击下一步,因为此时我们将使用默认的 10(GiB)硬盘。
e、 添加标签:不要更改任何内容只需点击下一步。
f、 配置安全组:现在选择用于 ssh 的 22 端口,以便你可以在任何地方访问此服务器。
g、 选择“ 查看并启动 ”按钮。
h、 如果所有的详情都无误,点击 “ 启动 ”按钮。
i、 单击“ 启动 ”按钮后,系统会像下面那样弹出一个窗口以创建“密钥对”:选择选项“ 创建密钥对 ”,并给密钥对起个名字,然后下载下来。在使用 ssh 连接到服务器时,需要此密钥对。最后,单击“ 启动实例 ”按钮。
j、 点击“ 启动实例 ”按钮后,转到左上角的服务。选择“ 计算 ”--> “EC2”。现在点击“ 运行实例 ”:
k、 现在你可以看到,你的新 VM 的状态是 “ 运行中 ”。选择实例,请记下登录到服务器所需的 “ 公开 DNS 名称 ”。
现在你已完成创建一台运行 Linux 的 VM。要连接到服务器,请按照以下步骤操作。
1、 首先,你需要有 putty gen 和 Putty exe 用于从 Windows 连接到服务器(或 Linux 上的 SSH 命令)。你可以通过下面的链接下载 putty。
2、 现在打开 putty gen :puttygen.exe
。
3、 你需要单击 “Load” 按钮,浏览并选择你从亚马逊上面下载的密钥对文件(pem 文件)。
4、 你需要选择 “ssh2-RSA” 选项,然后单击保存私钥按钮。请在下一个弹出窗口中选择 “yes”。
5、 将文件以扩展名 .ppk
保存。
6、 现在你需要打开 putty.exe
。在左侧菜单中点击 “connect”,然后选择 “SSH”,然后选择 “Auth”。你需要单击浏览按钮来选择我们在步骤 4 中创建的 .ppk 文件。
7、 现在点击 “session” 菜单,并在“host name” 中粘贴在本教程中 “k” 步骤中的 DNS 值,然后点击 “open” 按钮。
8、 在要求用户名和密码时,输入 ec2-user
和空白密码,然后输入下面的命令。
$ sudo su -
哈哈,你现在是在 AWS 云上托管的 Linux 服务器上的主人啦。
via: https://www.howtoforge.com/tutorial/how-to-setup-linux-server-with-aws/
作者:MANMOHAN MIRKAR 译者:geekpi 校对:jasminepeng
虽然有些人使用 Linux 来表示整个操作系统,但要注意的是,严格地来说,Linux 只是个内核。另一方面,发行版是一个完整功能的系统,它建立在内核之上,具有各种各样的应用程序工具和库。
在正常操作期间,内核负责执行两个重要任务:
为此,内核通过内置的驱动程序或以后可作为模块安装的驱动程序与硬件通信。
例如,当你计算机上运行的程序想要连接到无线网络时,它会将该请求提交给内核,后者又会使用正确的驱动程序连接到网络。
随着新的设备和技术定期出来,如果我们想充分利用它们,保持最新的内核就很重要。此外,更新内核将帮助我们利用新的内核函数,并保护自己免受先前版本中发现的漏洞的攻击。
准备好了在 CentOS 7 或其衍生产品(如 RHEL 7和 Fedora)上更新内核了么?如果是这样,请继续阅读!
让我们安装了一个发行版,它包含了一个特定版本的内核。为了展示当前系统中已安装的版本,我们可以:
# uname -sr
下面的图片展示了在一台 CentOS 7 服务器上的输出信息:
在 CentOS 7 上检查内核版本
如果我们现在进入 https://www.kernel.org/,在撰写本文时,我们看到最新的内核版本是4.10.1(其他版本可以从同一网站获得)。
还要考虑的一个重要的事情是内核版本的生命周期 - 如果你当前使用的版本接近它的生命周期结束,那么在该日期后将不会提供更多的 bug 修复。关于更多信息,请参阅内核发布页。
大多数现代发行版提供了一种使用 yum 等包管理系统和官方支持的仓库升级内核的方法。
但是,这只会升级内核到仓库中可用的最新版本 - 而不是在 https://www.kernel.org/ 中可用的最新版本。不幸的是,Red Hat 只允许使用前者升级内核。
与 Red Hat 不同,CentOS 允许使用 ELRepo,这是一个第三方仓库,可以将内核升级到最新版本。
要在 CentOS 7 上启用 ELRepo 仓库,请运行:
# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
# rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
在 CentOS 7 启用 ELRepo
仓库启用后,你可以使用下面的命令列出可用的内核相关包:
# yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
yum - 找出可用的内核版本
接下来,安装最新的主线稳定内核:
# yum --enablerepo=elrepo-kernel install kernel-ml
在 CentOS 7 中安装最新的内核版本
最后,重启机器并应用最新内核,接着运行下面的命令检查最新内核版本:
uname -sr
验证内核版本
为了让新安装的内核成为默认启动选项,你需要如下修改 GRUB 配置:
打开并编辑 /etc/default/grub
并设置 GRUB_DEFAULT=0
。意思是 GRUB 初始化页面的第一个内核将作为默认内核。
GRUB_TIMEOUT=5
GRUB_DEFAULT=0
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="rd.lvm.lv=centos/root rd.lvm.lv=centos/swap crashkernel=auto rhgb quiet"
GRUB_DISABLE_RECOVERY="true"
接下来运行下面的命令来重新创建内核配置。
# grub2-mkconfig -o /boot/grub2/grub.cfg
在 GRUB 中设置内核
重启并验证最新的内核已作为默认内核。
在 CentOS 7 中启动默认内核版本
恭喜你!你已经在 CentOS 7 中升级内核了!
在本文中,我们解释了如何轻松升级系统上的 Linux 内核。我们还没讲到另外一个方法,因为它涉及从源代码编译内核,这可以写成一本书,并且不推荐在生产系统上这么做。
虽然它是最好的学习体验之一,并且允许细粒度配置内核,但是你可能会让你的系统不可用,并且可能必须从头重新安装它。
如果你仍然有兴趣构建内核作为学习经验,你可以在 Kernel Newbies页面中获得指导。
一如既往,如果你对本文有任何问题或意见,请随时使用下面的评论栏。
作者简介:
我是一个计算机上瘾的家伙,并且是开源和 Linux 系统软件的粉丝,有大约 4 年的 Linux 发行版桌面、服务器和 bash 脚本的经验。
via: http://www.tecmint.com/install-upgrade-kernel-version-in-centos-7/
作者:Matei Cezar 译者:geekpi 校对:wxy
我们都知道, IT 基础设施方面的大多数服务器(包括世界顶级的超级计算机)都运行在 Linux 平台上,因为和其他操作系统相比, Linux 更加灵活。有的操作系统对于一些微乎其微的改动和补丁更新都需要重启,但是 Linux 不需要,只有对于一些关键补丁的更新, Linux 才会需要重启。
Linux 系统管理员面临的一大挑战是如何在没有任何停机时间的情况下维护系统的良好运行。管理内存使用是 Linux 管理员又一个具有挑战性的任务。free
是 Linux 中一个标准的并且被广泛使用的命令,它被用来分析内存统计(空闲和已用)。今天,我们将要讨论 free
命令以及它的一些有用选项。
推荐文章:
free 命令能够显示系统中物理上的 空闲 和 已用 内存,还有 交换 内存,同时,也能显示被内核使用的 缓冲 和 缓存 。这些信息是通过解析文件 /proc/meminfo
而收集到的。
不带任何选项运行 free
命令会显示系统内存,包括 空闲 、 已用 、 交换 、 缓冲 、 缓存 和 交换 的内存总数。
# free
total used free shared buffers cached
Mem: 32869744 25434276 7435468 0 412032 23361716
-/+ buffers/cache: 1660528 31209216
Swap: 4095992 0 4095992
输出有三行:
第一行:表明全部内存、已用内存、空闲内存、共用内存(主要被 tmpfs(/proc/meminfo
中的 Shmem
项)使用)、用于缓冲的内存以及缓存内容大小。
/proc/meminfo
中的 MemTotal
项)/proc/meminfo
中的 MemFree
项)/proc/meminfo
中的 Shmem
项)/proc/meminfo
中的 Buffers
项)/proc/meminfo
中的 Cached
和 SSReclaimable
项)/proc/meminfo
中的 SwapTotal
项)、空闲内存(/proc/meminfo
中的 SwapFree
项)和已用交换内存。默认情况下, free
命令以 KB - Kilobytes
为单位输出系统内存,这对于绝大多数管理员来说会有一点迷糊(当系统内存很大的时候,我们中的许多人需要把输出转化为以 MB 为单位,从而才能够理解内存大小)。为了避免这个迷惑,我们在 free
命令后面加上 -m
选项,就可以立即得到以 MB - Megabytes
为单位的输出。
# free -m
total used free shared buffers cached
Mem: 32099 24838 7261 0 402 22814
-/+ buffers/cache: 1621 30477
Swap: 3999 0 3999
如何从上面的输出中检查剩余多少空闲内存?主要基于 已用 和 空闲 两列。你可能在想,你只有很低的空闲内存,因为它只有 10%
, 为什么?
全部实际可用内存 = (全部内存 - 第 2 行的已用内存)
如果你的 Linux 版本是最新的,那么有一个查看实际空闲内存的选项,叫做 可用 ,对于旧的版本,请看显示 -/+ buffers/cache
那一行对应的空闲(free
)一列。
如何从上面的输出中检查有多少实际已用内存?基于 已用 和 空闲 一列。你可能想,你已经使用了超过 95%
的内存。
全部实际已用内存 = 第一列已用 - (第一列缓冲 + 第一列缓存)
默认情况下, free
命令会以 KB - kilobytes
为单位显示输出,这对于大多数管理员来说会有一些迷惑,所以我们使用上面的选项来获得以 MB - Megabytes
为单位的输出。但是,当服务器的内存很大(超过 100 GB 或 200 GB)时,上面的选项也会让人很迷惑。所以,在这个时候,我们可以在 free
命令后面加上 -g
选项,从而立即得到以 GB - Gigabytes
为单位的输出。
# free -g
total used free shared buffers cached
Mem: 31 24 7 0 0 22
-/+ buffers/cache: 1 29
Swap: 3 0 3
默认情况下, free
命令的输出只有三行(内存、缓冲/缓存以及交换)。为了统一以单独一行显示(全部(内存+交换)、已用(内存+(已用-缓冲/缓存)+交换)以及空闲(内存+(已用-缓冲/缓存)+交换),在 ‘free’ 命令后面加上 -t
选项。
# free -t
total used free shared buffers cached
Mem: 32869744 25434276 7435468 0 412032 23361716
-/+ buffers/cache: 1660528 31209216
Swap: 4095992 0 4095992
Total: 36965736 27094804 42740676
默认情况下, free
命令只会显示一次统计输出,这是不足够进一步排除故障的,所以,可以通过添加延迟(延迟是指在几秒后再次更新)来定期统计内存活动。如果你想以两秒的延迟运行 free
命令,可以使用下面的命令(如果你想要更多的延迟,你可以按照你的意愿更改数值)。
下面的命令将会每 2 秒运行一次直到你退出:
# free -s 2
total used free shared buffers cached
Mem: 32849392 25935844 6913548 188 182424 24632796
-/+ buffers/cache: 1120624 31728768
Swap: 20970492 0 20970492
total used free shared buffers cached
Mem: 32849392 25935288 6914104 188 182424 24632796
-/+ buffers/cache: 1120068 31729324
Swap: 20970492 0 20970492
total used free shared buffers cached
Mem: 32849392 25934968 6914424 188 182424 24632796
-/+ buffers/cache: 1119748 31729644
Swap: 20970492 0 20970492
另外,你可以按延迟和具体次数运行 free
命令,一旦达到某个次数,便自动退出。
下面的命令将会每 2 秒运行一次 free 命令,计数 5 次以后自动退出。
# free -s 2 -c 5
total used free shared buffers cached
Mem: 32849392 25931052 6918340 188 182424 24632796
-/+ buffers/cache: 1115832 31733560
Swap: 20970492 0 20970492
total used free shared buffers cached
Mem: 32849392 25931192 6918200 188 182424 24632796
-/+ buffers/cache: 1115972 31733420
Swap: 20970492 0 20970492
total used free shared buffers cached
Mem: 32849392 25931348 6918044 188 182424 24632796
-/+ buffers/cache: 1116128 31733264
Swap: 20970492 0 20970492
total used free shared buffers cached
Mem: 32849392 25931316 6918076 188 182424 24632796
-/+ buffers/cache: 1116096 31733296
Swap: 20970492 0 20970492
total used free shared buffers cached
Mem: 32849392 25931308 6918084 188 182424 24632796
-/+ buffers/cache: 1116088 31733304
Swap: 20970492 0 20970492
为了以人类可读的格式输出,在 free
命令的后面加上 -h
选项,和其他选项比如 -m
和 -g
相比,这将会更人性化输出(自动使用 GB 和 MB 单位)。
# free -h
total used free shared buff/cache available
Mem: 2.0G 1.6G 138M 20M 188M 161M
Swap: 2.0G 1.8G 249M
默认情况下,缓冲/缓存内存是同时输出的。为了取消缓冲和缓存内存的输出,可以在 free
命令后面加上 -w
选项。(该选项在版本 3.3.12 上可用)
注意比较上面有缓冲/缓存的输出。
# free -wh
total used free shared buffers cache available
Mem: 2.0G 1.6G 137M 20M 8.1M 183M 163M
Swap: 2.0G 1.8G 249M
默认情况下, free
命令不会显示最低和最高的内存统计。为了显示最低和最高的内存统计,在 free 命令后面加上 -l
选项。
# free -l
total used free shared buffers cached
Mem: 32849392 25931336 6918056 188 182424 24632808
Low: 32849392 25931336 6918056
High: 0 0 0
-/+ buffers/cache: 1116104 31733288
Swap: 20970492 0 20970492
如果你想了解 free 命令的更多可用选项,只需查看其 man 手册。
# free --help
or
# man free
via: http://www.2daygeek.com/free-command-to-check-memory-usage-statistics-in-linux/
作者:MAGESH MARUTHAMUTHU 译者:ucasFL 校对:wxy
如果你是第一次设置 MySQL 或 MariaDB 数据库,你可以直接运行 mysql_secure_installation
来实现基本的安全设置。
其中一项是设置数据库 root 帐户的密码 - 你必须保持私密,并仅在绝对需要时使用。如果你忘记了密码或需要重置密码(例如,当数据库管理员换人或被裁员!),这篇文章会派上用场。我们将解释如何在 Linux 中重置或恢复 MySQL 或 MariaDB 的 root 密码。
建议阅读: 更改 MySQL 或 MariaDB 的 root 密码。
虽然我们将在本文中使用 MariaDB,但这些说明同样也适用于 MySQL。
开始之前,先停止数据库服务并检查服务状态,我们应该可以看到先前设置的环境变量:
------------- SystemD -------------
# systemctl stop mariadb
------------- SysVinit -------------
# /etc/init.d/mysqld stop
接下来,用 --skip-grant-tables
选项启动服务:
------------- SystemD -------------
# systemctl set-environment MYSQLD_OPTS="--skip-grant-tables"
# systemctl start mariadb
# systemctl status mariadb
------------- SysVinit -------------
# mysqld_safe --skip-grant-tables &
使用 skip tables 启动 MySQL/MariaDB
这可以让你不用 root 密码就能连接到数据库(你也许需要切换到另外一个终端上):
# mysql -u root
接下来,按照下面列出的步骤来。
MariaDB [(none)]> USE mysql;
MariaDB [(none)]> UPDATE user SET password=PASSWORD('YourNewPasswordHere') WHERE User='root' AND Host = 'localhost';
MariaDB [(none)]> FLUSH PRIVILEGES;
最后,停止服务,取消环境变量设置并再次启动服务:
------------- SystemD -------------
# systemctl stop mariadb
# systemctl unset-environment MYSQLD_OPTS
# systemctl start mariadb
------------- SysVinit -------------
# /etc/init.d/mysql stop
# /etc/init.d/mysql start
这可以让先前的改变生效,允许你使用新的密码连接到数据库。
本文我们讨论了如何重置 MariaDB/MySQL 的 root 密码。一如往常,如果你有任何问题或反馈请在评论栏中给我们留言。我们期待听到你的声音。
作者简介:
Gabriel Cánepa - 一位来自阿根廷圣路易斯梅塞德斯镇 (Villa Mercedes, San Luis, Argentina) 的 GNU/Linux 系统管理员,Web 开发者。就职于一家世界领先级的消费品公司,乐于在每天的工作中能使用 FOSS 工具来提高生产力。
via: http://www.tecmint.com/reset-mysql-or-mariadb-root-password/
作者:Gabriel Cánepa 译者:geekpi 校对:jasminepeng
FTP(文件传输协议)是一个较老且最常用的标准网络协议,用于在两台计算机之间通过网络上传/下载文件。然而, FTP 最初的时候并不安全,因为它仅通过用户凭证(用户名和密码)传输数据,没有进行加密。
警告:如果你打算使用 FTP, 需要考虑通过 SSL/TLS(将在下篇文章中讨论)配置 FTP 连接。否则,使用安全 FTP,比如 SFTP 会更好一些。
推荐阅读:如何在 CentOS 7 中安装并保护 FTP 服务器
在这个教程中,我将向你们展示如何在 Ubuntu 中安装、配置并保护 FTP 服务器(VSFTPD 的全称是 “Very Secure FTP Deamon”),从而拥有强大的安全性,能够防范 FTP 漏洞。
1、首先,我们需要更新系统安装包列表,然后像下面这样安装 VSFTPD 二进制包:
$ sudo apt-get update
$ sudo apt-get install vsftpd
2、一旦安装完成,初始情况下服务被禁用。因此,我们需要手动开启服务,同时,启动它使得在下次开机时能够自动开启服务:
------------- On SystemD -------------
# systemctl start vsftpd
# systemctl enable vsftpd
------------- On SysVInit -------------
# service vsftpd start
# chkconfig --level 35 vsftpd on
3、接下来,如果你在服务器上启用了 UFW 防火墙(默认情况下不启用),那么需要打开端口 20 和 21 —— FTP 守护进程正在监听它们——从而才能允许从远程机器访问 FTP 服务,然后,像下面这样添加新的防火墙规则:
$ sudo ufw allow 20/tcp
$ sudo ufw allow 21/tcp
$ sudo ufw status
4、让我们进行一些配置来设置和保护 FTP 服务器。首先,我们像下面这样创建一个原始配置文件 /etc/vsftpd/vsftpd.conf
的备份文件:
$ sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.orig
接下来,打开 vsftpd 配置文件。
$ sudo vi /etc/vsftpd.conf
OR
$ sudo nano /etc/vsftpd.conf
把下面的这些选项添加/改成所展示的值:
anonymous_enable=NO # 关闭匿名登录
local_enable=YES # 允许本地用户登录
write_enable=YES # 启用可以修改文件的 FTP 命令
local_umask=022 # 本地用户创建文件的 umask 值
dirmessage_enable=YES # 当用户第一次进入新目录时显示提示消息
xferlog_enable=YES # 一个存有详细的上传和下载信息的日志文件
connect_from_port_20=YES # 在服务器上针对 PORT 类型的连接使用端口 20(FTP 数据)
xferlog_std_format=YES # 保持标准日志文件格式
listen=NO # 阻止 vsftpd 在独立模式下运行
listen_ipv6=YES # vsftpd 将监听 ipv6 而不是 IPv4,你可以根据你的网络情况设置
pam_service_name=vsftpd # vsftpd 将使用的 PAM 验证设备的名字
userlist_enable=YES # 允许 vsftpd 加载用户名字列表
tcp_wrappers=YES # 打开 tcp 包装器
5、现在,配置 VSFTPD ,基于用户列表文件 /etc/vsftpd.userlist
来允许或拒绝用户访问 FTP。
注意,在默认情况下,如果通过 userlist_enable=YES
启用了用户列表,且设置 userlist_deny=YES
时,那么,用户列表文件 /etc/vsftpd.userlist
中的用户是不能登录访问的。
但是,选项 userlist_deny=NO
则反转了默认设置,这种情况下只有用户名被明确列出在 /etc/vsftpd.userlist
中的用户才允许登录到 FTP 服务器。
userlist_enable=YES # vsftpd 将会从所给的用户列表文件中加载用户名字列表
userlist_file=/etc/vsftpd.userlist # 存储用户名字的列表
userlist_deny=NO
重要的是,当用户登录 FTP 服务器以后,他们将进入 chrooted 环境,即当在 FTP 会话时,其 root 目录将是其 home 目录。
接下来,我们来看一看两种可能的途径来设置 chrooted(本地 root)目录,正如下面所展示的。
6、这时,让我们添加/修改/取消这两个选项来将 FTP 用户限制在其 home 目录
chroot_local_user=YES
allow_writeable_chroot=YES
选项 chroot_local_user=YES
意味着本地用户将进入 chroot 环境,当登录以后默认情况下是其 home 目录。
并且我们要知道,默认情况下,出于安全原因,VSFTPD 不允许 chroot 目录具有可写权限。然而,我们可以通过选项 allow_writeable_chroot=YES
来改变这个设置
保存文件然后关闭。现在我们需要重启 VSFTPD 服务从而使上面的这些更改生效:
------------- On SystemD -------------
# systemctl restart vsftpd
------------- On SysVInit -------------
# service vsftpd restart
7、现在,我们通过使用下面展示的 useradd 命令创建一个 FTP 用户来测试 FTP 服务器:
$ sudo useradd -m -c "Aaron Kili, Contributor" -s /bin/bash aaronkilik
$ sudo passwd aaronkilik
然后,我们需要像下面这样使用 echo 命令和 tee 命令来明确地列出文件 /etc/vsftpd.userlist
中的用户 aaronkilik:
$ echo "aaronkilik" | sudo tee -a /etc/vsftpd.userlist
$ cat /etc/vsftpd.userlist
8、现在,是时候来测试上面的配置是否具有我们想要的功能了。我们首先测试匿名登录;我们可以从下面的输出中很清楚的看到,在这个 FTP 服务器中是不允许匿名登录的:
# ftp 192.168.56.102
Connected to 192.168.56.102 (192.168.56.102).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.102:aaronkilik) : anonymous
530 Permission denied.
Login failed.
ftp> bye
221 Goodbye.
9、接下来,我们将测试,如果用户的名字没有在文件 /etc/vsftpd.userlist
中,是否能够登录。从下面的输出中,我们看到,这是不可以的:
# ftp 192.168.56.102
Connected to 192.168.56.102 (192.168.56.102).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.10:root) : user1
530 Permission denied.
Login failed.
ftp> bye
221 Goodbye.
10、现在,我们将进行最后一项测试,来确定列在文件 /etc/vsftpd.userlist
文件中的用户登录以后,是否实际处于 home 目录。从下面的输出中可知,是这样的:
# ftp 192.168.56.102
Connected to 192.168.56.102 (192.168.56.102).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.102:aaronkilik) : aaronkilik
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
在 Ubuntu 中确认 FTP 登录
警告:设置选项 allow_writeable_chroot=YES
是很危险的,特别是如果用户具有上传权限,或者可以 shell 访问的时候,很可能会出现安全问题。只有当你确切的知道你在做什么的时候,才可以使用这个选项。
我们需要注意,这些安全问题不仅会影响到 VSFTPD,也会影响让本地用户进入 chroot 环境的 FTP daemon。
因为这些原因,在下一步中,我将阐述一个更安全的方法,来帮助用户设置一个非可写本地 root 目录。
11、现在,再次打开 VSFTPD 配置文件。
$ sudo vi /etc/vsftpd.conf
OR
$ sudo nano /etc/vsftpd.conf
然后像下面这样用 #
把不安全选项注释了:
#allow_writeable_chroot=YES
接下来,为用户创建一个替代的本地 root 目录(aaronkilik,你的可能和这不一样),然后设置目录权限,取消其他所有用户对此目录的写入权限:
$ sudo mkdir /home/aaronkilik/ftp
$ sudo chown nobody:nogroup /home/aaronkilik/ftp
$ sudo chmod a-w /home/aaronkilik/ftp
12、然后,在本地 root 目录下创建一个具有合适权限的目录,用户将在这儿存储文件:
$ sudo mkdir /home/aaronkilik/ftp/files
$ sudo chown -R aaronkilk:aaronkilik /home/aaronkilik/ftp/files
$ sudo chmod -R 0770 /home/aaronkilik/ftp/files/
之后,将 VSFTPD 配置文件中的下面这些选项添加/修改为相应的值:
user_sub_token=$USER # 在本地 root 目录中插入用户名
local_root=/home/$USER/ftp # 定义各个用户的本地 root 目录
保存文件并关闭。然后重启 VSFTPD 服务来使上面的设置生效:
------------- On SystemD -------------
# systemctl restart vsftpd
------------- On SysVInit -------------
# service vsftpd restart
13、现在,让我们来最后检查一下,确保用户的本地 root 目录是我们在他的 Home 目录中创建的 FTP 目录。
# ftp 192.168.56.102
Connected to 192.168.56.102 (192.168.56.102).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.10:aaronkilik) : aaronkilik
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
FTP 用户 Home 目录登录
就是这样的!记得通过下面的评论栏来分享你关于这篇指导的想法,或者你也可以提供关于这一话题的任何重要信息。
最后但不是不重要,请不要错过我的下一篇文章,在下一篇文章中,我将阐述如何使用 SSL/TLS 来保护连接到 Ubuntu 16.04/16.10 的 FTP 服务器,在那之前,请始终关注我们。
作者简介:
Aaron Kili 是 Linux 和 F.O.S.S 爱好者,即将成为 Linux SysAdmin 和网络开发人员,目前是 TecMint 的内容创作者,他喜欢在电脑上工作,并坚信分享知识。
via: http://www.tecmint.com/install-ftp-server-in-ubuntu/
作者:Aaron Kili 译者:ucasFL 校对:wxy