CentOS搭建SFTP

CentOS搭建SFTP

目标:实现不同用户只能操作自己目录

  • 登录服务器执行命令 ssh -V 查看openssh版本,版本必须大于4.8p1.

  • 创建sftp组: groupadd sftp

  • 创建用户: 对于每个用户都有自己的上传和下载目录,用户之间目录完全隔离

useradd -g sftp -s /bin/false channel2
passwd channel2
  • sftp组的用户的home目录统一指定到/ecasdata/sftp/下,按用户名区分,不同用户分配不同目录即可
mkdir -p /ecasdata/sftp/channel2/cf/
mkdir -p /ecasdata/sftp/channel2/batch/
  • 配置sshd_config,文本编辑器打开 /etc/ssh/sshd_config
vi /etc/ssh/sshd_config
  • 找到如下这行,用井号符号注释掉.
# Subsystem      sftp    /usr/libexec/openssh/sftp-server 
  • 在文件最后面添加如下几行内容,然后保存.
Subsystem       sftp    internal-sftp    
Match Group sftp    
ChrootDirectory /ecasdata/sftp/%u  (此处配置sftp组用户的home目录) 
ForceCommand    internal-sftp    
AllowTcpForwarding no    
X11Forwarding no
  • 设定Chroot目录权限
    chown root:sftp /ecasdata/sftp/channel2/  
    chmod 755 /ecasdata/sftp/channel2/
  • 给用户设置权限
    chown channel2:sftp /ecasdata/sftp/channel2/cf/
    chown channel2:sftp /ecasdata/sftp/channel2/batch/
    chmod 755 /ecasdata/sftp/channel2/cf/
    chmod 755 /ecasdata/sftp/channel2/batch/
  • 修改/etc/selinux/config,文本编辑器打开/etc/selinux/config
    vi /etc/selinux/config  
  • 将文件中的SELINUX=enforcing 修改为 SELINUX=disabled 然后保存
  • 再执行命令:setenforce 0
  • 重启sshd服务: service sshd restart
  • 验证sftp环境: sftp channel2@127.0.0.1

快速构建

    以channel2为例,创建目录,分配目录权限:

    useradd -g sftp -s /bin/false channel2

    passwd channel2

    输入密码: channel2

    确认密码: channel2

    mkdir -p /ecasdata/sftp/channel2/cf/

    mkdir -p /ecasdata/sftp/channel2/batch/

    usermod -d /ecasdata/sftp/channel2/  channel2  修改用户家目录

    chown root:sftp /ecasdata/sftp/channel2/

    chmod 755 /ecasdata/sftp/channel2/

    chown channel2:sftp /ecasdata/sftp/channel2/cf/ 
     chown channel2:sftp /ecasdata/sftp/channel2/batch/ 
    chmod 755 /ecasdata/sftp/channel2/cf/
     chmod 755 /ecasdata/sftp/channel2/batch/

    验证sftp环境: sftp channel2@127.0.0.1 

搭建过程中可能遇到的问题

  • 防火墙未关闭,执行命令: service iptables stop

  • 目录权限问题:

每个用户一个目录,注意目录的层次必须是用户名

用户目录(channel2)及其上级目录设置 root:sftp ,权限755
用户目录下子目录设置 channel2:sftp,权限755

ChrootDirectory设置的目录权限及其所有的上级文件夹权限,属主和属组必须是root;

ChrootDirectory设置的目录权限及其所有的上级文件夹权限,只有属主能拥有写权限,也就是说权限最大设置只能是755。

注意:由于权限是755,导致非root用户都无法在目录中写入文件,所以需要在ChrootDirectory指定的目录下建立子目录,重新设置属主和权限。


例如:
这个目录所有者为channel2,所有组为sftp,所有者有写入权限,而所有组无写入权限
chown channel2:sftp /ecasdata/sftp/channel2/cf/  
chmod 755 /ecasdata/sftp/channel2/cf/  

sftp相关命令:

  • 上传和下载
sftp> get /var/www/fuyatao/index.php  /home/fuyatao/
将从远程主机的  /var/www/fuyatao/目录下将 index.php 下载到本地  /home/fuyatao/目录下。

sftp> put /home/fuyatao/downloads/Linuxgl.pdf /var/www/fuyatao/
把本地 /home/fuyatao/downloads/目录下的 linuxgl.pdf文件上传至远程主机/var/www/fuyatao/ 目录下
  • 删除文件或文件夹
mkdir 创建文件夹
rm 删除文件
rmdir 删除文件夹,但是只能删除空文件夹,因此要使用命令rm folder/* 把文件夹里面的文件先清空, 再rmdir folder。而且还需要是folder里面没有子文件夹的情况。
  • nginx配置转发时
sftp -oPort=port  username@IP   passward
  • 参考博客
http://blog.csdn.net/qin_weilong/article/details/69486104
http://blog.csdn.net/xinxin19881112/article/details/46831311
https://www.cnblogs.com/luyucheng/p/6094729.html
http://blog.csdn.net/s277955712/article/details/70172376
### 配置 CentOS 系统中的 SFTP 服务器 #### 修改用户目录权限 为了确保安全性和隔离性,需调整目标用户的主目录及其父级目录的权限。例如,对于名为 `sftpwcw` 的用户,其主目录 `/data/sftpfile` 应当归属于根用户并具有适当的访问控制权: ```bash chown root /data/sftpfile # 将文件夹所有权更改为 root 用户 chmod 755 /data/sftpfile # 调整文件夹权限以允许读取和执行操作 ``` #### 关闭 Selinux 安全策略 如果启用了 Selinux,则可能阻止某些功能正常运行。可以通过编辑配置文件来禁用它: ```bash vim /etc/selinux/config # 更改以下行的内容为 disabled SELINUX=disabled ``` 完成更改后需要重新启动系统使改动生效。 #### 编辑 SSHD 配置支持内部 SFTP 子系统 打开SSH守护进程的主要配置文档,并添加特定部分用于定义受限环境下的SFTP行为: ```bash Subsystem sftp internal-sftp Match Group sftp ChrootDirectory /data/sftp/%u ForceCommand internal-sftp AllowTcpForwarding no X11Forwarding no ``` 上述代码片段指定了一个新的子系统以及匹配条件下的约束措施[^2]。 #### 创建专用组与用户 建立专门用来管理这些受限制会话的新群组,并向其中加入相应的成员账号: ```bash groupadd sftp usermod -G sftp sftpwcw passwd sftpwcw # 如果必要的话可以重设密码 ``` #### 添加新用户到指定位置 假设我们希望创建一个叫做`sftptest`的新用户并将他锁定在其家目录内: ```bash mkdir -p /data/sftp/sftptest/upload chown root:root /data/sftp/sftptest/ chmod 755 /data/sftp/sftptest/ # 让上传目录可写入 chown sftptest:sftp /data/sftp/sftptest/upload chmod 700 /data/sftp/sftptest/upload ``` #### 测试连接 利用各种客户端工具尝试接入已部署完毕的服务端口,验证整个流程是否顺畅无误: ```bash sftp sftpwcw@<your_server_ip> ``` #### 使用图形界面软件进行测试 除了命令行方式外还可以借助第三方应用程序比如 WinSCP 或 FileZilla 来实现远程传输需求[^4]。 --- ### 注意事项 - **安全性考量**:始终遵循最小特权原则,在不影响业务逻辑的前提下尽可能减少暴露风险。 - **日志记录审查**:定期查看审计日志以便及时发现异常活动迹象。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值