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
本文来自博客园,作者:东方飘雪,转载请注明原文链接:https://www.cnblogs.com/zdyang/p/18140273