【UOS运维学习笔记】- VSFTP服务

一、关于FTP

FTP 是 File Transfer Protocol(文件传输协议)的英文简称,而中文简称为”文传协议”。用于Internet 上的控制文件的双向传输。同时,它也是一个应用程序(Application)。基于不同的操作系统有不同的 FTP 应用程序,而所有这些应用程序都遵守同一种协议以传输文件。在FTP 的使用当中,用户经常遇到两个概念:”下载”(Download)和”上传”(Upload)。”下载” 文件就是从远程主机拷贝文件至自己的计算机上;”上传”文件就是将文件从自己的计算机中拷贝至远程主机上。用 Internet 语言来说,用户可通过客户机程序向(从)远程主机上传(下载)文件。

FTP 的工作模式
Port 模式(主动模式) FTP 客户端首先和服务器的 TCP 21 端口建立连接,用来发送命令,客户端需要接收数据的时候在这个通道上发送 PORT 命令。PORT 命令包含了客户端用什么端口接收数据。在传送数据的时候,服务器端通过自己的 TCP 20 端口连接至客户端的指定端口发送数据。FTP server 必须和客户端建立一个新的连接用来传送数据。Passive 模式(被动模式) 建立控制通道和 Standard 模式类似,但建立连接后发送 Pasv 命令。服务器收到 Pasv 命令后,打开一个临时端口(端口号大于 1023 小于 65535)并且通知客户端在这个端口上传送数据的请求,客户端连接 FTP 服务器此端口,然后 FTP 服务器将通过这个端口传送数据。
很多防火墙在设置的时候都是不允许接受外部发起的连接的,所以许多位于防火墙后或内网的FTP 服务器不支持 PASV 模式,因为客户端无法穿过防火墙打开 FTP 服务器的高端端口;而许多内网的客户端不能用 PORT 模式登陆 FTP 服务器,因为从服务器的 TCP 20 无法和内部网络的客户端建立一个新的连接,造成无法工作。
主动 FTP 对 FTP 服务器的管理有利,但对客户端的管理不利。因为 FTP 服务器企图与客户端的高位随机端口建立连接,而这个端口很有可能被客户端的防火墙阻塞掉。被动 FTP 对 FTP客户端的管理有利,但对服务器端的管理不利。因为客户端要与服务器端建立两个连接,其中一个连到一个高位随机端口,而这个端口很有可能被服务器端的防火墙阻塞掉。
vsftpd 是”very secure FTP daemon”的缩写,安全性是它的一个最大的特点。vsftpd 是一个UNIX 类操作系统上运行的服务器的名字,它可以运行在诸如 Linux、BSD、Solaris、 HP-UNIX等系统上面,是一个完全免费的、开发源代码的 ftp 服务器软件,支持很多其他的 FTP 服务器所不支持的特征。比如:非常高的安全性需求、带宽限制、良好的可伸缩性、可创建虚拟用户、支持 IPv6、速率高等。是一款在 Linux 发行版中最受推崇的 FTP 服务器程序。特点是小巧轻快,安全易用。在开源操作系统中常用的 FTPD 套件主要还有 ProFTPD、PureFTPd 和 wuftpd等

二、搭 建 ftp 服务

!!!注意!实验时一定要随时备份配置文件
cp /etc/vsftpd.conf{,.bak}
(1)安装 vsftpd(在服务器上操作)
apt -y install vsftpd
systemctl start vsftpd
ss -anptu |grep 21


(2)配置参数详解
1.默认配置:
1>允许匿名用户和本地用户登陆。
anonymous_enable=YES
local_enable=YES
2>匿名用户使用的登陆名为 ftp 或 anonymous,口令为空;匿名用户不能离开匿名用户家目录/var/ftp,且只能下载不能上传。
3>本地用户的登录名为本地用户名,口令为此本地用户的口令;本地用户可以在自 己家目录中进行读写操作;本地用户可以离开自家目录切换至有权限访问的其他目录,并在权限允许的情况下进行上传/下载。
write_enable=YES
4>写在文件/etc/vsftpd.ftpusers 中的本地用户禁止登陆。

