vsftp相关

38   /   0   /   0   /   0   /   发布于 1年前
### **VSFTP 概述** FTP是File Transfer Protocol(文件传输协议)的英文简称,用于Internet上的文件的双向传输。使用 FTP 来传输时,是具有一定程度的危险性, 因为数据在因特网上面是完全没有受到保护的明文传输方式! ### **VSFTP 安全特性** * vsftp 程序的运行者一般是普通用户,降低了相对应进程的权限,提高了安全性 * 任何需要执行较高权限的指令都需要上层程序许可 * ftp 所需要使用的绝大多数命令都被整合到了 vsftp 中,基本不需要系统额外提供命令 * 拥有 chroot 功能,可以改变用户的根目录,限制用户只能在自己的家目录 ### **VSFTP 连接类型** * 控制连接(持续连接) → TCP 21(命令信道) → 用户收发FTP命令 * 数据连接(按需连接) → TCP 20(数据信道) → 用于上传下载数据 ### **VSFTP 工作模式** **主动模式(port):** * FTP 客户端首先和服务器的 TCP 21 端口建立连接;用来发送命令, * 客户端需要接收数据的时候在这个通道上发送 PORT 命令。PORT 命令包含了客户端用什么端口接收数据。 * 在传送数据的时候,服务器端通过自己的 TCP 20 端口连接至客户端的指定端口发送数据。 * FTP server 必须和客户端建立一个新的连接用来传送数据。 **被动模式(passive):** * FTP 客户端首先和服务器的 TCP 21 端口建立连接,用来建立控制通道发送命令, * 但建立连接后客户端发送 Pasv 命令。 * 服务器收到 Pasv 命令后,打开一个临时端口(端口大于 1023小于 65535)并且通知客户端在这个端口上传送数据的请求; * 客户端连接 FTP 服务器的临时端口,然后 FTP 服务器将通过这个端口传输数据。. * 注意:由于VSFTP的被动模式是随机端口进行数据传输,所以在设置防火墙时需要刻意放行–>这里一定要放心vsftp的服务。 ### **VSFTP 传输模式** * Binary模式:不对数据进行任何处理,适合进行可执行文件、压缩文件、图片等 * ASCII模式:进行文本传输时,自动适应目标操作系统的结束符,如回车符等 * Linux的红帽发行版中VSFTP默认采用的是Binary模式,这样能保证绝大多数文件传输后能正常使用 * 切换方式:在ftp>提示符下输入ascii即转换到ACSII方式,输入bin,即转换到Binary方式。 ### **VSFTP 软件信息** * 服务端软件名:vsftpd * 客户端软件名:ftp * 服务名:vsftpd * 端口号:20、21、指定范围内随机端口 * 配置文件:/etc/vsftpd/vsftpd.conf ### **VSFTP 登录验证方式** **匿名用户验证:** * 用户账号名称:ftp或anonymous * 用户账号密码:无密码 * 工作目录:/var/ftp * 默认权限:默认可下载不可上传,上传权限由两部分组成(主配置文件和文件系统) **本地用户验证:** * 用户账号名称:本地用户(/etc/passwd) * 用户账号密码:用户密码(/etc/shadow) * 工作目录:登录用户的宿主目录 * 权限:最大权限(drwx------) **虚拟(virtual)用户验证:** * 创建虚拟用户用来代替本地用户,减少本地用户曝光率 * 使用本地用户作为虚拟用户的映射用户,为虚拟用户提供工作目录和权限控制 * 能够设置严格的权限(为每一个用户生成单独的配置文件) ```text 客户端----->匿名用户登录---->匿名账号:ftp或者是anonymous 密码是空密码 默认的家目录:/var/ftp/目录下 客户端----->本地用户登录---->本地登录涉及到:普通用户和普通用户的家目录 /etc/passwd /etc/shadow文件 客户端----->虚拟用户登录---->这个是最复杂的; 需要人为创建,生成数据库文件; 找一个系统用户作为虚拟用户的映射用户,借助系统用户的家目录作为默认的登陆点,/home下的其中一个用户名 每一个虚拟用户的权限都可以单独指定的 ``` **虚拟用户的对比图:** ```text FTP_client--->FTP_server /etc/pam.d/vsftpd 匿名用户:/etc/passwd 本地用户:/etc/passwd和/etc/shadow /etc/pam.d/vsftpd.pam 虚拟的用户 执行创建 用户、密码文件 ``` ### **VSFTP 配置文件** **主要文件目录:** * 主程序:/usr/sbin/vsftp * 启动脚本文件:/etc/rc.d/init.d/vsftpd * 系统服务单元目录:/usr/lib/systemd/system/vsftpd.service * 主配置文件:/etc/vsftp/vsftp.conf * /etc/pam.d/vsftpd:PAM认证文件(此文件中file=/etc/vsftpd/ftpusers字段,指明阻止访问的用户来自该文件中的用户) * /etc/vsftpd/ftpusers:禁止使用vsftpd的用户列表文件【黑名单】 * /etc/vsftpd/user\_list:禁止或允许使用vsftpd的用户列表文件,这个文件中指定的用户缺省情况(即在/etc/vsftpd/vsftpd.conf中设置userlist\_deny=YES)下也不能访问FTP服务器,在设置了userlist\_deny=NO时,仅允许user\_list中指定的用户访问FTP服务器 * 匿名用户数据根目录:/var/ftp * 匿名用户的下载上传目录:/var/ftp/pub此目录需赋权根chmod 1777 pub(1为特殊权限,使上载后无法删除) * vsFTP的日志文件:/etc/logrotate.d/vsftpd.log ### **匿名用户设置:** ```text 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 在此档案内,则不允许进入。 ``` ### **本地用户设置:** ```text 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。 ``` ### **虚拟用户设置:** ```text 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)。 ``` ### **欢迎语设置:** ```text 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 则是字符串的形式。预设为无。 ``` ### **控制用户是否允许切换到上级目录:** 在默认配置下,本地用户登入FTP后可以使用cd命令切换到其他目录,这样会对系统带来安全隐患。可以通过以下三条配置文件来控制用户切换目录。 ```text chroot_list_enable=YES/NO(NO) #设置是否启用chroot_list_file配置项指定的用户列表文件。默认值为NO。 chroot_list_file=/etc/vsftpd.chroot_list #用于指定用户列表文件,该文件用于控制哪些用户可以切换到用户家目录的上级目录。 chroot_local_user=YES/NO(NO) #用于指定用户列表文件中的用户是否允许切换到上级目录。默认值为NO。 通过搭配能实现以下几种效果: 1.当chroot_list_enable=YES,chroot_local_user=YES时,在/etc/vsftpd.chroot_list文件中列出的用户,可以切换到其他目录;未在文件中列出的用户,不能切换到其他目录。 2.当chroot_list_enable=YES,chroot_local_user=NO时,在/etc/vsftpd.chroot_list文件中列出的用户,不能切换到其他目录;未在文件中列出的用户,可以切换到其他目录。 3.当chroot_list_enable=NO,chroot_local_user=YES时,所有的用户均不能切换到其他目录。 4.当chroot_list_enable=NO,chroot_local_user=NO时,所有的用户均可以切换到其他目录。 ``` ### **数据传输模式设置:** FTP在传输数据时,可以使用二进制方式,也可以使用ASCII模式来上传或下载数据。 ```text ascii_upload_enable=YES/NO(NO) #设置是否启用ASCII 模式上传数据。默认值为NO。 ascii_download_enable=YES/NO(NO)#设置是否启用ASCII 模式下载数据。默认值为NO。 ``` ### **访问控制设置:** **两种控制方式:**一种控制主机访问,另一种控制用户访问。 **控制主机访问:** ```text 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文件来实现。 ```text 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服务器的系统内部账户。如果系统没有这两个文件,那么新建这两个文件,将用户添加进去即可。 ``` ### **访问速率设置:** ```text anon_max_rate=0 #设置匿名登入者使用的最大传输速度,单位为B/s,0 表示不限制速度。默认值为0。 local_max_rate=0 #本地用户使用的最大传输速度,单位为B/s,0 表示不限制速度。预设值为0。 ``` ### **超时时间设置:** ```text accept_timeout=60 #设置建立FTP连接的超时时间,单位为秒。默认值为60。 connect_timeout=60 #PORT 方式下建立数据连接的超时时间,单位为秒。默认值为60。 data_connection_timeout=120 #设置建立FTP数据连接的超时时间,单位为秒。默认值为120。 idle_session_timeout=300 #设置多长时间不对FTP服务器进行任何操作,则断开该FTP连接,单位为秒。默认值为300 。 ``` ### **日志文件设置:** ```text 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。 ``` ### **定义用户配置文件:** 在vsftpd中,可以通过定义用户配置文件来实现不同的用户使用不同的配置。 ```text 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,即可。 ``` ### **FTP的工作方式与端口设置:** FTP有两种工作方式:PORT FTP(主动模式)和PASV FTP(被动模式) ```text 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。 ``` ### **与连接相关的设置:** ```text 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的进程。 ``` ### **其他设置:** ```text 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。 ``` ### **VSFTP 案例** ### **匿名用户常用配置** ```text vim /etc/vsftpd/vsftpd.conf anonymous_enable=YES #启用匿名访问 anon_umask=022 #匿名用户所上传文件的权限掩码 anon_root=/var/ftp #匿名用户的 FTP 根目录 anon_upload_enable=YES #允许上传文件 anon_mkdir_write_enable=YES #允许创建目录 anon_other_write_enable=YES #开放其他写入权(删除、覆盖、重命名) anon_max_rate=0 #限制最大传输速率(0 为不限速,单位:bytes/秒) ``` ### **本地用户常用配置** ```text vim /etc/vsftpd/vsftpd.conf local_enable=YES #是否启用本地系统用户 local_umask=022 #本地用户所上传文件的权限掩码 local_root=/var/ftp #设置本地用户的 FTP 根目录 chroot_local_user=YES #是否将用户禁锢在主目录 local_max_rate=0 #限制最大传输速率 ftpd_banner=Welcome to blah FTP service #用户登录时显示的欢迎信息 userlist_enable=YES & userlist_deny=YES #禁止/etc/vsftpd/user_list 文件中出现的用户名登录 userlist_enable=YES & userlist_deny=NO #仅允许/etc/vsftpd/user_list 文件中出现的用户名登录 配置文件:ftpusers #禁止/etc/vsftpd/ftpusers 文件中出现的用户名登录,权限比 user_list 更高,即时生效 ``` ### **匿名用户常用配置** ```text #首先,建立虚拟用户的数据库文件 #这里需要注意:奇数行是名字,偶数行是密码 [root@node0 ~]# vim /etc/vsftpd/vsftpd.user liangjiawei01 123456 liangjiawei02 123456 liangjiawei03 123456 #然后把用户的数据库文件转化成db文件,并且hash加密 [root@node0 ~]# db_load -T -t hash -f /etc/vsftpd/vsftpd.user /etc/vsftpd/vsftpd.db #一定要把这个文件的权限改成600 [root@node0 ~]# chmod 600 /etc/vsftpd/vsftpd.db #创建虚拟用户登录的家目录-->这个也是虚拟用户的映射用户 [root@node0 ~]# useradd -s /sbin/nologin virtual #让虚拟用户的家目录有读权限 [root@node0 ~]# chmod o+r /home/virtual/ #建立一份虚拟用户的pam认证文件; [root@node0 ~]# cp -a /etc/pam.d/vsftpd /etc/pam.d/vsftpd.pam #然后修改一下pam认证文件的内容 [root@node0 ~]# vim /etc/pam.d/vsftpd.pam #%PAM-1. auth required pam_userdb.so db=/etc/vsftpd/vsftpd account required pam_userdb.so db=/etc/vsftpd/vsftpd #去到配置文件conf中添加支持的配置 [root@node0 ~]# vim /etc/vsftpd/vsftpd.conf pam_service_name=vsftpd.pam #这一行要修改 guest_enable=YES #下面这些直接添加新得字段 guest_username=virtual user_config_dir=/etc/vsftpd/dir #创建指定的虚拟用户的配置文件 [root@node0 ~]# mkdir /etc/vsftpd/dir #注:做虚拟用户配置文件设置时,将主配置文件中自定义的匿名用户相关设置注释掉。 #指定01可以上传文件 [root@node0 ~]# vim /etc/vsftpd/dir/liangjiawei0.conf anon_upload_enable=YES #指定02可以创建 [root@node0 ~]# vim /etc/vsftpd/dir/liangjiawei02.conf anon_mkdir_write_enable=YES #指定03可以上传和下载 [root@node0 ~]# vim /etc/vsftpd/dir/liangjiawei03.conf anon_upload_enable=YES anon_other_write_enable=YES #重启验证 [root@node0 ~]# systemctl restart vsftpd #客户端用虚拟用户登录 [root@Node1 ~]# ftp 192.168.75.130 Connected to 192.168.75.130 (192.168.75.130). 220 (vsFTPd 3.0.2) Name (192.168.75.130:root): liangjiawei01 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. #到这里实验就成功了 ``` **ftp数字代码意义:** ```text 110 重新启动标记应答 120 服务在多久时间内ready 125 数据链路埠开启,准备传送 150 文件状态正常,开启数据连接端口 200 命令执行成功 202 命令执行失败 211 系统状态或是系统求助响应 212 目录的状态 213 文件的状态 214 求助的讯息 215 名称系统类型 220 新的联机服务ready 221 服务的控制连接已关闭,可以注销 225 数据连接开启,但无传输动作 226 关闭数据端口,请求的文件操作成功 227 进入passive mode 230 使用者登入 250 请求的文件操作完成 257 显示目前的路径名称 331 用户名称正确,需要密码 332 登入时需要账号信息 350 请求的操作需要进一步的命令 421 无法提供服务,关闭控制连接 425 无法开启数据链路 426 关闭联机,终止传输 450 请求的操作未执行 451 命令终止,有本地的错误 452 未执行的命令,磁盘空间不足 500 格式错误,无法识别命令 501 参数语法错误 502 命令执行失败 503 命令顺序错误 504 命令所接的参数不正确 530 未登入 532 储存文件需要账户登入 550 未执行请求的操作 551 请求的命令终止,类型未知 552 请求的文件终止,储存位溢出 553 未执行请求的命令,名称不正确 ```
  • 共 0 条回复
  • 需要登录 后方可回复, 如果你还没有账号请点击这里注册
梦初醒 茅塞开
  • 不经他人苦,莫劝他人善。
  • 能量足,心态稳,温和坚定可以忍。
  • 辛苦决定不了收入,真正决定收入的只有一个,就是不可替代性。
  • 要么忙于生存,要么赶紧去死!
  • 内心强大到混蛋,比什么都好!
  • 规范流程比制定制度更重要!
  • 立志需要高远,但不能急功近利;
    行动需要迅速,却不可贪图速成。
  • 不要强求人品,要设计高效的机制。
  • 你弱的时候,身边都是鸡零狗碎;
    你强的时候,身边都是风和日丽。
  • 机制比人品更可靠,契约比感情更可靠。
  • 合作不意味着没有冲突,却是控制冲突的最好方法。
  • 误解是人生常态,理解本是稀缺的例外。
  • 成功和不成功之间,只差一次坚持!
  • 祁连卧北雪,大漠壮雄关。
  • 利益顺序,过程公开,机会均等,付出回报。