三、搭建共享文件服务
本来只想搭建 Samba 服务的,但是 WordPress 有 FTP 的设置,而且如果你使用 Dreamweaver 来开发的话,也有 FTP 支持......!
NFS / Samba / FTP 都是文件服务器的。
鸟哥链接 : http://cn.linux.vbird.org/linux_server/
安装 FTP 服务
鸟哥 FTP 链接 :http://cn.linux.vbird.org/linux_server/0410vsftpd_1.php
开始安装 vsftpd 服务
查看 yum 上的版本
[root@~]# yum list | grep "vsftpd\."
vsftpd.x86_64 3.0.2-22.el7 base
安装 vsftpd
[root@~]# yum -y install vsftpd
......
Total download size: 169 k
Installed size: 348 k
Downloading packages:
vsftpd-3.0.2-22.el7.x86_64.rpm | 169 kB 00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : vsftpd-3.0.2-22.el7.x86_64 1/1
Verifying : vsftpd-3.0.2-22.el7.x86_64 1/1
Installed:
vsftpd.x86_64 0:3.0.2-22.el7
Complete!
查看安装完成的文件
[root@~]# ls /etc/ | grep "vsftpd"
vsftpd
[root@~]# ls /etc/pam.d/ | grep "vsftpd"
vsftpd
[root@~]# ls /var/ | grep "ftp"
ftp
[root@~]# whereis vsftpd
vsftpd: /usr/sbin/vsftpd /etc/vsftpd /usr/share/man/man8/vsftpd.8.gz
查看服务
[root@~]# systemctl list-unit-files vsftpd.service
UNIT FILE STATE
vsftpd.service disabled
1 unit files listed.
使能服务
[root@~]# systemctl enable vsftpd
Created symlink from /etc/systemd/system/multi-user.target.wants/vsftpd.service to /usr/lib/systemd/system/vsftpd.service.
[root@~]# systemctl list-unit-files vsftpd.service
UNIT FILE STATE
vsftpd.service enabled
1 unit files listed.
配置 vsftpd 服务
查看配置文件内容 vsftpd.conf
[root@~]# cat /etc/vsftpd/vsftpd.conf | grep -v "^ *#" | grep -v "^$"
anonymous_enable=YES
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
它一共分三种类型的设置:BOOLEAN OPTIONS(布尔型),NUMERIC OPTIONS(数字型),STRING OPTIONS(字符型);
一一解析......
anonymous_enable=YES // 控制匿名登录是否合法。如果是 YES,用户名是 ftp 和 anonymous都被识别为匿名登录;
local_enable=YES // 控制本地登录是否合法。如果是 YES,在 /etc/passwd 下的普通用户可以用于登录。这必须要允许任意的非匿名用户和虚拟用户可以登录进去进行工作。
write_enable=YES // 控制可以用于改变文件系统的 FTP 命令。这些命令是:STOR, DELE, RNFR, RNTO, MKD, RMD, APPE 和 SITE。
local_umask=022 // !这个值是为本地用户创建文件设置的掩码值。注意!如果你想要一个特殊的八进制值一定要使用“0”前缀,不然这个值会被当成十进制值处理。
dirmessage_enable=YES // 如果启用了,当 FTP 服务的用户第一次进入一个新的目录的时候会显示一些信息。默认的,一个目录是可以扫描到 .message 文件的,但是可以设置配置来覆盖 message_file.
xferlog_enable=YES //如果启用了,会有一个日志文件记录着上传和下载的详细细节。默认的,这个文件会放到 var/log/vsftpd.log 处,但是这个路径可以通过设置 vsftp_log_file 配置项来覆盖掉。
connect_from_port_20=YES // 这个是控制着在服务器里面是否使用端口号 20 (ftp-data)进行数据连接。出于安全的因素,一些客户会坚持使用这个端口进行数据连接。相反地,禁用此选项可使 vsftpd 以较低的权限运行。
xferlog_std_format=YES // 如果启用了,传输日志文件会以标准的 xferlog 的格式写入,就像 wu-ftp 所使用的格式一样。这是非常有用的,因为你可以重用已经存在的传输统计生成器。然而,默认地格式会更易读。这个样式的传输日志文件的默认路径在 /var/log/xferlog,但是你可以通过修改 xferlog_file 这个配置项来修改这个路径。
listen=NO // 如果启用了,vsftpd 会以独立模式运行。这意味着 vsftpd 不能在类似 inetd 上运行。相对地,vsftpd 只会运行一次。然后,vsftpd将负责监听和处理传入的连接。
listen_ipv6=YES // 与 listen 参数一样,vsftpd 将监听 IPv6 套接字而不是 IPv4套接字。这个参数和 lisent 参数是相互排斥的,就是只能设置其中一个参数为 YES。
pam_service_name=vsftpd // 这个字符串是 vsftpd 使用的 PAM 服务名。
userlist_enable=YES // 如果启用了,vsftpd 会从 userlist_flie 配置项提供的文件名中加载一个用户名列表。如果用户尝试使用这个文件的名称进行登录,在请求密码前他们会被拒绝。这个在防止明文传输时会非常有用。另外可以看看 userlist_deny 配置项。
tcp_wrappers=YES // 如果启用了,vsftpd 会使用 tcp_wrappers 进行编译,传入连接将会通过 tcp_wrappers 控制访问。此外,还存在基于每个 IP 配置的机制。如果 tcp_wrappers 设置 VSFTPD_LOAD_CONF 环境变量,则 vsftpd 会话将尝试加载此变量中指定的 vsftpd 配置文件。
可以使用 man 5 vsftpd.conf
快速查看所有的配置项
[root@~]# man 5 vsftpd.conf
VSFTPD.CONF(5) File Formats Manual VSFTPD.CONF(5)
NAME
vsftpd.conf - config file for vsftpd
DESCRIPTION
vsftpd.conf may be used to control various aspects of vsftpd's behaviour. By default, vsftpd looks
for this file at the location /etc/vsftpd/vsftpd.conf. However, you may override this by specifying
a command line argument to vsftpd. The command line argument is the pathname of the configuration
file for vsftpd. This behaviour is useful because you may wish to use an advanced inetd such as
xinetd to launch vsftpd with different configuration files on a per virtual host basis.
Systemd changes the vsftpd daemon start-up. The vsftpd package contains vsftpd-generator script gen‐
erating symbolic links to /var/run/systemd/generator/vsftpd.target.wants directory. The generator is
called during e. g. 'systemctl --system daemon-reload'. All these symbolic links link /usr/lib/sys‐
temd/system/vsftpd@.service file. The vsftpd daemon(s) is/are controlled by one of following ways:
1. Single daemon using default /etc/vsftpd/vsftpd.conf configuration file
# systemctl {start,stop,...} vsftpd[.service]
2. Single daemon using /etc/vsftpd/<config-filename>.conf
# systemctl {start,stop,...} vsftpd@<config-filename-without-extension>[.service]
3. All instances together
# systemctl {restart,stop} vsftpd.target
See systemd.unit(5), systemd.target(5) for further details.
FORMAT
The format of vsftpd.conf is very simple. Each line is either a comment or a directive. Comment
lines start with a # and are ignored. A directive line has the format:
option=value
It is important to note that it is an error to put any space between the option, = and value.
Each setting has a compiled in default which may be modified in the configuration file.
BOOLEAN OPTIONS
.......
以下的配置与鸟哥里面的 21.2.5 CentOS 的 vsftpd 默认值 几乎一致。
开始配置吧!
Step 01
使用 Standalone 模式;Enter 后,使用键盘上的 n 键可以跳到下一个 listen 字符处 ,修改完成后,vim 里面使用按 ESC 后,:w 保存
[root@~]# vim +/listen /etc/vsftpd/vsftpd.conf
listen=NO -- 修改成 --> linsten=YES
listen_ipv6=YES -- 修改成 --> listen_ipv6=NO
Step 02
vsftpd 默认使用格林威治时间 (GMT) ,修改成本地时间, vim 里面 :200 再按 o 键,末行写入以下内容;按 ESC 后, :w 保存
use_localtime=YES
Step 03
设置实体帐号相关信息
vim 内使用 :/local_umask 跳到 local_umask 修改如下
local_umask=022 -- 修改成 --> local_umask=002 // 最终权限为 775
扩展--权限:
1、r+w+x = 2^2 + 2^1 + 2^0 = 4 + 2 + 1 = 7;
2、777(111111111) ^(异或) 002(000000010) = 775(111111101)如 test.txt : 775 指 root 用户可读写可执行,root 用户组可读写可执行,others (其他人) 可读不可写可执行。
例子:
[root@~]# touch test.txt [root@~]# ls -la | grep "test" -rw-r--r-- 1 root root 0 Sep 19 11:58 test.txt [root@~]# chmod 775 test.txt [root@~]# ls -la | grep "test" -rwxrwxr-x 1 root root 0 Sep 19 11:58 test.txt [root@~]# chmod 777 test.txt [root@~]# ls -la | grep "test" -rwxrwxrwx 1 root root 0 Sep 19 11:58 test.txt [root@~]# chmod 177 test.txt [root@~]# ls -la | grep "test" ---xrwxrwx 1 root root 0 Sep 19 11:58 test.txt
使能用户列表,在 local_umask 下一行添加如下内容
userlist_enable=YES
userlist_deny=YES
userlist_file=/etc/vsftpd/user_list
一一解析:
userlist_enable // If enabled, vsftpd will load a list of usernames, from the filename given by userlist_file. If a user tries to log in using a name in this file, they will be denied before they are asked for a password. This may be useful in preventing cleartext passwords being transmitted. See also userlist_deny.
userlist_deny // This option is examined if userlist_enable is activated. If you set this setting to NO, then users will be denied login unless they are explicitly listed in the file specified by userlist_file. When login is denied, the denial is issued before the user is asked for a password.
userlist_file //This option is the name of the file loaded when the userlist_enable option is active. Default: /etc/vsftpd/user_list
Step 04
增加欢迎信息,vim 内定位到 :/tcp_wrappers 在其下面写入如下内容
banner_file=/etc/vsftpd/welcome.txt
banner_file // This option is the name of a file containing text to display when someone connects to the server. If set, it overrides the banner string provided by the ftpd_banner option.
创建 welcome.txt 文件及内容
[root@~]# touch /etc/vsftpd/welcome.txt
[root@~]# vim /etc/vsftpd/welcome.txt
[root@~]# cat /etc/vsftpd/welcome.txt
欢迎光临 Deepppixel 网站!本站提供 FTP 服务!
如有问题请联系 Deepppixel !
Step 05
登记要限制登录的系统用户
查看所有的系统用户
[root@~]# cat/etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:997:User for polkitd:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
nscd:x:28:28:NSCD Daemon:/:/sbin/nologin
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash
saslauth:x:997:76:Saslauthd user:/run/saslauthd:/sbin/nologin
解析:
- root:x:0:0:root:/root:/bin/bash
- 用户名:密码:UID:GID:用户描述: home 目录
把 UID < 500 有写入 /etc/vsftpd/ftpusers [黑名单] 和 /etc/vsftpd/user_list [白名单] 两个文件中,它们的内容是一样的
[root@~]# vim /etc/vsftpd/user_list
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody
// 下面是新添加的
ftp
systemd-network
dbus
postfix
sshd
ntp
tcpdump
nscd
apache
mysql
补充说明:
- /etc/vsftpd/ftpusers : 由 PAM 模块管理,受 /etc/pam.d/vsftpd 配置的影响;
- /etc/vsftpd/user_list : 由 vsftpd 主动提供,受 vsftpd.conf 的 userlist_file 配置项影响;
启动 vsftpd 服务
[root@~]# systemctl status vsftpd.service
● vsftpd.service - Vsftpd ftp daemon
Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; enabled; vendor preset: disabled)
Active: inactive (dead)
[root@~]# systemctl start vsftpd.service
[root@~]# systemctl status vsftpd.service
● vsftpd.service - Vsftpd ftp daemon
Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2018-09-19 15:44:15 CST; 2s ago
Process: 28777 ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf (code=exited, status=0/SUCCESS)
Main PID: 28778 (vsftpd)
CGroup: /system.slice/vsftpd.service
└─28778 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
Sep 19 15:44:15 izwz9dnfbgdn5tleje5eitz systemd[1]: Starting Vsftpd ftp daemon...
Sep 19 15:44:15 izwz9dnfbgdn5tleje5eitz systemd[1]: Started Vsftpd ftp daemon.
[root@~]# netstat -tulnp| grep 21
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 28778/vsftpd
使用 FTP 测试一下吧!
如果没有 ftp 就安装
[root@~]# yum -y install ftp
......
Total download size: 61 k
Installed size: 96 k
Downloading packages:
ftp-0.17-67.el7.x86_64.rpm | 61 kB 00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : ftp-0.17-67.el7.x86_64 1/1
Verifying : ftp-0.17-67.el7.x86_64 1/1
Installed:
ftp.x86_64 0:0.17-67.el7
Complete!
创建一个测试用户 ftpTest,密码:123456
[root@~]# useradd ftpTest
[root@izwz9dnfbgdn5tleje5eitz ~]# passwd ftpTest
Changing password for user ftpTest.
New password: // 123456
BAD PASSWORD: The password is shorter than 8 characters
Retype new password: // 123456
passwd: all authentication tokens updated successfully
删除用户: userdel -r ftpTest
开始测试
[root@~]# ftp localhost
Trying 127.0.0.1...
Connected to localhost (127.0.0.1).
220-
220-欢迎光临 Deepppixel 网站!本站提供 FTP 服务!
220-如有问题请联系 Deepppixel !
220-
220
Name (localhost:root): ftpTest
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> bye
221 Goodbye.
[root@~]# ftp localhost
Trying 127.0.0.1...
Connected to localhost (127.0.0.1).
220-
220-欢迎光临 Deepppixel 网站!本站提供 FTP 服务!
220-如有问题请联系 Deepppixel !
220-
220
Name (localhost:root): mysql
530 Permission denied.
Login failed.
ftp> bye
221 Goodbye.
Step 06
打开 chroot 配置,保护系统
[root@~]# vim +/chroot /etc/vsftpd/vsftpd.conf
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
一一解析:
chroot_local_user // If set to YES, local users will be (by default) placed in a chroot() jail in their home directory after login. Warning: This option has security implications, especially if the users have upload permission, or shell access. Only enable if you know what you are doing. Note that these security implications are not vsftpd specific. They apply to all FTP daemons which offer to put local users in chroot() jails.
chroot_list_enable // If activated, you may provide a list of local users who are placed in a chroot() jail in their home directory upon login. The meaning is slightly different if chroot_local_user is set to YES. In this case, the list becomes a list of users which are NOT to be placed in a chroot() jail. By default, the file containing this list is /etc/vsftpd.chroot_list, but you may override this with the chroot_list_file setting.
chroot_list_file // The option is the name of a file containing a list of local users which will be placed in a chroot() jail in their home directory. This option is only relevant if the option chroot_list_enable is enabled. If the option chroot_local_user is enabled, then the list file becomes a list of users to NOT place in a chroot() jail. Default: /etc/vsftpd.chroot_list
创建 chroot_list 文件
[root@~]# touch /etc/vsftpd/chroot_list
重启 vsftp.service 服务
[rppt@~]# systemctl restart vsftpd.service
测试一下 ftpTest
[root@~]# ftp localhost
Trying 127.0.0.1...
Connected to localhost (127.0.0.1).
220-
220-欢迎光临 Deepppixel 网站!本站提供 FTP 服务!
220-如有问题请联系 Deepppixel !
220-
220
Name (localhost:root): ftpTest
331 Please specify the password.
Password:
500 OOPS: chroot
Login failed.
421 Service not available, remote server has closed connection
ftp> bye
221 Goodbye.
因为 chroot 没有添加到 /etc/vsftpd/chroot_list 中,所以直接登录失败,有效防止不被允许的用户登录 FTP ,破坏系统。
添加 ftpTest ,再测试一下
[root@~]# vim /etc/vsftpd/chroot_list
ftpTest
重启 vsftp.service 服务
[rppt@~]# systemctl restart vsftpd.service
测试
[root@~]# ftp localhost
Trying 127.0.0.1...
Connected to localhost (127.0.0.1).
220-
220-欢迎光临 Deepppixel 网站!本站提供 FTP 服务!
220-如有问题请联系 Deepppixel !
220-
220
Name (localhost:root): ftpTest
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> bye
221 Goodbye.
为 ftpTest 指定登录的根目录
[root@~]# im /etc/vsftpd/vsftpd.conf
# root user home
local_root=/var/ftp/
#
chroot_local_user=YES
# anonymous user home
anon_root=/var/www/html
#
allow_writeable_chroot=YES
# others user home
user_config_dir=/etc/vsftpd/userconfig
正式添加根目录
[root@~]# mkdir -p/etc/vsftpd/userconfig
[root@~]# vim /etc/vsftpd/userconfig/ftpTest
local_root=/var/ftp/ftpTest
创建目录
[root@~]# mkdir -p /var/ftp/ftpTest
[root@~]# touch /var/ftp/ftpTest/test
重启 vsftp.service 服务
[rppt@~]# systemctl restart vsftpd.service
登录测试
[root@~]# ftp localhost
Trying 127.0.0.1...
Connected to localhost (127.0.0.1).
220-
220-欢迎光临 Deepppixel 网站!本站提供 FTP 服务!
220-如有问题请联系 Deepppixel !
220-
220
Name (localhost:root): ftpTest
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> dir
227 Entering Passive Mode (127,0,0,1,178,26).
150 Here comes the directory listing.
-rw-r--r-- 1 0 0 0 Sep 19 18:39 test
226 Directory send OK.
ftp> bye
221 Goodbye.
删除测试用户 ftpTest,及相关文件
[root@~]# userdel -r ftpTest
[root@~]# rm -rf /var/ftp/ftpTest
[root@~]# rm /etc/vsftpd/userconfig/ftpTest
移除 chroot_list 的 ftpTest
[root@~]# vim /etc/vsftpd/chroot_list
重启 vsftp.service 服务
[rppt@~]# systemctl restart vsftpd.service
Step 07
其他配置
限制带宽
[root@~]# vim /etc/vsftpd/vsftpd.conf
local_max_rate=1000000 // 单位是 bytes/second
local_max_rate // The maximum data transfer rate permitted, in bytes per second, for local authenticated users.
限制同时在线人数,及单个 ip 的联机数
max_clients=10
max_per_ip=1
关闭 userlist_deny,开启严格的用户登录功能
userlist_deny=YES -- 修改成 --> userlist_deny=NO
关闭匿名登录
anonymous_enable=YES -- 修改成 --> anonymous_enable=NO
如果想使用匿名用户登录,可以详细看看鸟哥的文章。
重启 vsftp.service 服务
[rppt@~]# systemctl restart vsftpd.service
Step 08
打开防火墙
[root@~]# firewall-cmd --permanent --zone=public --add-service=ftp
[root@~]# firewall-cmd --reload
重启 vsftp.service 服务
[rppt@~]# systemctl restart vsftpd.service
Step 09
配置 WordPress FTP
先创建供 WordPress 使用的用户
[root@~]# useradd deepppixelAdmin
[root@~]# passwd deepppixelAdmin
把 deepppixelAdmin 添加进 chroot_list
[root@~]# vim /etc/vsftpd/chroot_list
deepppixelAdmin
添加根目录
[root@~]# vim /etc/vsftpd/userconfig/deepppixel_com
local_root=/var/ftp/deepppixel.com/
创建根目录
[root@~]# mkdir -p /var/ftp/deepppixel.com
重启 vsftp.service 服务
[rppt@~]# systemctl restart vsftpd.service
登录测试
[root@~]# ftp localhost
Trying 127.0.0.1...
Connected to localhost (127.0.0.1).
220-
220-欢迎光临 Deepppixel 网站!本站提供 FTP 服务!
220-如有问题请联系 Deepppixel !
220-
220
Name (localhost:root): deepppixelAdmin
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> bye
221 GoodBye
配置 WordPress 的 wp-config.php 文件
[root@~]# vim /var/www/deepppixel.com/wp-config.php
/* FTP */
define( 'FTP_USER', '名称' );
define( 'FTP_PASS', '密码' );
define( 'FTP_SSL', true ); // 开启加密传输
重启 Apache
[root@~]# systmctl restart httpd.service
安装 Samba 服务 (可选)
鸟哥 Samba 链接:http://cn.linux.vbird.org/linux_server/0370samba_1.php
开始安装 Samba 服务
查看 yum 上的版本
[root@~]# yum list | grep "samba\."
kdenetwork-fileshare-samba.x86_64 7:4.10.5-8.el7_0 base
pcp-pmda-samba.x86_64 3.12.2-5.el7 base
php-pear-Auth-samba.noarch 1.6.4-2.el7 epel
samba.x86_64 4.7.1-9.el7_5 updates
安装 Samba
[root@~]# yum -y install samba
查看安装好的 Samba
[root@~]# yum list installed | grep "samba"
结语:由于我的服务器需要安装 Swift Perfect ,但是 Swift 只支持 MacOS 和 Ubuntu ,没有办法只能放弃 CentOS 短暂且愉快的一次冒险,Samba 的配置也就不写了。
后面要更新的文章,《阿里云 ECS 服务器 Ubuntu 搭建 LAMP WordPress 环境》 以及 《阿里云 ECS 服务器 Ubuntu 搭建 Swift Perfect》我们江湖再见 。