2.配置文件格式:
vsftpd.conf 的内容非常单纯,每一行即为一项设定。若是空白行或是开头为#的一行,将会被忽略。内容的格式只有一种,如所示option=value要注意的是,等号两边不能加空白。

3.匿名用户(anonymous)设置
anonymous_enable=YES/NO(YES)
控制是否允许匿名用户登入,YES 为允许匿名登入,NO 为不允许。默认值为YES。
write_enable=YES/NO(YES)
是否允许登陆用户有写权限。属于全局设置,默认值为 YES。
no_anon_password=YES/NO(NO)
若是启动这项功能,则使用匿名登入时,不会询问密码。默认值为 NO。
ftp_username=ftp
定义匿名登入的使用者名称。默认值为 ftp。
anon_root=/var/ftp
使用匿名登入时,所登入的目录。默认值为/var/ftp。注意 ftp 目录不能是 777 的权限属性,即匿名用户的家目录不能有 777 的权限。
anon_upload_enable=YES/NO(NO)
如果设为 YES,则允许匿名登入者有上传文件(非目录)的权限,只有在 write_enable=YES 时,此项才有效。当然,匿名用户必须要有对上层目录的写入权。默认值为 NO。
anon_world_readable_only=YES/NO(YES)
如果设为 YES,则允许匿名登入者下载可阅读的档案(可以下载到本机阅读,不能直接在 FTP服务器中打开阅读)。默认值为 YES。
anon_mkdir_write_enable=YES/NO(NO)
如果设为 YES,则允许匿名登入者有新增目录的权限,只有在 write_enable=YES 时,此项才有效。当然,匿名用户必须要有对上层目录的写入权。默认值为 NO。
anon_other_write_enable=YES/NO(NO)
如果设为 YES,则允许匿名登入者更多于上传或者建立目录之外的权限,譬如删除或者重命名。
(如果 anon_upload_enable=NO,则匿名用户不能上传文件,但可以删除或者重命名已经存在的文件;如果 anon_mkdir_write_enable=NO,则匿名用户不能上传或者新建文件夹,但可以删除或者重命名已经存在的文件夹。)默认值为 NO。
chown_uploads=YES/NO(NO)
设置是否改变匿名用户上传文件(非目录)的属主。默认值为 NO。
chown_username=username
设置匿名用户上传文件(非目录)的属主名。建议不要设置为 root。
anon_umask=077
设置匿名登入者新增或上传档案时的 umask 值。默认值为 077,则新建档案的对应权限为 700。
deny_email_enable=YES/NO(NO)
若是启动这项功能,则必须提供一个档案/etc/vsftpd/banner_emails,内容为 email address。若是使用匿名登入,则会要求输入 email address,若输入的 email address 在此档案内,则不允许进入。默认值为 NO。
banned_email_file=/etc/vsftpd/banner_emails
此文件用来输入 email address,只有在 deny_email_enable=YES 时,才会使用到此档案。若是使用匿名登入,则会要求输入 email address,若输入的 email address 在此档案内,则不允许进入。

4.本地用户设置

local_enable=YES/NO(YES)
控制是否允许本地用户登入,YES 为允许本地用户登入,NO 为不允许。默认值为 YES。
local_root=/home/username
当本地用户登入时,将被更换到定义的目录下。默认值为各用户的家目录。
write_enable=YES/NO(YES)
是否允许登陆用户有写权限。属于全局设置,默认值为 YES。
local_umask=022
本地用户新增档案时的 umask 值。默认值为 077。
file_open_mode=0755
本地用户上传档案后的档案权限,与 chmod 所使用的数值相同。默认值为 0666。

5.欢迎语设置
dirmessage_enable=YES/NO(YES)
如果启动这个选项,那么使用者第一次进入一个目录时,会检查该目录下是否有.message 这个档案,如果有,则会出现此档案的内容,通常这个档案会放置欢迎话语,或是对该目录的说明。默认值为开启。
message_file=.message
设置目录消息文件,可将要显示的信息写入该文件。默认值为.message。
banner_file=/etc/vsftpd/banner
当使用者登入时,会显示此设定所在的档案内容,通常为欢迎话语或是说明。默认值为无。如果欢迎信息较多,则使用该配置项。
ftpd_banner=Welcome to BOB’s FTP server
这里用来定义欢迎话语的字符串,banner_file 是档案的形式,而 ftpd_banner 则是字符串的形式。预设为无。

