阿里云 ECS 服务器 CentOS 7.4 搭建 LAMP WordPress 环境:vsftp 文件服务

三、搭建共享文件服务

本来只想搭建 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

鸟哥的 Linux 私房菜 -- 服务器架设篇目录 FTP

vsftpdvsftpd 文档

开始安装 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

鸟哥的 Linux 私房菜 -- 服务器架设篇目录 Samba

Samba , Samba 文档

开始安装 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》我们江湖再见 。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,406评论 5 475
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,976评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,302评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,366评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,372评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,457评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,872评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,521评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,717评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,523评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,590评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,299评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,859评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,883评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,127评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,760评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,290评论 2 342

推荐阅读更多精彩内容