东方飘雪

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

1.虚拟机vmware和unbuntu安装

2.ubuntu环境初始化  

2.1远程连接ubuntu及简单的防火墙配置

2.2 搭建FTP服务

      2.2.3.创建用户(学习

        2.2.4.权限控制(学习

    2.3 搭建SFTP服务

 


 

1.虚拟机vmware和unbuntu安装

 1.1 Vmware官方下载地址:https://www.vmware.com/products/workstation-pro/workstation-pro-evaluation.html

  vmware版本并不是越新越好,我下载的是VMware Workstation 64位_17.0.0.34456。其对应激活秘钥:https://www.haozhuangji.com/xtjc/180037874.html

1.2 Ubuntu官方下载地址:https://releases.ubuntu.com/   (我下载的事Ubuntu18.04.6版本( 64-bit PC (AMD64) desktop image)   https://releases.ubuntu.com/18.04.6/   

1.3 Vmware和ubuntu安装教程参考: https://blog.csdn.net/weixin_45496087/article/details/133067761

  截图如右:  这里大部分都会,不过里面的第37条开始【安装VMWare Tools】这个之前没弄过,可学习下。

1) 虚拟cpu:分配给虚拟机的vCPU数量会增加宿主机CPU的负载。每个vCPU本质上是对宿主机物理CPU核心或超线程资源的模拟。当虚拟机运行时,VMware会调度其vCPU请求到物理CPU核心上执行。如果分配的vCPU过多,导致虚拟机总需求超过物理CPU的实际核心数,尤其是在高负载情况下,可能会导致宿主机CPU资源争用,影响宿主机自身的性能和响应速度。

      虚拟内存:分配给虚拟机的内存是从宿主机的物理内存中划拨的。这部分内存将被锁定,不能被宿主机上的其他进程使用(eg:你的系统总内存是16GB,而你为虚拟机分配了8GB,那么在虚拟机运行期间,Windows将只能使用剩下的8GB内存。)另:如果不运行虚拟机,那么分配给虚拟机的内存将不会被使用,因此不会影响宿主Windows的总内存。

 2)网络使用桥接模式,但ubuntu怎样也无法连接网络。上网查了很多方法均不行,后来找到解决方法(参考网址:https://blog.csdn.net/sakurawithdong/article/details/134503031 ,截图如下)。总结:如果宿主的网卡较多,当虚拟机自动桥接网络时,自动选择了错误网卡就会导致虚拟机系统无法联网,需要手工选下正确网卡。

 2.ubuntu环境初始化  

2.1远程连接ubuntu及简单的防火墙配置

#安装SSH服务
sudo apt update #更新软件源索引、检查软件包版本变化、准备软件包升级(它本身并不会直接升级已安装的软件包,而是更新本地的软件包信息数据库)
sudo apt install openssh-server #下载安装ssh服务(自带sftp。在SSH软件包中,已经包含了一个叫作SFTP的安全文件信息传输子系统,SFTP本身没有单独的守护进程,它必须使用sshd守护进程(端口号默认是22)来完成相应的连接和答复操作)

sudo systemctl status ssh  # 检查当前状态
sudo systemctl start  ssh  # 启动服务(如有必要)
sudo systemctl enable ssh  # 设置开机自启动

#获取ip地址
ip addr show  #ifconfig

#防火墙(如没有,下载防火墙 sudo apt install ufw)
sudo ufw status  #查看防火墙状态
sudo ufw enable  #启动防火墙
sudo ufw disable #关闭防火墙
sudo ufw reload  #重启防火墙,添加规则以后需要使用该命令进行重启防火墙

sudo ufw allow ssh #允许SSH(默认端口22)
#另外:对于VNC远程桌面(VNC默认端口5900+,XRDP默认端口3389)
sudo ufw allow 5900:5910/tcp      # 允许端口范围,根据实际配置调整
sudo ufw allow 3389/tcp           # 对于XRDP

#其他例子:
sudo ufw deny 5100/tcp #禁止5100端口tcp协议访问
sudo ufw allow 5100/tcp
sudo ufw allow 5100/udp

 

2.2 搭建FTP服务

遇到问题:

 参考(https://blog.csdn.net/weixin_52799373/article/details/131045373)这个搭建好服务,使用FileZilla工具sftp协议链接OK,ftp协议无法连接,所犯问题如下:

     1)ftp和sftp理解问题,认为它俩是一回事,仅是协议不同而已

      2)使用ps -aux | grep vsftpd 查看服务,发现有进程,就认为服务启动成功了

 后来亲测 chroot_local_user、chroot_list_enable、chroot_list_file发现其参数配置无效,不管怎么配置,sftp连接都不受影响,再然后将/etc/vsftpd.conf配置文件大改,发现sftp依然可以连接,即配置文件无法影响sftp。后来baidu参看https://blog.csdn.net/Charles_Zaqdt/article/details/104340508(下面留了截图),发现作者与我是一模一样的问题,如下图,我靠了,vsftp是ftp服务软件,sftp是SSH的文件传输系统,我花费了1.5d的时间研究,研究了个寂寞。