6.控制用户是否允许切换到上级目录
在默认配置下,本地用户登入 FTP 后可以使用 cd 命令切换到其他目录,这样会对系统带来安全隐患。可以通过以下三条配置文件来控制用户切换目录。
chroot_list_enable=YES/NO(NO)
设置是否启用 chroot_list_file 配置项指定的用户列表文件。默认值为 NO。
chroot_list_file=/etc/vsftpd.chroot_list
用于指定用户列表文件,该文件用于控制哪些用户可以切换到用户家目录的上级目录。
chroot_local_user=YES/NO(NO)
用于指定用户列表文件中的用户是否允许切换到上级目录。默认值为 NO。
通过搭配能实现以下几种效果:
①当 chroot_list_enable=YES,chroot_local_user=YES 时,在/etc/vsftpd.chroot_list 文件中列出的用户,可以切换到其他目录;未在文件中列出的用户,不能切换到其他目录。
②当 chroot_list_enable=YES,chroot_local_user=NO 时,在/etc/vsftpd.chroot_list 文件中列出的用户,不能切换到其他目录;未在文件中列出的用户,可以切换到其他目录。
③当 chroot_list_enable=NO,chroot_local_user=YES 时,所有的用户均不能切换到其他目录。
④当 chroot_list_enable=NO,chroot_local_user=NO 时,所有的用户均可以切换到其他目录。

7.数据传输模式设置
FTP 在传输数据时,可以使用二进制方式,也可以使用 ASCII 模式来上传或下载数据。
ascii_upload_enable=YES/NO(NO)
设置是否启用 ASCII 模式上传数据。默认值为 NO。
ascii_download_enable=YES/NO(NO)
设置是否启用 ASCII 模式下载数据。默认值为 NO。

8.访问控制设置
两种控制方式:一种控制主机访问,另一种控制用户访问。
①控制主机访问:
tcp_wrappers=YES/NO(YES)
设置 vsftpd 是否与 tcp wrapper 相结合来进行主机的访问控制。默认值为 YES。如果启用,则vsftpd 服务器会检查/etc/hosts.allow 和/etc/hosts.deny 中的设置,来决定请求连接的主机,是否允许访问该 FTP 服务器。这两个文件可以起到简易的防火墙功能。
比如:若要仅允许 192.168.0.1—192.168.0.254 的用户可以连接 FTP 服务器,则在/etc/hosts. allow 文件中添加以下内容:
vsftpd:192.168.0. :allow
all:all :deny
②控制用户访问:
对于用户的访问控制可以通过/etc 目录下的 vsftpd.user_list 和 ftpusers 文件来实现。
userlist_file=/etc/vsftpd.user_list
控制用户访问 FTP 的文件,里面写着用户名称。一个用户名称一行。
userlist_enable=YES/NO(NO)
是否启用 vsftpd.user_list 文件。
userlist_deny=YES/NO(YES)
决定 vsftpd.user_list 文件中的用户是否能够访问 FTP 服务器。若设置为 YES,则 vsftpd.user_list 文件中的用户不允许访问 FTP,若设置为 NO,则只有 vsftpd.user_list 文件中的用户才能访
问 FTP。
/etc/vsftpd/ftpusers 文件专门用于定义不允许访问 FTP 服务器的用户列表(注意:如果 userlist_enable=YES,userlist_deny=NO,此时如果在 vsftpd.user_list 和 ftpusers 中都有某个用户时,那么这个用户是不能够访问 FTP 的,即 ftpusers 的优先级要高)。默认情况下 vsftpd.user_list 和ftpusers,这两个文件已经预设置了一些不允许访问 FTP 服务器的系统内部账户。如果系统没有这两个文件,那么新建这两个文件,将用户添加进去即可。

9.访问速率设置
anon_max_rate=0
设置匿名登入者使用的最大传输速度,单位为 B/s,0 表示不限制速度。默认值为 0。
local_max_rate=0
本地用户使用的最大传输速度,单位为 B/s,0 表示不限制速度。预设值为 0。

