问题出现场景:
生产服务器上要安装ftp服务,因为生产服务器无法连到外网环境,所以安装时无法使用包管理工具安装,只能自己找tar包进行安装
安装步骤可以参考
https://blog.csdn.net/dongyuxu342719/article/details/82620581
安装后执行
/usr/local/sbin/vsftpd &
报出
500 OOPS: unrecognised variable in config file: allow_writeable_chroot
仔细查阅了相关资料发现
vsftp3.0之前的版本没有这个属性,而我用的是2.x的版本
注释掉这个属性
再次启动
报出
500 OOPS: could not bind listening IPv4 socket
查看vsftp服务状态
发现是vsftpd dead but subsys locked
该状态是由于vsftp通过xinetd服务启动
然后被锁,所以首先要将vsftp改成独立启动,并将xinetd服务停掉再重启vsftpd服务
将vsftp改成独立启动:
1.修改/etc/xinetd.d/vsftpd
将disable = no改为yes
2.查看/etc/vsftpd.conf
确保 listen=YES
停掉xinetd服务
service xinetd stop
启动vsftp服务
/usr/local/sbin/vsftpd &
启动xinetd服务
service xinetd start
至此问题得到解决
附上vsftp.conf配置
#独立启动
listen=YES
#禁止匿名登陆
anonymous_enable=NO
#允许本地登录
local_enable=YES
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
#ftp端口,这个地方的端口号如果进行修改,需要将/etc/services对应的端口也改成一致的
listen_port=21
#开放本地用户写的权限
write_enable=YES
#user_enable=YES 并且 userlist_deny=NO 仅允许user_list中指定的用户访问服务器
userlist_enable=YES
userlist_deny=NO
#指定user_list配置文件路径
userlist_file=/etc/vsftp/vsftpd.user_list
#希望用户登陆后不能切换到自己目录以外的其他目录设置此项
chroot_list_enable=YES
#控制用户登陆后不能更改目录
chroot_local_user=yes
#指定chroot_list配置文件路径
chroot_list_file=/etc/vsftp/chroot_list
新建用户并为其赋予权限
1.新建用户
useradd -d /home/XX -s /bin/bash username
-d 指定主目录 -s 指定用户登陆后使用的shell
-s /sbin/nologin 用户不可进行登陆
附:usermod详细参数
-c<备注> 修改用户帐号的备注文字。
-e<有效期限> 修改帐号的有效期限。
-f<缓冲天数> 修改在密码过期后多少天即关闭该帐号。
-g<群组> 修改用户所属的群组。
-G<群组> 修改用户所属的附加群组。
-l<帐号名称> 修改用户帐号名称。
-L 锁定用户密码,使密码无效。
-u 修改用户ID。
-U 解除密码锁定。
2.设置密码
passwd 111111
3.创建用户组
groupadd user-group
4.修改用户所属组(其实可以在创建用户的之后直接指定所属用户组)
usermod -g user-group username
5.查看用户信息
cat /etc/passwd|grep username
6.我这里将已经存在的目录设为用户登陆后的主目录,打算将这个用户提给其他公司的开发人员,然后推送资源至主目录下
修改目录所属组
chgrp username /home/XX/
这部分感觉没什么必要,不过已经改了,也记录一下,就当改着玩吧
然后将用户名添加至user_list就可以了
关于chroot_local_user和chroot_list_enable
限制用户登陆,只允许用户通过ftp登陆
1.编辑/etc/passwd
将用户登陆使用的shell改成/sbin/nologin
或者
usermod -s sbin/nologin username
/bin/bash -> /sbin/nologin
2.在/etc/shells中添加
/sbin/nologin