我孤身走在路上, 石子在雾中发亮,夜很安静,荒原面对太空,星星互诉衷肠
Linux搭建sftp
Linux搭建sftp

Linux搭建sftp

SFTP,全称为SSH File Transfer Protocol,是一种网络文件传输协议。它为文件的传输提供了一种安全的方法,通过SSH协议提供数据加密和安全的网络服务。SFTP不同于简单的文件传输协议(FTP),它为传输的数据提供了加密,确保数据在传输过程中不会被截获或篡改,从而提高了传输过程的安全性。

SFTP与FTP的主要区别:

  1. 安全性
  • FTP在传输数据时不提供加密,数据(包括用户名和密码)可能会以明文形式在网络中传输,容易遭受嗅探和中间人攻击。
  • SFTP在SSH的安全层上运行,为所有传输的数据提供了加密,包括认证信息和传输的文件内容。
  1. 端口
  • FTP通常使用两个端口:21用于命令传输,20用于数据传输。
  • SFTP只使用一个端口(默认为22),即SSH端口,因此更容易管理和配置防火墙。
  1. 功能
  • SFTP提供了比FTP更丰富的功能,包括文件管理、权限和属性控制、文件锁定等。
  • FTP主要用于文件上传和下载,功能相对简单。

SFTP的历史:

SFTP最初是作为SSH的一部分被设计出来的,其早期版本随SSH-2协议一起发布。SSH(Secure Shell)协议是由芬兰研究员Tatu Ylönen在1995年开发的,目的是替代不安全的telnet和rlogin等协议。随着SSH的普及,SFTP也随之成为了文件传输的标准方法之一。

为什么现在使用SFTP比较多:

  1. 安全需求:随着网络安全意识的提高,人们越来越重视数据传输的安全性。SFTP提供了加密和安全认证,确保了数据传输的安全。
  2. 合规性:许多行业标准和政府法规要求使用安全的数据传输方法,SFTP因其安全性而符合这些要求。
  3. 单一端口:SFTP通过单一端口工作,便于防火墙配置和网络管理。
  4. 功能丰富:SFTP支持文件传输之外的操作,如删除、重命名、更改文件权限等,这使得它更为强大和灵活。
  5. 跨平台:SFTP客户端和服务器软件可用于多种操作系统,包括Windows、Linux和macOS,这提供了很好的跨平台支持。

由于这些优点,SFTP已经成为许多企业和组织传输文件的首选协议,尤其是在需要确保数据安全的场合。

服务的搭建

在CentOS 7上搭建SFTP服务,通常使用OpenSSH内置的SFTP功能。下面是搭建SFTP服务的基本步骤:

  1. 确保OpenSSH服务器已安装:
sudo yum install openssh-server
  1. 启动并使SSH服务开机自启:
sudo systemctl start sshd
sudo systemctl enable sshd
  1. 创建SFTP用户和用户组:
sudo groupadd sftpusers
sudo useradd -m -g sftpusers -s /sbin/nologin sftpuser
sudo passwd sftpuser

这里创建了名为sftpusers的组,并添加了名为sftpuser的用户。/sbin/nologin确保用户不能通过SSH登录。

  1. 配置sshd_config文件以限制SFTP用户的访问权限:
sudo vi /etc/ssh/sshd_config

在文件的末尾添加以下配置:

Match Group sftpusers
   ChrootDirectory %h
   ForceCommand internal-sftp
   AllowTcpForwarding no
   X11Forwarding no

这里%h代表用户的主目录,ChrootDirectory用于限制用户只能访问其主目录。

  1. 为SFTP用户分配权限并设置目录结构:
sudo mkdir /home/sftpuser/files
sudo chown sftpuser:sftpusers /home/sftpuser/files

这里创建了一个名为files的目录,用于sftpuser存放文件。

  1. 重启SSH服务以应用更改:
sudo systemctl restart sshd
  1. 测试SFTP连接:
sftp sftpuser@your_server_ip

替换your_server_ip为你的服务器IP地址,然后使用sftpuser的密码进行登录。

用户权限的处理

在CentOS 7上对SFTP用户进行权限控制,主要是通过设置文件系统权限和使用SSH配置文件来实现。以下是一些基本的权限设置:

只读权限:

如果您想要一个用户只有读取文件的权限,不允许上传、修改或删除,可以这样设置:

  1. 设置用户的主目录权限,使得用户只能读取文件:
