vsftpd、sftp配置

小知识:
查看用户过期设置: chage -l vivek
修改用户过期设置:chage -I -1 -m 0 -M 99999 -E -1 username

yum install vsftp

vsftp配置说明:
 
创建虚拟用户数据:
cd /etc/vsftpd
vi virtusers(建立用户和密码,如下)
nihao
1234566
创建真实数据库:
db_load -T -t hash -f virtusers virtusers.db
chmod 600 virtusers.db
rm virtusers

配置/etc/vsftpd/vsftpd.conf文件:

anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
anon_upload_enable=NO
anon_mkdir_write_enable=NO
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
chown_uploads=NO
xferlog_file=/var/log/xferlog
xferlog_std_format=NO
#nopriv_user=vsftpd
#ascii_upload_enable=YES
#ascii_download_enable=YES
chroot_local_user=YES
ls_recurse_enable=NO
listen=YES
pam_service_name=vsftpd.virtual
userlist_enable=YES
tcp_wrappers=YES
#guest_username=overlord
guest_enable=YES
local_root=/www/blog
virtual_use_local_privs=YES
----------------------------以上普通的ftp就可以使用了,如要使用tls加密,则需以下配置-------------------------------------------
rsa_cert_file=/etc/vsftpd/vsftpd.pem
rsa_private_key_file=/etc/vsftpd/vsftpd.pem
ssl_enable=YES
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO (此项可以打开,但是v2和v3版本的ssl安全性不高)
ssl_sslv3=NO
pasv_min_port=21234
pasv_max_port=30999


创建用户认证
cat /etc/pam.d/vsftpd.virtual
#%PAM-1.0
auth       required     pam_userdb.so db=/etc/vsftpd/virtusers
account    required     pam_userdb.so db=/etc/vsftpd/virtusers
session    required     pam_loginuid.so

问题:ftp: connect: 没有到主机的路由
解决:修改:vi /etc/sysconfig/iptables-config
# stored in /etc/modprobe.conf.
IPTABLES_MODULES="ip_nat_ftp ip_conntrack_ftp"
配置tls加密的时候会报错:读取目录列表失败
解决:在配置文件vsftpd.conf中加入配置: pasv_min_port,pasv_max_port

开iptables的21端口。
-A INPUT -p tcp -m tcp --dport 21 -s 121.123.121.123 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 21234:30999 -j ACCEPT

查看是否支持ssl:
ldd /usr/sbin/vsftpd |grep libssl
    libssl.so.10 => /usr/lib64/libssl.so.10 (0x00007f3c225a3000)
如果没有返回则表示不支持。

生成密钥:
openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout vsftpd.pem -out vsftpd.pem


设置sftp服务:
   1.设置chroot环境
     
创建一个新组:
    groupadd sftp
创建一个用户(该用户只能sftp登录,不允许ssh登录): useradd -G sftp -d /into -s /sbin/nologin testuser
   useradd -g sftp -d /incoming -s /sbin/nologin sftpuser
   passwd sftpuser
如果已有用户,则可以进行修改:
  usermod -g sftp -d /incoming -s /sbin/nologin sftpuser

修改/etc/ssh/sshd_config文件

# override default of no subsystems
#Subsystem      sftp    /usr/libexec/openssh/sftp-server
Subsystem       sftp    internal-sftp

# Example of overriding settings on a per-user basis
Match Group sftp
#Match User sftpuser
#       X11Forwarding no
#       AllowTcpForwarding no
        ForceCommand internal-sftp
        ChrootDirectory /sftp/myfiles

为组设置chroot目录
Match Group sftpusers
        ChrootDirectory /sftp/%u(%u匹配当前用户,如果是用户heh,则目录匹配到/sftp/heh)
        ForceCommand internal-sftp

多用户配置参考:
Subsystem       sftp    internal-sftp
#限制www用户的根目录
Match User www
    ChrootDirectory /home/sftp
    ForceCommand    internal-sftp
#限制blog和pay用户的根目录
Match Group sftp
    ChrootDirectory %h
    ForceCommand    internal-sftp


这里要注意各个文件的用户及权限,
     ChrootDirectory /sftp/myfiles中的这个ChrootDirectory配置后相当于一个系统的根目录,用户没有
权限直接进行上传操作,其所有者可以设置为root:root。要进行上传,就建立一个子目录,将其所有者设置
为上面建立的用户
重启服务: service sshd restart
报错:fatal: bad ownership or modes for chroot directory
解决:将chrootDirectory制定目录及以上。设置群组不可写,所有者是root
报错: Couldn't get handle: Permission denied
setsebool -P ssh_chroot_rw_homedirs on(不能彻底解决问题)

SELinux问题:
SELinux是一种基于 域-类型 模型(domain-type)的强制访问控制(MAC)安全系统,
它由NSA编写并设计成内核模块包含到内核中,相应的某些安全相关的应用也被打了SELinux的补丁,
最后还有一个相应的安全策略。任何程序对其资源享有完全的控制权。
假设某个程序打算把含有潜在重要信息的文件扔到/tmp目录下,那么在DAC情况下没人能阻止他。
SELinux提供了比传统的UNⅨ权限更好的访问控制。

查看系统SELinux状态:
sestatus
SELinux status:                 enabled
SELinuxfs mount:                /selinux
Current mode:                   enforcing
Mode from config file:          enforcing
Policy version:                 24
Policy from config file:        targeted

在以上设置正确的时候会发现home目录下的文件夹作为chroot后,不能sftp访问,
设置setsebool -P ssh_chroot_rw_homedirs on后,可以访问,ls操作,但是不能显示文件,只能显示文件夹,
put,get都无效。

有两种解决方法:
第一种方法:
setenforce 0  (使SELinux 设置为permissive)

第二种方法:
设置 setsebool -P ssh_chroot_full_access 1,
最后结果如下:
getsebool -a | grep ssh
allow_ssh_keysign --> off
fenced_can_ssh --> off
ssh_chroot_full_access --> on
ssh_chroot_manage_apache_content --> off
ssh_chroot_rw_homedirs --> off
ssh_sysadm_login --> off

使用sftp的用户进行ssh登陆时:(连接关闭,提示只允许sftp连接)

参考文档:http://www.thegeekstuff.com/2012/03/chroot-sftp-setup/

setfacl 设置访问权限( 配置多个组能够读写的权限 setfacl -m g:v0id6:rw,g:yygydjtest:rw testacl)

get dac_data/test.txt ./    put /tmp/test.txt dac_data
登录:sftp [email protected]
sftp -oPort=8087 [email protected]
sftp -oIdentityFile=/home/keels/19_rsa [email protected]
Apache做chroot设置:
http://www.cyberciti.biz/tips/chroot-apache-under-rhel-fedora-centos-linux.html
http://www.linuxtechi.com/configure-chroot-sftp-in-linux/
http://www.certdepot.net/selinux-set-enforcing-and-permissive-modes/
http://landoflinux.com/linux_sftp_chroot_jail.html

你可能感兴趣的:(为了忘却)