FTP搭建
本次采用本地用户登录访问,也可以创建虚拟用户访问
1.目录和用户规划:用户:ftpuser 家目录 :/ftpdata
创建ftp用户指定家目录并且禁止登录系统:useradd ftpuser -d /ftpdata -s /sbin/nologin
修改所属主组 : chown -R ftpuser:ftpuser /ftpdata
2.rpm 安装vsftpd
3.编辑配置文件 vi /etc/vsftpd/vsftpd.conf
修改参数
anonymous_enable=NO #禁止匿名用户登录
write_enable=YES #可写
chroot_local_user=YES #开启监牢机制(限制用户只能登录家目录)
4.重启 service vsftpd restart
5.测试
SFTP搭建
来查看openssh的版本,如果低于4.8p1,需要自行升级安装。
# ssh -V
假设,有一个名为sftp的组,这个组中的用户只能使用sftp,不能使用ssh,且sftp登录后只能在自己的home目录下活动
1、创建sftp组
# groupadd sftp
2、创建一个sftp用户,名为mysftp
# useradd -g sftp -s /bin/false mysftp
# passwd mysftp
3、sftp组的用户的home目录统一指定到/home下,按用户名区分,这里先新建一个mysftp目录,然后指定mysftp的home为/home/mysftp
# mkdir -p /home/mysftp
# usermod -d /home/mysftp mysftp
4、配置sshd_config
编辑 /etc/ssh/sshd_config
# vim /etc/ssh/sshd_config
找到如下这行,并注释掉
#Subsystem sftp /usr/libexec/openssh/sftp-server
添加如下几行
Subsystem sftp internal-sftp
Match Group sftp
X11Forwarding no
AllowTcpForwarding no
PermitTTY no
ForceCommand internal-sftp
ChrootDirectory /home/%u
解释如下:
Subsystem sftp internal-sftp #这行指定使用sftp服务使用系统自带的internal-sftp
Match Group sftp #这行用来匹配sftp组的用户,如果要匹配多个组,多个组之间用逗号分割 当然,也可以匹配用户:Match User mysftp
ChrootDirectory /data/sftp/%u #用chroot将用户的根目录指定到/data/sftp/%u,%u代表用户名,这样用户就只能在/data/sftp/%u下活动
ForceCommand internal-sftp #指定用系统sftp
AllowTcpForwarding no
X11Forwarding no #这两行,如果不希望该用户能使用端口转发的话就加上,否则删掉
5、设定Chroot目录权限
# chown root:sftp /home/mysftp
# chmod 775 /home/mysftp
错误的目录权限设定会导致在log中出现”fatal: bad ownership or modes for chrootdirectory XXXXXX”的内容
目录的权限设定有两个要点:
1、由ChrootDirectory指定的目录开始一直往上到系统根目录为止的目录拥有者都只能是root
2、我们将/home/mysftp的权限设置为755,所有者root有写入权限,而所有组sftp无写入权限
照上面设置后,在重启sshd服务后,用户mysftp已经可以登录,但使用chroot指定根目录后,根应该是无法写入的,所以要新建一个目录供mysftp上传文件。这个目录所有者为mysftp,所有组为sftp,所有者有写入权限,而所有组无写入权限
# mkdir /home/mysftp/upload
# chown mysftp:sftp /home/mysftp/upload
# chmod 755 /home/mysftp/upload
2、由ChrootDirectory指定的目录开始一直往上到系统根目录为止都不可以具有群组写入权限
6、/重启sshd服务
# service sshd restart
到这里,mysftp已经可以通过sftp客户端登录并可以上传文件到upload目录。
如果还是不能在此目录下上传文件,提示没有权限,检查SElinux是否关闭,可以使用如下指令关闭SElinux
修改/etc/selinux/config文件中的SELINUX="" 为 disabled,然后重启。