sudo chown root:sftpusers /home/sftpuser
sudo chmod 755 /home/sftpuser

这里,我们将主目录的所有者设为root,并给予sftpusers组的成员读取和执行权限。

  1. 创建一个文件夹供用户读取文件:
sudo mkdir /home/sftpuser/files
sudo chown sftpuser:sftpusers /home/sftpuser/files
sudo chmod 755 /home/sftpuser/files
  1. 确保用户只能访问files目录,并且只有读取权限:
sudo chown -R sftpuser:sftpusers /home/sftpuser/files
sudo chmod -R 755 /home/sftpuser/files

这样用户sftpuser能读取files目录下的所有文件,但不能在里面写入或修改文件。

读取和上传权限:

如果您希望用户既能读取文件也能上传文件,但不允许修改或删除,可以这样设置:

  1. 设置用户的主目录权限,使得用户只能读取和写入文件:
sudo chown root:sftpusers /home/sftpuser
sudo chmod 755 /home/sftpuser
  1. 创建一个文件夹供用户读取和上传文件:
sudo mkdir /home/sftpuser/files
sudo chown sftpuser:sftpusers /home/sftpuser/files
sudo chmod 755 /home/sftpuser/files
  1. 为了让用户能上传文件,需要给予写权限:
sudo chmod 775 /home/sftpuser/files

这样用户sftpuser能读取和上传文件到files目录,但是不能修改或删除已经存在的文件。如果您希望用户也能修改文件,那么可以将权限改为777(不推荐,因为这会使得任何人都能修改文件)。

Linux的文件权限是非常灵活的,我们可以根据需要进行精细调整。例如,使用setfacl命令可以设置更精细的访问控制列表(ACL)权限。chmod命令中权限数字的含义,例如,7代表读写执行,5代表读取和执行,4代表只读。

具体案例

把sftp的根目录放到 /home/sftp_files这个目录下,分别建立两个用户,user_external用户能读能写,密码是CNNASy6#qCs$hmPWngAERu,一个只能读, 用户名是user_internal,密码是DAY2YaUYM#jGwM4q4@Qkx# ,

好的,按照您的要求,我们将创建两个用户:user_externaluser_internal,并设置相应的权限。user_external将拥有读写权限,而user_internal将只有读权限。我们将使用/home/sftp_files作为SFTP的根目录。请按照以下步骤操作:

  1. 创建SFTP根目录和用户组:
sudo mkdir -p /home/sftp_files
sudo groupadd sftpusers
  1. 创建用户并设置密码:
sudo useradd -m -g sftpusers -s /sbin/nologin user_external
echo "CNNASy6#qCs$hmPWngAERu" | sudo passwd --stdin user_external

sudo useradd -m -g sftpusers -s /sbin/nologin user_internal
echo "DAY2YaUYM#jGwM4q4@Qkx#" | sudo passwd --stdin user_internal
  1. 分配目录给用户,并设置相应权限:
sudo mkdir /home/sftp_files/user_external
sudo mkdir /home/sftp_files/user_internal

sudo chown root:sftpusers /home/sftp_files/user_external
sudo chown root:sftpusers /home/sftp_files/user_internal

sudo chmod 755 /home/sftp_files/user_external
sudo chmod 755 /home/sftp_files/user_internal

sudo mkdir /home/sftp_files/user_external/files
sudo mkdir /home/sftp_files/user_internal/files

sudo chown user_external:sftpusers /home/sftp_files/user_external/files
sudo chown user_internal:sftpusers /home/sftp_files/user_internal/files

sudo chmod 770 /home/sftp_files/user_external/files
sudo chmod 750 /home/sftp_files/user_internal/files
  1. 配置sshd_config文件以限制SFTP用户的访问权限,并设置根目录:
sudo vi /etc/ssh/sshd_config

在文件的末尾添加以下配置:

Match Group sftpusers
   ChrootDirectory /home/sftp_files/%u
   ForceCommand internal-sftp
   AllowTcpForwarding no
   X11Forwarding no
  1. 重启SSH服务以应用更改:
sudo systemctl restart sshd

现在,您应该能够使用user_external和user_internal用户通过SFTP连接到服务器。user_external将能够在其files目录中读取和上传文件,而user_internal将只能读取其files目录中的文件。

出于安全考虑,直接在命令行中以明文形式设置密码并不是最佳实践。建议手动设置密码或使用密钥认证。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

− 4 = 2