10.超时时间设置
accept_timeout=60
设置建立 FTP 连接的超时时间,单位为秒。默认值为 60。
connect_timeout=60
PORT 方式下建立数据连接的超时时间,单位为秒。默认值为 60。
data_connection_timeout=120
设置建立 FTP 数据连接的超时时间,单位为秒。默认值为 120。
idle_session_timeout=300
设置多长时间不对 FTP 服务器进行任何操作,则断开该 FTP 连接,单位为秒。默认值为 300 。

11.日志文件设置
xferlog_enable= YES/NO(YES)
是否启用上传/下载日志记录。如果启用,则上传与下载的信息将被完整纪录在 xferlog_file 所定义的档案中。预设为开启。
xferlog_file=/var/log/vsftpd.log
设置日志文件名和路径,默认值为/var/log/vsftpd.log。
xferlog_std_format=YES/NO(NO)
如果启用,则日志文件将会写成 xferlog 的标准格式,如同 wu-ftpd 一般。默认值为关闭。
log_ftp_protocol=YES|NO(NO)
如果启用此选项,所有的 FTP 请求和响应都会被记录到日志中,默认日志文件在/var/log/vsftpd.log。启用此选项时,xferlog_std_format 不能被激活。这个选项有助于调试。默认值为 NO。

12.定义用户配置文件
在 vsftpd 中,可以通过定义用户配置文件来实现不同的用户使用不同的配置。
user_config_dir=/etc/vsftpd/userconf
设置用户配置文件所在的目录。当设置了该配置项后,用户登陆服务器后,系统就会到/etc/vsftpd/userconf 目录下,读取与当前用户名相同的文件,并根据文件中的配置命令,对当前用户进行更进一步的配置。
例如:定义 user_config_dir=/etc/vsftpd/userconf,且主机上有使用者test1,test2,那么我们就在 user_config_dir 的目录新增文件名为 test1 和 test2 两个文件。若是 test1 登入,则会读取 user_config_dir 下的 test1 这个档案内的设定。默认值为无。利用用户配置文件,可以实现对不同用户进行访问速度的控制,在各用户配置文件中定义 local_max_rate=XX,即可。

13.FTP 的工作方式与端口设置
FTP 有两种工作方式:PORT FTP(主动模式)和 PASV FTP(被动模式)
listen_port=21
设置 FTP 服务器建立连接所监听的端口,默认值为 21。
connect_from_port_20=YES/NO
指定 FTP 使用 20 端口进行数据传输,默认值为 YES。
ftp_data_port=20
设置在 PORT 方式下,FTP 数据连接使用的端口,默认值为 20。
pasv_enable=YES/NO(YES)
若设置为 YES,则使用 PASV 工作模式;若设置为 NO,则使用 PORT 模式。默认值为 YES,即使用 PASV 工作模式。
pasv_max_port=0
在 PASV 工作模式下,数据连接可以使用的端口范围的最大端口,0 表示任意端口。默认值为0。
pasv_min_port=0
在 PASV 工作模式下,数据连接可以使用的端口范围的最小端口,0 表示任意端口。默认值为0。

14.与连接相关的设置
listen=YES/NO(YES)
设置 vsftpd 服务器是否以 standalone 模式运行。以 standalone 模式运行是一种较好的方式,此时 listen 必须设置为 YES,此为默认值。建议不要更改,有很多与服务器运行相关的配置命令,需要在此模式下才有效。若设置为 NO,则 vsftpd 不是以独立的服务运行,要受到 xinetd服务的管控,功能上会受到限制。
max_clients=0
设置 vsftpd 允许的最大连接数,默认值为 0,表示不受限制。若设置为 100 时,则同时允许有 100 个连接,超出的将被拒绝。只有在 standalone 模式运行才有效。
max_per_ip=0
设置每个 IP 允许与 FTP 服务器同时建立连接的数目。默认值为 0,表示不受限制。只有在 standalone 模式运行才有效。
listen_address=IP 地址
设置 FTP 服务器在指定的 IP 地址上侦听用户的 FTP 请求。若不设置,则对服务器绑定的所有IP 地址进行侦听。只有在 standalone 模式运行才有效。
setproctitle_enable=YES/NO(NO)
设置每个与 FTP 服务器的连接,是否以不同的进程表现出来。默认值为 NO,此时使用 ps aux|grep ftp 只会有一个 vsftpd 的进程。若设置为 YES,则每个连接都会有一个 vsftpd 的进程。