总结如下;
  1)如同上图所说(详细看下上图箭头所指), sftp和ftp虽然有一样的语法和功能,但不是一回事,sftp是SSH的的一部分(安装SSH自带,如不自带,可用),安装SSH并开通默认端口后其实就可以使用sftp了,要想使用ftp才是需要安装的(sudo apt install vsftpd)。

        sftp相对ftp为加密传输,相对安全性高、传输效率低。如果使用sftp也就无需安装ftp了。

  2)使用service vsftpd status 命令查看ftp启动是否成功,不能仅仅查看是否有进程去判断。

 

2.2.1. 安装 vsftpd

sudo apt update
sudo apt install vsftpd #安装vsftpd(Very Secure FTP Daemon),这是一个在Ubuntu上广泛使用的FTP服务器软件
sudo vsftpd -v        #查看vsftpd版本

2.2.2. 配置 vsftpd

sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.bak   #在修改配置之前,先备份原始配置文件以防万一
sudo vim /etc/vsftpd.conf  #vim编辑器编辑配置文件 (sudo apt install vim#安装vim编辑器)
/etc/vsftpd.conf配置文件默认配置的中文解释(参考:https://blog.csdn.net/weixin_52799373/article/details/131045373)截图如右:
我参考的配置如下:
listen =Yes
listen_ipv6=No #网上说listen和listen_ipv6同时开监听,可能会报错
anonymous_enable=NO                           #不允许匿名FTP登录。(默认配置)
local_enable=YES                              #设置允许本地用户登录FTP服务器(默认配置)
write_enable=YES                              #写权限。允许用户上传文件到FTP服务器(默认被注释#)

chroot_local_user=YES                         #用户根目录限制(可选,提高安全性):如果您希望限制用户只能访问其主目录,防止他们浏览到其他系统文件(默认被注释#)
#chroot_list_enable=YES                       #启用chroot_list_file列表,用于指定哪些用户不应该被限制在主目录中。(默认被注释#)
#chroot_list_file=/etc/vsftpd.chroot_list     #指定了chroot_list_file列表的路径和名称。一行一个用户名。(默认被注释#) <亲测无效。这三个配置一起,不知道为什么>
#1.当chroot_list_enable=YES,chroot_local_user=YES时,在/etc/vsftpd.chroot_list文件中列出的用户,可以切换到其他目录;未在文件中列出的用户,不能切换到其他目录。
#2.当chroot_list_enable=YES,chroot_local_user=NO时,在/etc/vsftpd.chroot_list文件中列出的用户,不能切换到其他目录;未在文件中列出的用户,可以切换到其他目录。
#3.当chroot_list_enable=NO,chroot_local_user=YES时,所有的用户均不能切换到其他目录。
#4.当chroot_list_enable=NO,chroot_local_user=NO时,所有的用户均可以切换到其他目录。
#注意: 如果限制了用户不能切换其他目录,一定要在配置文件中新增 allow_writeable_chroot=YES,否则会报错:500 OOPS: vsftpd: refusing to run with writable root inside chroot()

 如果设置了chroot_list_enable和 chroot_list_file=/etc/vsftpd.chroot_list ,则需要创建vsftpd.chroot_list文件并添加可ftp的用户(亲测)

sudo vim /etc/vsftpd.chroot_list
#在里面添加可登录 ftp 的用户,一行一个用户名。vftp 添加进去。使用ps -aux | grep vsftpd 查看服务是否启动

2.2.3.创建ftp用户(学习)

  一般情况下会在home下新建一个FTP的主目录,然后建一个普通用户如下:

sudo mkdir /home/vftp              #创建文件夹
# 添加FTP用户vftp,指定用户主目录和所用shell
# ‘-m‘ 创建并指定用户主目录(在/home/路径下创建与用户同名的文件夹,并指定此为用户的主目录)
# `-d` 指定用户的主目录(不创建目录),也就是用户登录后所在的默认目录。在这个例子中,`-d /home/vftp` 指定 `vftp` 用户的主目录为 `/home/vftp`。
# `-s` 指定用户的默认shell。Shell是一个命令行解释器,它允许用户与操作系统进行交互。
`-s /bin/bash` 指定 `vftp` 用户的默认shell为Bash。
‘-s /sbin/nologin’特殊的shell,不允许用户ssh登录
# ‘-g‘ 指定用户所属的主组ID或组名。(创建用户不使用-g时,默认创建与用户同名的用户组,且此用户指定在此同名用户组下)
# ‘-G‘ 指定用户所属的附加组
# eg: sudo useradd -m -s /bin/bash -g users -G admin -p password_hash username
# sudo groups <username> 查看某用户属于哪个组。 sudo id <username> 查看用户详细信息(用户的主组和其他附加组以及用户ID(UID)和组ID(GID))
sudo useradd -d /home/vftp -s /bin/bash vftp sudo passwd vftp # 设置密码(给vftp用户设置密码)
#sudo deluser vftp#删除用户
#sudo chown vftp:vftp /home/vftp #将目录 /home/vftp 的所有者和所属组均更改为名为 vftp 的用户及其对应的同名用户组

eg:

#useradd创建用户 usermod修改用户  deluser删除用户

sudo usermod -s /sbin/nologin vftp #修改用户vftp登录权限为"不能ssh登录只能通过ftp访问的用户"
sudo usermod -s /bin/bash     vftp #恢复vftp登录权限
sudo usermod -d /home/vftp    vftp #修改用户vftp的主目录
sudo deluser vftp                  #删除用户,重新建
#注意:::如果你创建的用户是只能通过ftp访问的用户,一定要删除 /etc/pam.d/vsftpd 配置文件,因为这个配置文件会导致使用用户名登录 ftp 失败!!!

 2.2.4.权限控制(学习)

  chroot_local_user=YES,chroot_list_enable=No,chroot_list_file=/etc/vsftpd.chroot_list用这个去限制新建用户目录切换,但尝试了很多次都不成功,设置后无法控制。

后来研究用权限控制吧,在这之前首先需要对chomd命令及理念要理解,如下图:

 

ls -l 文件名/文件夹路径 查看文件/文件夹路径下的相关权限

 

 研究完后就理解了。命令如下:

sudo chown vftp:vftp /home/vftp    #将目录 /home/vftp 的所有者和所属组均更改为名为 vftp 的用户及其对应的同名用户组
chomd 700 /home/vftp               # 文件夹权限 (文件路径<所有者:wrx读写执行权限 所属组:---读写执行都无权限 其他用户:---读写执行都无权限>   )
                                   #此时 只有wftp用户可进入此文件路径,并有读写执行权限,其他无权进入此路径

 vftp用户使用工具FTP连接  和 nsoft用户SSH远程执行如下图(其他用户ftp和ssh均无法进入/home/vftp/路径):

例子:在/home/vftp 下创建 Down 和 Up目录,Down仅可下载,Up可下载、上传、删除;每天00:00将Up文件夹中文件移动到Down文件夹中。(参考:https://blog.csdn.net/qq_24568487/article/details/89400561

#1.修改 /home/vftp 权限(因为要在里面创建Down 和 Up目录,且其不能被 ftpusers 删除,所以应该限制 /home/vftp 写权限)
    #7读、写、执行权限 6读、写权限,无执行权限 5读、执行权限,无写权限
    sudo chmod 555  /home/vftp
#2.在 /home/vftp 下创建 Down 和 Up目录
    sudo mkdir /home/vftp/Down          
    sudo chown vftp:vftp /home/vftp/Down   #同样需要修改其用户组和拥有者为 vftp 
    sudo mkdir /home/vftp/Up
    sudo chown vftp:vftp /home/vftp/Up     #同样需要修改其用户组和拥有者为 vftp
#3.Down仅可下载,Up可下载、上传、删除。
    sudo chmod 555 /home/vftp/Down   #修改 Down 目录下文件仅能下载
    sudo chmod 777 /home/vftp/Up     #修改 Up 目录下能下载、上传、删除
#4.附加功能(可选),定时将Up中文件移动到Down中
    #(1)sudo crontab -e
    #(2)选择编辑器时最好选 vim 输入数字就可以了。
    #(3)最后一行添加:0 0 * * * mv /home/ftp/Up/* /home/ftp/Down 
    #说明:命令前可以输入五个数字,分别代表( * 代表任意 ):
    #    分钟 (0-59)
    #    小時 (0-23)
    #    日期 (1-31)
    #    月份 (1-12)
    #    星期 (0-6) #0 表示星期天
    #则 0 0 * * * mv /home/ftp/Up/* /home/ftp/Down 代表在0分0时的任意(每)一天都移动Up中的文件到Down下

2.2.5.重启vsftp服务,使配置生效

sudo service vsftpd restart

使用service vsftpd status 查看服务是否启动

 

2.2.6.更改防火墙配置

FTP (File Transfer Protocol) 的默认端口是 21。这是FTP服务器监听客户端连接请求的标准端口。当您使用FTP客户端软件连接到FTP服务器时,通常不需要特别指定端口,因为客户端会默认使用端口21进行连接。

SFTP (Secure File Transfer Protocol) 是基于SSH(Secure Shell)协议实现的安全文件传输协议。由于SFTP实际上是SSH的一部分,它使用与SSH相同的默认端口,即 22。这意味着要通过SFTP连接到服务器,客户端同样会默认连接到服务器的端口22。

总结来说:

  • FTP 的默认端口是 21。
  • SFTP 的默认端口是 22。(基于SSH协议实现文件传输,故使用SSH默认端口)
sudo ufw allow 22/tcp #允许sftp(默认端口22)
sudo ufw reload       #重启防火墙,使新规则生效
sudo ufw status       #查看防火墙状态

对于端口还有个被动模式和主动模式来固定端口范围,我配置到这里基本够用了,就没再继续研究了,待碰到了再说

2.2.7.测试(FileZilla)

 

2.3 搭建SFTP服务

SSH自带sftp。在SSH软件包中,已经包含了一个叫作SFTP的安全文件信息传输子系统,SFTP本身没有单独的守护进程,它必须使用sshd守护进程(端口号默认是22)来完成相应的连接和答复操作

权限配置参考: 2.2.4.权限控制(学习) 

防火墙配置参考 :  2.2.6.更改防火墙配置

SFTP的设置主要是基于ssh协议,主要配置文件/etc/ssh/sshd_config

1.创建用户

#创建共享目录
sudo mkdir /data/
sudo mkdir /data/share/

#创建SFTP用户,同时指定/data/share为其主目录(详细介绍请查看<搭建ftp中的创建用户目录>)
sudo useradd -d /data/share sftpshare
sudo passwd sftpshare

  此时就可以使用ssh远程连后台 和 使用sftp进行文件传输了

2.限制用户只能使用 SFTP,并禁止 SSH 登录。

#修改前可以备份下 以防万一
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config20240425.bak
#编辑ssh的配置文件(具体参数查看下面)
sudo vim /etc/ssh/sshd_config

#编辑完成后,需要重启ssh服务
sudo systemctl restart ssh

  在打开的/etc/ssh/sshd_config文件中找到 Subsystem sftp /usr/lib/openssh/sftp-server 注释掉并添加下面这些内容(另:一定要在UseDNS no行后添加!!不然启动会报错!!)

#Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp #指示SSH服务器在接收到SFTP服务请求时,使用OpenSSH内部提供的安全文件传输服务实现来处理这些请求。
#(internal-sftp 表示使用OpenSSH自带的内置SFTP服务器程序来处理SFTP请求,而不是指向一个外部的SFTP守护进程(如独立的sftp-server程序))
#Match Group sftp_users #指定用户组 (这个没试过,不过理解应该是:指定用户和指定用户组二选一,如果指定用户组,则限定此用户组下的所有用户) Match User sftpshare #指定用户 ForceCommand internal-sftp #指定sftp命令,不能ssh连接 PasswordAuthentication yes # 可选,如果需要密码认证 ChrootDirectory /data/share # 可选,限制用户访问的根目录(用chroot将用户的根目录指定到/data/share,这样用户就只能此根目录下活动) PermitTunnel no #禁止所有类型的SSH隧道 安全 AllowAgentForwarding no #禁止代理转发 安全 AllowTcpForwarding no #禁止tcp转发 安全 X11Forwarding no #禁止X11转发 安全

配置截图如下:

 重启SSH后,sftpshare用户ssh无法连接,sftp协议可连接但文件无权限,且此用户只能在/data/share目录下无权查看和访问上级目录,如下图

 用有root权限的用户使用sfpt协议连接,可看到 /data/share 文件路径 所有者和所属组均为root。权限为 rwx r-x r-x 即所有者有读写执行权限、所属组其他用户有读和执行权限、其他用户有读和执行权限

 执行如下命令。将/data/share/upload的所有者和所属组转移给 sftpshare用户和同名用户组。然后sftpshare在upload文件夹下就可以随意上传下载文件及文件夹了

cd /data/share
sudo mkdir upload   #新建upload文件夹
sudo chown sftpshare:sftpshare /data/share/upload  #将/data/share/upload的所有者和所属组转移给 sftpshare用户和同名用户组
sudo id sftpshare  #查看sftpshare用户详细信息(用户的主组和其他附加组以及用户ID(UID)和组ID(GID))

 注意,针对/data/share有要求,如下图(网上截图的)。故看来/data/share只能为root用户和用户组以及具备群组的写入权限,否则会报错呀(没亲自试验哈)。故就在/data/share下建文件夹,然后新新建目录进行权限操作。

 

如要开启 sftp日志打印(未亲测),如下:(参考:https://www.cnblogs.com/ariesblog/p/13753956.html

#修改sshd_config文件(vim /etc/ssh/sshd_config):
LogLevel INFO
Subsystem sftp internal-sftp -l INFO -f local5 ,
ForceCommand internal-sftp -l INFO -f local5
#然后修改 rsyslog_config文件(vim /etc/rsyslog.conf),添加
auth,authpriv.*,local5.* /var/log/sftp.log
#重启 rsyslog服务 和 重启 sshd服务
systemctl restart rsyslog
systemctl restart sshd.service

 

posted on 2024-04-24 09:52  东方飘雪  阅读(206)  评论(0编辑  收藏  举报