这篇文章主要介绍为VSFTPD创建虚拟用户脚本,有需要的朋友可以参考下。

脚本内容如下:


1. #!/bin/bash
2. #Date:2018-5-20 13:14:00
3. #Author Blog:
4. # https://www.yangxingzhen.com
5. # https://www.i7ti.cn
6. #Author WeChat:
7. # 微信公众号:小柒博客
8. #Author mirrors site:
9. # https://mirrors.yangxingzhen.com
10. #About the Author
11. # BY:YangXingZhen
12. # Mail:xingzhen.yang@yangxingzhen.com
13. # QQ:675583110
14. #Create vsftpd virtual user(支持创建单个用户跟多个用户)
15. #This script applies to Centos 6.x and Centos 7.x
16.
17. SYS_VERSION=$(awk -F.'{print $1}'/etc/redhat-release |awk '{print $NF}')
18. FTP_DIR=/etc/vsftpd
19. PASSWD=yangxingzhen.com
20. PAM_DIR=/etc/pam.d
21. FTP_HOME=/home/ftpuser
22. USER=$*
23.
24. if[ $# -eq 0 ];then
25. echo -e "\033[32m Please enter the username that needs to be create \033[0m"
26. echo -e "\033[33m Usage: sh $0 {admin|admin123|help} \033[0m"
27. exit0
28. elif[[ $USER =="help"]];then
29. echo -e "\033[32m Please enter the username that needs to be create \033[0m"
30. echo -e "\033[33m Usage: sh $0 {admin|admin123|help} \033[0m"
31. exit0
32. fi
33.
34. if[ $SYS_VERSION -eq 7];then
35. echo -e "\033[32m Your system version is CentOS `awk '{print $(NF-1)}' /etc/redhat-release` \033[0m"
36. if[!-f $FTP_DIR/vsftpd.conf ];then
37. yum -y install vsftpd pam* libdb-utils libdb*
38. else
39. echo -e "\033[33m This software has been installed \033[0m"
40. fi
41. else
42. echo -e "\033[32m Your system version is CentOS `awk '{print $(NF-1)}' /etc/redhat-release` \033[0m"
43. if[!-f $FTP_DIR/vsftpd.conf ];then
44. yum -y install vsftpd db4*
45. else
46. echo -e "\033[33m This software has been installed \033[0m"
47. fi
48. fi
49.
50. if[!-f $FTP_DIR/ftpusers.txt ];then
51. touch $FTP_DIR/ftpusers.txt
52. fi
53.
54. for i in`echo $USER`
55. do
56. grep -qw "${i}" $FTP_DIR/ftpusers.txt
57. if[ $?-ne 0];then
58. cat >>$FTP_DIR/ftpusers.txt <<EOF
59. $i
60. $PASSWD
61. EOF
62. else
63. echo -e "\033[34m user $i already exists,Please reenter the username \033[0m"
64. fi
65. done
66.
67. db_load -T -t hash -f $FTP_DIR/ftpusers.txt $FTP_DIR/vsftpd_login.db
68. chmod 700 $FTP_DIR/vsftpd_login.db
69.
70. if[!-f $PAM_DIR/vsftpd.bak ];then
71. cp $PAM_DIR/vsftpd $PAM_DIR/vsftpd.bak
72. cat >$PAM_DIR/vsftpd <<EOF
73. auth sufficient /lib64/security/pam_userdb.so db=$FTP_DIR/vsftpd_login
74. account sufficient /lib64/security/pam_userdb.so db=$FTP_DIR/vsftpd_login
75. EOF
76. fi
77.
78. if[`cat /etc/passwd |grep -wc ftpuser`-eq 0];then
79. #useradd -s /sbin/nologin ftpuser >/dev/null 2>&1
80. useradd -s /sbin/nologin ftpuser
81. fi
82.
83. if[!-f $FTP_DIR/vsftpd.conf.bak ];then
84. \cp $FTP_DIR/vsftpd.conf $FTP_DIR/vsftpd.conf.bak
85. fi
86.
87. NUM=$(grep -wc "guest_enable" $FTP_DIR/vsftpd.conf)
88. if[ $NUM -eq 0];then
89. cat >$FTP_DIR/vsftpd.conf <<EOF
90. #禁止匿名用户访问
91. anonymous_enable=NO
92. #允许本地用户登录FTP
93. local_enable=YES
94. #允许登陆用户有写权限
95. write_enable=YES
96. #设置本地用户的文件生成掩码为022,默认是077
97. local_umask=022
98. #激活目录信息,当远程用户更改目录时,将出现提示信息
99. dirmessage_enable=YES
100. #启用上传和下载日志功能
101. xferlog_enable=YES
102. #启用FTP数据端口的连接请求
103. connect_from_port_20=YES
104. #日志文件名和路径,默认值为/var/log/vsftpd.log
105. xferlog_file=/var/log/vsftpd.log
106. #使用标准的ftpd xferlog日志文件格式
107. xferlog_std_format=YES
108. #启用ASCII模式上传数据。默认值为NO
109. ascii_upload_enable=YES
110. #启用ASCII模式下载数据。默认值为NO
111. ascii_download_enable=YES
112. #使vsftpd处于独立启动监听端口模式
113. listen=YES
114. #启用虚拟用户
115. guest_enable=YES
116. #指定访问用户名
117. guest_username=ftpuser
118. #设置PAM使用的名称,默认值为$PAM_DIR/vsftpd
119. pam_service_name=vsftpd
120. #设置用户配置文件所在的目录
121. user_config_dir=$FTP_DIR/vsftpd_user_conf
122. #虚拟用户使用与本地用户相同的权限
123. virtual_use_local_privs=YES
124. #指定用户列表文件中的用户是否允许切换到上级目录。默认值为NO
125. chroot_local_user=NO
126. #启用chroot_list_file配置项指定的用户列表文件。默认值为NO
127. chroot_list_enable=YES
128. #指定用户列表文件,该文件用于控制哪些用户可以切换到用户家目录的上级目录
129. chroot_list_file=$FTP_DIR/vsftpd.chroot_list
130. EOF
131. fi
132.
133. if[!-d $FTP_DIR/vsftpd_user_conf ];then
134. mkdir -p $FTP_DIR/vsftpd_user_conf
135. fi
136.
137. if[!-f $FTP_DIR/vsftpd.chroot_list ];then
138. touch $FTP_DIR/vsftpd.chroot_list
139. fi
140.
141. for q in`echo $USER`
142. do
143. grep -qw ${q} $FTP_DIR/vsftpd.chroot_list
144. if[ $?-ne 0];then
145. cat >>$FTP_DIR/vsftpd.chroot_list <<EOF
146. $q
147. EOF
148. fi
149. done
150.
151. for j in`echo $USER`
152. do
153. if[!-f $FTP_DIR/vsftpd_user_conf/$j ];then
154. cat >$FTP_DIR/vsftpd_user_conf/$j <<EOF
155. #指定用户的家目录
156. local_root=$FTP_HOME/$j
157. #允许登陆用户有写权限
158. write_enable=YES
159. #允许登录用户下载文件
160. anon_world_readable_only=YES
161. #允许登录用户有上传文件(非目录)的权限
162. anon_upload_enable=YES
163. #允许登录用户创建目录的权限
164. anon_mkdir_write_enable=YES
165. #允许登录用户更多于上传或者建立目录之外的权限,如删除或者重命名
166. anon_other_write_enable=YES
167. EOF
168. mkdir $FTP_HOME/$j
169. chown -R ftpuser.ftpuser $FTP_HOME
170. echo "`date +%Y/%m/%d-%T` $j Create Success">> $FTP_DIR/create_list.txt
171. echo -e "\033[31m User $j Create Success,Please check the record file >> $FTP_DIR/create_list.txt\033[0m"
172. fi
173. done
174.
175. if[ $SYS_VERSION -eq 7];then
176. systemctl restart vsftpd.service
177. systemctl enable vsftpd.service
178. systemctl stop firewalld.service
179. systemctl disable firewalld.service
180. sed -i "/SELINUX/s/enforcing/disabled/g"/etc/selinux/config
181. setenforce 0
182. else
183. service vsftpd restart
184. chkconfig vsftpd on
185. service iptables stop
186. chkconfig iptables off
187. sed -i "/SELINUX/s/enforcing/disabled/g"/etc/selinux/config
188. setenforce 0
189. fi
  • 输入编号:1268,直达文章
  • 输入m|M,直达目录列表