15.虚拟用户设置
虚拟用户使用 PAM 认证方式。
pam_service_name=vsftpd
设置 PAM 使用的名称,默认值为/etc/pam.d/vsftpd。
guest_enable= YES/NO(NO)
启用虚拟用户。默认值为 NO。
guest_username=ftp
这里用来映射虚拟用户。默认值为 ftp。
virtual_use_local_privs=YES/NO(NO)
当该参数激活(YES)时,虚拟用户使用与本地用户相同的权限。当此参数关闭(NO)时,虚拟用户使用与匿名用户相同的权限。默认情况下此参数是关闭的(NO)。

16.其他设置
text_userdb_names= YES/NO(NO)
设置在执行 ls –la 之类的命令时,是显示 UID、GID 还是显示出具体的用户名和组名。默认值为 NO,即以 UID 和 GID 方式显示。若希望显示用户名和组名,则设置为 YES。
ls_recurse_enable=YES/NO(NO)
若是启用此功能,则允许登入者使用 ls –R(可以查看当前目录下子目录中的文件)这个指令。
默认值为 NO。
hide_ids=YES/NO(NO)
如果启用此功能,所有档案的拥有者与群组都为 ftp,也就是使用者登入使用 ls -al 之类的指令,所看到的档案拥有者跟群组均为 ftp。默认值为关闭。
download_enable=YES/NO(YES)
如果设置为 NO,所有的文件都不能下载到本地,文件夹不受影响。默认值为 YES。

(3)重启 vsftpd 服务
修改配置文件
vim /etc/vsftpd.conf
pam_service_name=ftp #uos 操作系统用户需要更改成 ftp
重启服务并加入开机自启
systemctl restart vsftpd
systemctl enable vsftpd


(4)创建 ftp 用户及该用户的 ftp 目录
mkdir /home/uosftp
useradd -d /home/uosftp uosftp
passwd uosftp
mkdir /home/uosftp/ftp
chmod 777 -R /home/uosftp/ftp
usermod -s /sbin/nologin uosftp


(5)登录 ftp 的方式
1、本机验证
在 uos1 上
安装 lftp 命令,apt-get install lftp
lftp uosftp@127.0.0.1
密码:
lftp 用户名@ftp 服务器 ip
2、客户端验证
在 uos2 上
客户端安装登陆
apt -y install lftp ftp
ftp windows linux unix 都能用
lftp linux 专用,支持 tab 补全
客户端登陆 ftp 服务器
lftp uosftp@192.168.200.201
口令:
lftp uosftp@192.168.200.201:~> ls
drwxrwxrwx 2 0 0 4096 Jun 08 21:30 ftp

(6)拒绝用户用 email 方式连接 ftp
有效的防止匿名用户通过 email 方式连接
vim /etc/vsftpd.conf #修改配置文件去掉注释
deny_email_enable=YES # (default follows)
banned_email_file=/etc/vsftpd/banned_emails

三、ftp 配置实战

(1)匿名用户下载
在 uos1 上
apt install -y vsftpd
vim /etc/vsftpd.conf #修改配置文件允许匿名访问
anonymous_enable=YES
重启 vsftpd 服务
systemctl restart vsftpd
touch /srv/ftp/test.txt #创建测试文件
匿名用户登录上来的位置,使用默认位置:/srv/ftp

在 uos2 上
ftp 192.168.200.201 #登录 ftp
Name (192.168.200.201:root): ftp
Password: //直接回车
ftp> ls
200 PORT command successful. Consider using PASV. 150 Here comes the directory listing. -rw-r–r– 1 0 0 0 Jun 08 21:42 test.txt #可以看到测试文件
ftp> get test.txt #下载文件到根下

