简述:linux版权限可能会不容易理解,可参考windwos做为基础。
一、FTP(linux版)
1. ftp详解
简介:
vsftpd 是“very secure FTP daemon”的缩写,安全性是它的一个最大的特点。
vsftpd 是一个 UNIX 类操作系统上运行的服务器的名字,它可以运行在诸如 Linux、BSD、Solaris、 HP-UNIX等系统上面,是一个完全免费的、开放源代码的ftp服务器软件,支持很多其他的 FTP 服务器所不支持的特征。
比如:非常高的安全性需求、带宽限制、良好的可伸缩性、可创建虚拟用户、支持IPv6、速率高等。
vsftpd是一款在Linux发行版中最受推崇的FTP服务器程序。特点是小巧轻快,安全易用。
特点:
①vsftpd 是以一般身份启动服务,所以对于 Linux 系统的使用权限较低,对于Linux 系统的危害就相对的减低了。此外, vsftpd 亦利用 chroot() 这个函式进行改换根目录的动作,使得系统工具不会被vsftpd 这支服务所误用;
②任何需要具有较高执行权限的 vsftpd 指令均以一支特殊的上层程序( parent process ) 所控制 ,该上层程序享有的较高执行权限功能已经被限制的相当的低,并以不影响Linux 本身的系统为准;
③所有来自 clients 端,想要使用这支上层程序所提供的较高执行权限之vsftpd 指令的需求,均被视为『不可信任的要求』来处理,必需要经过相当程度的身份确认后,方可利用该上层程序的功能。例如chown(), Login 的要求等等动作;
④此外,上面提到的上层程序中,依然使用 chroot() 的功能来限制使用者的执行权限。
参考:https://www.cnblogs.com/Sungeek/p/10148656.html
2. ftp一键搭建脚本
用户管理二次执行即可
默认主配置文件路径:/etc/vsftpd/vsftpd.conf
虚拟用户路径:/etc/vsftpd/vsftpd_user_conf/
改良版,执行安装脚本后,脚本、FTP用户、数据目录均在当前目录下。
#!/bin/bash
# Function :auto install ftp
# Platform :Centos7.9
# Author :2287
# Contact :zhp2287@sina.com
# date :2024-12-24secript_dir=$(cd $(dirname "$0");pwd)
ftp_data="${secript_dir}"/ftpchcek_friewalld(){echo "开始检查防火墙设置"systemctl status firewalld |grep runing & >/dev/nullif [ $? -ne 0 ]thenfirewall-cmd --add-port=21/tcp --zone=public --permanentfirewall-cmd --add-service=ftpfirewall-cmd --reloadfiif [ $? -eq 0 ]thenecho "防火墙开启成功"fiuseradd -s /sbin/nologin ftp
}
#搭建ftp
install_vsftp(){echo "开始安装vsftp 并且检查环境"yum -y install vsftpd libdb-utilsif [ $? -ne 0 ]thenecho "请检查你的yum源情况,是否出现无法用,可单独在终端执行 yum makecache 测试"exit 1fi#检查防火墙,开放21端口chcek_friewalldecho "开始配置ftp"mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf_bak#配置数据写入到配置文件cat >/etc/vsftpd/vsftpd.conf<<LWT
listen=yes
anonymous_enable=no
dirmessage_enable=YES
xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
chroot_local_user=yes
guest_enable=YES
guest_username=ftp
user_config_dir=/etc/vsftpd/vsftpd_user_conf
pam_service_name=vsftpd.vu
allow_writeable_chroot=YES
local_enable=YES
use_localtime=YES
LWTread -p "输入ftp用户:" ftp_userif [ ! -n "$ftp_user" ];thenftp_user=testfiread -p "输入ftp用户密码:" ftp_passwdif [ ! -n "$ftp_passwd" ];thenftp_passwd=123456ficd /etc/vsftpdecho $ftp_user >/etc/vsftpd/user.txtecho $ftp_passwd >>/etc/vsftpd/user.txtdb_load -T -t hash -f user.txt vsftpd_login.dbchmod 600 /etc/vsftpd/vsftpd_login.dbtouch /etc/pam.d/vsftpd.vuecho "判断此系统是32位操作系统还是64位"#判断centos系统位64位还是32位xd=`getconf LONG_BIT`if [ $xd -eq '64' ];thenecho "此系统为64位"echo "auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login" > /etc/pam.d/vsftpd.vuecho "account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login" >> /etc/pam.d/vsftpd.vuelseecho "auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login" > /etc/pam.d/vsftpd.vuecho "account required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login" >> /etc/pam.d/vsftpd.vufi#限制用户切换工作目录touch /etc/vsftpd/chroot_listecho $ftp_user >>/etc/vsftpd/chroot_list#配置虚拟用户的配置文件mkdir -p /etc/vsftpd/vsftpd_user_confcd /etc/vsftpd/vsftpd_user_conf#写入用户权限配置cat >$ftp_user <<LWT
write_enable=YES
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
LWTecho "local_root="$ftp_data/$ftp_user>>$ftp_usermkdir -p $ftp_datachown -R ftp:root $ftp_datachmod o+rw $ftp_datamkdir -p $ftp_data/$ftp_userchmod -R 777 $ftp_data/$ftp_usersystemctl restart vsftpd.service
}
#创建虚拟用户
create_user(){ftp_passwd=123456read -p "输入你要创建的用户名:" ftp_userif [ ! -n "$ftp_user" ];thenecho "你没有输入用户名,退出"exit 1elseread -p "输入密码:" ftp_passif [ ! -n "$ftp_pass" ];thenecho "密码没有输入,默认123456"elseftp_passwd=$ftp_passfificd /etc/vsftpdecho $ftp_user >>/etc/vsftpd/user.txtecho $ftp_passwd >>/etc/vsftpd/user.txtdb_load -T -t hash -f user.txt /etc/vsftpd/vsftpd_login.dbchmod 600 /etc/vsftpd/vsftpd_login.dbecho $ftp_user >>/etc/vsftpd/chroot_listcd /etc/vsftpd/vsftpd_user_confcat >$ftp_user<<LWT
write_enable=YES
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
LWTecho "local_root="$ftp_data/$ftp_user>>$ftp_usermkdir -p $ftp_data/$ftp_userchmod -R 777 $ftp_data/$ftp_user
}echo "输入你要操作的内容"
select var in install_vsftpd create_user quit
docase $var ininstall_vsftpd)install_vsftp;;;create_user)create_user;;quit)exit 1;;esac
done
参考链接:https://www.cnblogs.com/linyijia/p/13926325.html
2.1 FTP上传文件默认权限
上传文件默认权限本地用户
、虚拟用户
,可单独配置用户上传权限,可以全局定义,所有用户使用同一个权限;
全局配置:即在服务主配置文件修改
局部配置: 在某个用户配置文件中修改
umask详解
当系统创建一个新文件或目录时,它会根据一组默认的权限设置进行,这通常是 666(rw-rw-rw-)对于文件和 777(rwxrwxrwx)对于目录。
umask
值用于从这些默认权限中减去权限,从而得到实际的文件或目录权限。
umask
值由三个八进制数字组成,这些数字分别对应于文件所有者(user)、同组用户(group)、其他用户(others)的权限。每个数字的范围是 0 到 7,对应于二进制中的三位,分别表示读(4)、写(2)、执行(1)权限。权限位从默认值中被umask
指定的位减去。示例 umask 值
-
umask 022
:这是许多系统的默认设置。这意味着所有者具有完全权限(7-0=7),而组用户和其他用户不能写入(7-2=5)。对于文件,这转换为 644(rw-r--r--),对于目录,这转换为 755(rwxr-xr-x)。-
umask 002
:这是在团队环境中常用的设置,允许组内用户编辑文件。这使得组内用户拥有与文件所有者相同的权限,对于文件,结果权限为 664(rw-rw-r--),对于目录,结果为 775(rwxrwxr-x)。
local_umask=000
的含义在一些配置文件中,例如 FTP 服务器配置,您可能会看到
local_umask=000
的设置。这里的000
代表没有任何权限被从默认权限中减去。因此:
- 新创建的文件将具有 666 的权限,即
rw-rw-rw-
(因为执行位通常不适用于文件)。- 新创建的目录将具有 777 的权限,即
rwxrwxrwx
。安全注意事项
将
umask
设置为000
是非常开放的设置,它允许所有用户读写执行新文件和目录。这在大多数情况下是不安全的,因为它可能允许非授权用户访问或修改文件。通常,更保守的umask
值(如022
或027
)更适合维护系统安全。
# 文件默认权限 644
local_umask=000 # 本地用户
anon_umask=022 # 虚拟用户,当主配置文件和用户配置文件同时配置时,以用户配置为准(理解为全局、局部变量关系)
参考:https://blog.51cto.com/petermis/845000
官网:https://security.appspot.com/vsftpd/vsftpd_conf.html
anon_umask The value that the umask for file creation is set to for anonymous users. NOTE! If you want to specify octal values, remember the "0" prefix otherwise the value will be treated as a base 10 integer! Default: 077chown_upload_mode The file mode to force for chown()ed anonymous uploads. (Added in v2.0.6). Default: 0600
3. 性能
24 小时内,vsftpd 已提供 2.6TB(是的,TB 级)数据,同时在线用户数通常超过 1,500。这还是在一台机器上。
参考:https://security.appspot.com/vsftpd.html#performance
4. FTP常见问题
4.1 FTP时间戳相差8小时
# 配置文件指定时间,然后重启服务
vim /etc/vsftpd/vsftpd.confuse_localtime=YES
参考链接:https://blog.csdn.net/weixin_35763513/article/details/119601479
4.2 FTP中文乱码
FTP成功连接服务器后,出现乱码问题,如下图:
出现上述问题,一般是编码格式不对,解决办法如下:
1.点击 ftp上面的打开(或者“文件—打开”)按钮,会出现一个打开会话框
2.选中打开会话框中要设置的服务器,点击上面“属性”,会出现一个属性对话框
3.选择属性对话框中的“选项”页,将连接中的“使用UTF-8编码”对话框进行勾选,确定即可。连接成功后即正常显示。
参考链接:https://blog.csdn.net/s724842053/article/details/90748948
4.3 FTP删除文件夹失败
要删除FTP服务器上的文件夹时,必须确保文件夹下面没有其他文件,否则会删除失败!
可是,有些服务器考虑到安全等因素,通常会隐藏以点开始的文件名,例如“.test.txt”。于是,有的坏人就往服务器上上传以点开头的文件,我们在删除文件夹时,怎么也删不掉!!!
这时,我们使用FTP文件管理工具,强制显示隐藏的文件,就会发现隐藏的文件(以点开头的文件),删除它们,然后再删除文件夹,Done!
参考:https://blog.csdn.net/dhu86380/article/details/102064932
4.4 FTP软链接无法使用问题
简述:vsftpd本身不支持软连接,而在用FTP共享的时候又不想移动文件位置,这是一个变通方案。
Linux内核从2.4.0开始支持把一部分文件系统挂载到文件系统中的其他位置,mount命令的--bind选项正好提供了这个功能。
可以把需要共享的文件夹media/qfx/Qfx_01/挂载到FTP目录中的一个子目录上/srv/qfxFtp/Q_rmDisk/。这个目录对于vsftpd而言是一个正常文件系统的目录,于是就可以被共享了。当不需要共享目录时,直接umount即可。mount --bind命令本身支持单个文件的挂载,可以把目标文件挂载到另外一个文件上,起到类似于软链接的功能。同目录的挂载类似,这也是vsftpd支持的。
# 临时挂载
# mount --bind 源目录 目标目录
mount --bind /data1/nginx/secript /data1/ftp/public/secript###############################################################
# 永久挂载
# none 表示不需要文件系统类型指定。
# bind 指定这是一个绑定挂载。
# 0 0 分别表示不需要进行文件系统检查 (dump) 和启动时的挂载顺序 (pass)
vim /etc/fatab
/data1/nginx/secript /data1/ftp/public/secript none bind 0 0
参考:
https://blog.csdn.net/humanking7/article/details/87898889
https://blog.csdn.net/bianb123/article/details/103495754
4.6 客户端连接
4.6.1 MAC电脑连接FTP
mac电脑连接FTP客户端默认是无法连接的,记得好像是协议问题,需要在FTP服务器加配置,往往FTP已投产,时间花在这上面也不太值当, 客户端方便又高效同时也便于节点管理,快速解决办法,使用FTP客户端,Filezilla(支持mac电脑)
,xftp
,可爱的FTP
,当然还有其它很多种,自行选择即可。
参考:https://blog.51cto.com/jayjaydream/5622754
4.6.2 Filezilla FTP客户端
官网:https://filezilla-project.org/download.php?show_all=1
filezilla 语言设置
要将filezilla设置为简体中文,按照以下步骤进行操作:
- 打开FileZilla软件,在顶部菜单中选择Edit(编辑)。
- 在下拉菜单中选择Settings(设置)。
- 在language(语言)下拉菜单中选chinesesimplified(简体中文)。
- 单击0K按钮保存更改。
- 重新启动FileZil训la软件,就可以看到界面已经切换为简体中文了。
- 在弹出的窗口中,选择interface(界面)选项卡。
注意:如果FileZilla软件没有提供简体中文选项,可能需要下载并安装简体中文语言包才能实现。
参考:https://wenku.csdn.net/answer/0af6e200b4de47dbb45470a25194bd4d
使用参考:https://blog.csdn.net/u011608357/article/details/125016918
二、FTP(windows版)
点击查看
我希望、我希望你没有活在别人希望的希望里。