文件传输协议,FTP由FTP服务器(存储文件)和FTP客户端(通过FTP协议访问FTP服务器上的资源)组成
安全文件传输协议,基于 SSH2 协议建立安全连接来传输文件。与FTP不同,SFTP不区分数据通道与命令通道,而是数据和命令都会通过单个连接以特殊格式的数据包进行传输,配置时可以指定端口。可以通过用户名密码认证、RSA认证、DSA认证等方式管理用户登录
下面介绍proftpd的配置使用
使用ftpasswd工具创建用户和组
# 创建galen用户,并设置家目录为/vol/galen ftpasswd --passwd --file=/etc/ftpd/ftpd.passwd --name=galen --uid=1001 --home=/vol/galen --shell=/bin/bash # 创建user1 ftpasswd --passwd --file=/etc/ftpd/ftpd.passwd --name=user1 --uid=1002 --home=/vol/user1 --shell=/bin/bash # 添加用户组group1,添加galen和user1作为组成员 ftpasswd --group --file=/etc/ftpd/ftpd.group --name=group1 --gid=2001 --member=galen,user1
# 设置FTP用户登录根目录为/vol DefaultRoot /vol # 设置用户和组文件路径 AuthUserFile /etc/ftpd/ftpd.passwd AuthGroupFile /etc/proftpd/ftpd.group # 资源控制,对处理FTP session的子进程限制内存 <IfModule mod_rlimit.c> RLimitMemory session 4G </IfModule>
使用VirtualHost配置一个独立的SFTP服务器,该配置快的作用是在同一个物理机上虚拟出多个FTP服务器。具体示例如下:
<IfModule mod_sftp.c> <VirtualHost 0.0.0.0> ServerName "SFTP Server" DefaultRoot /vol SFTPEngine on # SFTP使用的端口配置为2222 Port 2222 SFTPLog /var/log/proftpd/sftp.log AllowOverwrite yes # SFTPHostKey需要提供rsa、dsa以及可选的ECDSA key # 注意:这些文件需要与SSH2使用的key文件完全相同,所以直接加入ssh的key文件路径 SFTPHostKey /etc/ssh/ssh_host_rsa_key SFTPHostKey /etc/ssh/ssh_host_dsa_key # 使用用户名密码的认证方式 SFTPAuthMethods password # 同以上FTP设置的用户一样 AuthUserFile /etc/proftpd/ftpd.passwd AuthGroupFile /etc/proftpd/ftpd.group MaxLoginAttempts 6 SFTPCompression delayed </VirtualHost> </IfModule>
以上可以做到用户和组同时通过SFTP与FTP访问服务器,下面简单配置登录限制与权限管控
proftpd的
Proftpd将以上FTP原生指令组合成为指令组:
如果指令组和原生指令同时添加到配置,那么原生指令的优先级最高 -> 次优先的是命令组 -> 其他命令组优先级大于带ALL关键字
linux权限参考如下
Mode | Label | Description |
---|---|---|
0777 | rwxrwxrwx | read/write/execute permissions for user owner, group owner, and other |
0666 | rw-rw-rw- | read/write permissions for user owner, group owner, and other |
0755 | rwxr-xr-x | read/write/execute permissions for user owner, read/execute permissions for group owner and other |
0750 | rwxr-x--- | read/write/execute permissions for user owner, read permission for group owner, no permissions for other |
0644 | rw-r--r-- | read/write permissions for user owner, read permission for group owner and other |
0511 | r-x--x--x | read/execute permissions for user owner, execute permission for group owner and other |
基本权限为777,如果我们想将创建的文件设置为创建用户可读写执行,同组用户与其他用户只读,那么设置umask为022,最终得到新建文件或目录的权限为755
7 ^ 0 = 7 7 ^ 2 = 5 7 ^ 2 = 5
<Directory "/vol/share1"> Umask 022 022 <Limit DIRS WRITE> AllowAll </Limit> </Directory>
该配置实现了:
# /etc/proftpd/ftpd.passwd # 将家目录设为不存在的目录,后续使用<Limit>进行统一控制 u1:$1$uWROkZWh$FzA2bjAqX8WXSyahNuhLV0:2000:2000::/nonexistent:/bin/bash galen:$1$vzCnaVih$cbSGH3balmW7K44PILuCB/:2001:2003::/nonexistent:/bin/bash otheruser:$1$3QmQ7wF3$qRJE9nC8t8w4n7qtyshE1/:2004:2004::/nonexistent:/bin/bash user1:$1$XMQbJG3S$4BUxe9VbBCWrItfE2AjuH0:2002:2003::/nonexistent:/bin/bash
# /etc/proftpd/ftpd.group samba_group_group1:x:2003:galen,user1
Include /etc/proftpd/conf.d/ DefaultRoot /vol AllowForeignAddress OFF AuthUserFile /etc/proftpd/ftpd.passwd AuthGroupFile /etc/proftpd/ftpd.group <IfModule mod_rlimit.c> RLimitMemory session 4G </IfModule> # 禁止所有人操作根目录 <Directory "/vol"> <Limit WRITE> DenyAll </Limit> </Directory> # 允许操作根目录的子目录 <Directory "/vol/*/*"> <Limit ALL> AllowAll </Limit> </Directory> # /vol/share1目录允许属于samba_group_group1组的用户读写 <Directory "/vol/share1"> Umask 022 022 <Limit DIRS WRITE> AllowGroup samba_group_group1 AllowUser None DenyAll </Limit> </Directory> # /vol/share3禁止所有ftp登录的用户使用 <Directory "/vol/share3"> Umask 777 777 <Limit DIRS WRITE READ> AllowGroup None AllowUser None DenyAll </Limit> </Directory> # /vol/share2目录允许otheruser使用,创建的文件与目录权限为666(proftpd没有执行位) <Directory "/vol/share2"> Umask 000 000 <Limit DIRS WRITE> AllowGroup None AllowUser otheruser DenyAll </Limit> </Directory> # 以上为使用FTP登录的设置 # 以下为使用SFTP登录的设置 <IfModule mod_sftp.c> <VirtualHost 0.0.0.0> ServerName "SFTP Server" DefaultRoot /vol SFTPEngine on Port 2222 SFTPLog /var/log/proftpd/sftp.log AllowOverwrite yes SFTPHostKey /etc/ssh/ssh_host_rsa_key SFTPHostKey /etc/ssh/ssh_host_dsa_key SFTPAuthMethods password AuthUserFile /etc/proftpd/ftpd.passwd AuthGroupFile /etc/proftpd/ftpd.group MaxLoginAttempts 6 SFTPCompression delayed <Directory "/vol"> <Limit WRITE> DenyAll </Limit> </Directory> <Directory "/vol/*/*"> <Limit ALL> AllowAll </Limit> </Directory> <Directory "/vol/share1"> Umask 022 022 <Limit DIRS WRITE> AllowGroup samba_group_group1 AllowUser None DenyAll </Limit> </Directory> # 使用SFTP登录的任何用户都可以操作/vol/share3 <Directory "/vol/share3"> Umask 000 000 <Limit DIRS WRITE> AllowGroup samba_group_group1 AllowUser otheruser DenyAll </Limit> </Directory> # 不允许使用SFTP登录的用户操作/vol/share2 <Directory "/vol/share2"> Umask 777 777 <Limit DIRS WRITE READ> AllowGroup None AllowUser None DenyAll </Limit> </Directory> </VirtualHost> </IfModule>
proftpd实现的feature还有很多,比如:匿名用户、匿名FTP服务器、隐藏目录或文件、过期帐号等设置,有需要可以研究官网