(2)匿名用户上传
在 uos1 上面
vim /etc/vsftpd.conf
anonymous_enable=YES
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
systemctl restart vsftpd
mkdir /srv/ftp/pub #创建上传目录
chmod 777 /srv/ftp/pub #更改权限
chown ftp:ftp /srv/ftp/pub/

在 uos2 上
touch 1.sh #创建上传文件
ftp 192.168.200.201
Name (192.168.200.201:root): ftp
Password:
ftp> cd pub
ftp> put 1.sh #上传文件

(3)用户访问
在 uos1 上
创建测试用户
useradd -m -s /bin/bash user1
useradd -m -s /bin/bash user2
echo \”user1:123456\” |chpasswd
echo \”user2:123456\” |chpasswd
vim /etc/vsftpd.conf #修改配置文件以下选项
anonymous_enable=NO
切记将以下配置文件内容注释掉
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
systemctl restart vsftpd

在 uos2 上
登录测试
ftp 192.168.200.201
Name (192.168.200.201:root): user1
Password:
ftp> put 1.sh
ftp> ls

(4)锁定用户登录目录
在 uos1 上
useradd uosftp1 -g uosftp -d /home/uosftp
useradd uosftp2 -g uosftp -d /home/uosftp
passwd uosftp1
passwd uosftp2
chmod 777 -R /home/uosftp/ftp
usermod -s /sbin/nologin uosftp1
usermod -s /sbin/nologin uosftp2
touch /etc/vsftpd.chroot_list
vim /etc/vsftpd.conf
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
echo uosftp1 > /etc/vsftpd.chroot_list
systemctl restart vsftpd

客户端测试前最后彻底退出重连一次,使用 uosftp2 登录将被锁定目录,uosftp1 不被锁定

(5)限制用户登录
在 uos1 上
cat /etc/pam.d/vsftpd #显示/etc/ftpusers 中的用户会被 pam 模块 deny
echo user1 >> /etc/ftpusers #无需重启服务,pam 立即生效,user1 在任何客户端都不能登录
echo user2 >> /etc/vsftpd.user_list #没有此文件就创建
vim /etc/vsftpd.conf #添加以下内容
userlist_enable=YES
userlist_deny=NO
如果 userlist_deny=NO,则只有/etc/vsftpd.user_list 中的用户可以登录
systemctl restart vsftpd
客户端上 user2 将不能登录

vim /etc/vsftpd/vsftpd.conf
userlist_deny=YES #修改
systemctl restart vsftpd
客户端只有 user2 可以登录

echo “vsftpd:192.168.200.202” >> /etc/hosts.deny
vim /etc/vsftpd.conf
tcp_wrappers=YES
systemctl restart vsftpd
uos2 上所有用户都不能登录,其他主机的客户端可以登录

(6)虚拟用户
mkdir /home/vmftp
useradd vmftp -d /home/vmftp -s /bin/false #建立虚拟用户对应的系统用户 vmftp
chown vmftp:vmftp /home/vmftp #授权属主和属组都是 vmftp

在/home/vmftp 目录下建立 3 个子目录,分别为:
uos1
uos2
uos3

创建虚拟账户和密码的文本文件,奇数行为账户名、偶数行为密码,多个用户就写多组,中间不能有空行和空格
vim /etc/loguser.txt
vmftp1
vmftp1
vmftp2
vmftp2
vmftp3
vmftp3

生成数据库
apt inatall db5.3-util

关于软件资源类分享的免责声明:
本站为个人博客非盈利性站点,所有软件信息均来自网络,所有资源仅供学习参考研究目的,并未做任何贩卖软件信息等行为,不存在任何商业目的及用途。
根据《计算机软件保护条例》第十七条规定“为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬。"
您需知晓本站所有分享内容资源均来源于网络,仅供用户交流学习与研究使用,版权归属原版权方所有,版权争议与本站无关,用户本人下载后不能用作商业或非法用途,需在24个小时之内从您的电脑中彻底删除上述内容,否则后果均由用户承担责任。
如果您访问和下载此文件,表示您同意只将此文件用于参考、学习而非其他用途,否则一切后果请您自行承担,如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