学习目标:
ubuntu22.04安装ftp教程,测试上传文件
学习内容:
Ubuntu 系统默认是没有自带 FTP 服务的。不过,Ubuntu 提供了多种 FTP 服务器软件供你选择并安装使用,下面为你介绍一些常见的 FTP 服务器及其安装方式:
vsftpd
vsftpd
(Very Secure FTP Daemon)是一款在 Ubuntu 系统中广泛使用的 FTP 服务器软件,它以安全、稳定和高性能著称。
安装步骤
- 打开终端,使用以下命令更新软件包列表:
sudo apt update
- 安装
vsftpd
:
sudo apt install vsftpd
- 安装完成后,启动
vsftpd
服务:
sudo systemctl start vsftpd
- 可以设置
vsftpd
服务在系统启动时自动启动:
sudo systemctl enable vsftpd
访问 vsftpd 服务
在成功启动 vsftpd
服务后,你可以使用 FTP 客户端软件来访问该服务,具体步骤如下:
1. 确定服务器的 IP 地址
在 Ubuntu 系统中,你可以使用 ip addr
或 ifconfig
(如果已安装)命令来查看服务器的 IP 地址。例如:
ip addr
从输出结果中找到对应的网络接口(如 eth0
或 ens33
),查看其 inet
后面的 IP 地址。
2. 选择合适的 FTP 客户端
- Linux 系统:可以使用
ftp
或lftp
等命令行工具。例如使用ftp
命令:
ftp 192.168.1.3
按照提示输入用户名和密码进行登录。
客户端上传文件的默认位置
本地用户上传
对于本地用户,默认情况下,用户上传的文件会存放在其主目录下。例如,用户 testuser
的主目录是 /home/testuser
,那么该用户上传的文件就会存放在这个目录中。
1. 创建新用户
使用 adduser
命令创建一个新用户,例如创建一个名为 ftpuser
的用户:
sudo adduser ftpuser
执行上述命令后,系统会提示你输入该用户的密码,你需要设置一个安全的密码。接着还会提示你输入一些额外信息(如全名、房间号等),你可以根据需要输入或直接按回车键跳过。
2. 设置用户权限
为了让该用户能够上传和下载文件,你需要确保用户对相关目录有适当的权限。
2.1 更改用户主目录权限
通常用户上传的文件会存放在其主目录下,你可以使用 chmod
命令来修改主目录的权限。例如,将 ftpuser
的主目录权限设置为 755
:
sudo chmod 755 /home/ftpuser
2.2 确保 vsftpd
允许本地用户登录
编辑 /etc/vsftpd.conf
配置文件,确保以下配置项存在且设置正确:
local_enable=YES
write_enable=YES
可以使用以下命令打开配置文件进行编辑:
sudo nano /etc/vsftpd.conf
修改完成后,按 Ctrl + X
组合键,然后按 Y
保存修改,最后按回车键确认。
3. 重启 vsftpd
服务
修改配置文件后,需要重启 vsftpd
服务使配置生效:
sudo systemctl restart vsftpd
4. 测试用户登录
你可以使用 FTP 客户端(如 ftp
命令行工具)来测试新用户是否能够登录。例如:
ftp 127.0.0.1
在提示输入用户名时输入 ftpuser
,输入之前设置的密码,若能成功登录,则表示用户创建和配置成功。
使用 ftp
命令行工具登录并新建文件上传到ftp
1. 在本地创建一个空文件
首先,在本地创建一个空文件,例如名为 test.txt
的文件(注意目录位置最好创建在当前目录下,并在该目录登录ftp):
touch test.txt
2. 连接到 FTP 服务器
使用 ftp
命令连接到 FTP 服务器,假设服务器 IP 地址是 17.10.1.3
,并使用之前创建的 ftpuser
用户登录:
ftp 17.10.1.3
按照提示输入用户名 ftpuser
和对应的密码。
3. 上传文件
登录成功后,在 ftp>
提示符下使用 put
命令上传文件:
put test.txt
执行该命令后,test.txt
文件就会被上传到 FTP 服务器上用户的主目录中。上传完成后,你可以使用 ls
命令查看服务器上的文件列表,确认文件是否上传成功:
ls
4. 退出 FTP 连接
上传完成后,使用 quit
命令退出 FTP 连接:
quit
若要让上传的文件默认对系统用户 baiyangling
具有 777
权限,可结合 FTP 服务器的配置与 Linux 系统文件权限的设置来实现,以下以 vsftpd
为例进行详细说明。
1. 配置 vsftpd
上传文件的默认权限
vsftpd
使用 local_umask
参数来控制上传文件的默认权限,需要修改该参数来达到预期效果。
- 编辑配置文件:使用以下命令打开
vsftpd
的配置文件:
sudo nano /etc/vsftpd.conf
- 设置
local_umask
:在配置文件中找到或添加local_umask
这一行,并将其值设置为000
。这是因为umask
是用于在创建文件或目录时屏蔽掉某些权限的,000
表示不屏蔽任何权限,上传的文件默认就会具有最大权限。
local_umask=000
- 保存并退出:按
Ctrl + X
,然后按Y
确认保存,最后按回车键退出编辑器。
2. 重启 vsftpd
服务
修改配置文件后,需要重启 vsftpd
服务让新配置生效:
sudo systemctl restart vsftpd
3. 确保文件所属用户和组的设置
要保证上传的文件所属用户和组设置正确,以便 baiyangling
用户能有相应权限。一般上传文件默认属于执行 FTP 操作的用户,如果想让上传文件默认属于 baiyangling
,可以借助 setfacl
命令(前提是系统支持 ACL)或者在文件上传后修改文件的所有者。
方法一:使用 ACL(访问控制列表)
ACL 可以为特定用户或组添加额外的权限。
- 安装
acl
工具(如果未安装):
sudo apt-get install acl
- 设置默认 ACL:设置上传目录的默认 ACL,让
baiyangling
用户对新创建的文件有777
权限。假设上传目录是/home/ftpuser
,执行以下命令:
sudo setfacl -d -m u:baiyangling:rwx /home/ftpuser
这里 -d
表示设置默认 ACL,-m
表示修改,u:baiyangling:rwx
表示为用户 baiyangling
赋予读、写、执行权限。
setfacl -d -m u:baiyangling:rwx /home/ftpuser
这个命令是用来设置 /home/ftpuser
目录的默认访问控制列表(ACL),意味着后续在该目录下创建的新文件和子目录,用户 baiyangling
会有读(r)、写(w)、执行(x)权限。但执行后 baiyangling
仍无法直接删除新上传的文件,可能有以下几种原因及解决办法:
1. 权限继承问题
虽然设置了默认 ACL,但可能由于文件上传方式的原因,新文件没有继承默认 ACL。
2. 挂载选项问题
如果 /home/ftpuser
所在的文件系统挂载时没有启用 ACL 支持,那么设置的 ACL 不会生效。
检查方法
可以使用 mount
命令查看文件系统的挂载选项:
mount | grep /home/ftpuser
如果输出中没有 acl
选项,说明未启用 ACL 支持。
解决办法
需要重新挂载文件系统并添加 acl
选项。首先,找到该文件系统对应的分区,一般可以通过 /etc/fstab
文件查看。假设对应的分区是 /dev/sda2
,先卸载该分区:
sudo umount /home/ftpuser
然后重新挂载并启用 ACL:
sudo mount -o remount,acl /dev/sda2 /home/ftpuser
为了让系统在每次启动时都自动以 ACL 支持挂载该分区,需要编辑 /etc/fstab
文件,在对应的挂载行添加 acl
选项。例如:
/dev/sda2 /home/ftpuser ext4 defaults,acl 0 0
使用 lsblk
命令可以查看系统中所有块设备(如硬盘、U盘 等)的信息,它以树形结构展示设备的层次关系。
lsblk
输出示例如下:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 465.8G 0 disk
├─sda1 8:1 0 512M 0 part /boot/efi
├─sda2 8:2 0 16G 0 part [SWAP]
└─sda3 8:3 0 449.3G 0 part /
sdb 8:16 0 931.5G 0 disk
└─sdb1 8:17 0 931.5G 0 part /data
从输出中你可以确认 /dev/sdb1
是否存在,以及它的挂载点(如果已挂载)、大小等基本信息。
挂载并设置支持ACL,以达到通过ftpuser这个用户上传到/home/ftpuser这个文件夹下的文件baiyangling这个用户具备所有权限**
要实现将 /dev/sdb1
挂载到 /home/ftpuser
并支持 ACL,且让 baiyangling
用户对上传到该目录下的文件拥有所有权限,可以按照以下步骤操作:
1. 检查和安装 ACL 支持
首先要确保系统已经安装了 acl
工具包,可使用以下命令进行安装(以 Ubuntu 为例):
sudo apt-get update
sudo apt-get install acl
2. 备份 /home/ftpuser
目录下的数据(如果有)
sudo cp -r /home/ftpuser /home/ftpuser_backup
3. 创建挂载点
如果 /home/ftpuser
目录不存在,需要创建该目录:
sudo mkdir -p /home/ftpuser
4. 挂载 /dev/sdb1
到 /home/ftpuser
并启用 ACL
使用以下命令进行挂载:
sudo mount -o defaults,acl /dev/sdb1 /home/ftpuser
这里的 -o
参数用于指定挂载选项,defaults
表示使用默认的挂载选项,acl
表示启用 ACL 支持。
5. 设置目录和文件的默认 ACL
为了让 baiyangling
用户对 /home/ftpuser
目录下新创建的文件和目录拥有所有权限,需要设置默认的 ACL。
sudo setfacl -d -m u:baiyangling:rwx /home/ftpuser
-d
选项表示设置默认 ACL,-m
选项用于修改 ACL 规则,u:baiyangling:rwx
表示为 baiyangling
用户授予读(r
)、写(w
)和执行(x
)权限。
6. 为 baiyangling
用户设置当前目录的 ACL
除了默认 ACL,还需要为 baiyangling
用户设置当前 /home/ftpuser
目录的 ACL:
sudo setfacl -m u:baiyangling:rwx /home/ftpuser
7. 验证 ACL 设置
可以使用以下命令查看 /home/ftpuser
目录的 ACL 设置:
getfacl /home/ftpuser
输出应该显示 baiyangling
用户具有读、写和执行权限。
8. 设置自动挂载
为了让 /dev/sdb1
在系统重启后自动挂载到 /home/ftpuser
并启用 ACL,需要将挂载信息添加到 /etc/fstab
文件中。首先获取 /dev/sdb1
的 UUID:
sudo blkid /dev/sdb1
然后编辑 /etc/fstab
文件:
sudo nano /etc/fstab
在文件末尾添加如下一行(使用刚才获取的 UUID):
UUID=xxxxxx /home/ftpuser ext4 defaults,acl 0 0
保存并退出编辑器(在 nano
中按 Ctrl + X
,再按 Y
确认保存,最后按 Enter
键退出)。
9. 验证 /etc/fstab
文件语法
sudo mount -a
如果没有报错,说明 /etc/fstab
文件语法正确,下次系统重启时 /dev/sdb1
会自动挂载到 /home/ftpuser
目录并启用 ACL。
10. 恢复数据(如果之前备份了)
sudo cp -r /home/ftpuser_backup/* /home/ftpuser
完成以上步骤后,ftpuser
用户上传到 /home/ftpuser
目录下的文件,baiyangling
用户将具备所有权限。
将本地的 test.txt 文件上传到 FTP 服务器根目录下的 sw_ftp 目录的命令及操作步骤。
使用 ftp
工具
# 1. 连接到 FTP 服务器,将 server_address 替换为实际的服务器地址
ftp server_address
# 输入用户名和密码登录
# 2. 切换到本地文件所在目录,假设 test.txt 在当前用户的家目录下
lcd ~
# 3. 切换到服务器上的 sw_ftp 目录
cd sw_ftp
# 4. 上传本地的 test.txt 文件到服务器的 sw_ftp 目录
put test.txt
# 5. 退出 FTP 会话
quit
普通删除文件
如果你确定要删除当前目录下的 test.txt
文件,使用 rm
命令是最常见的做法。在终端中输入以下命令并回车:
rm test.txt
执行该命令后,test.txt
文件会被直接删除,且不会放入回收站,而是被永久移除。
强制删除文件
一般情况下不建议使用,但如果你遇到文件具有特殊权限,普通删除可能提示权限不足或遇到只读文件时,可以使用 -f
选项进行强制删除:
rm -f test.txt
使用 -f
选项时,系统不会提示确认信息,会直接删除文件。不过使用该选项需要谨慎,因为可能会在你未充分确认的情况下删除重要文件。