注:关闭匿名登陆以后,默认目录不在是/var/ftp/put
了,而是 用户的目录【/home中,比如ccx用户,则默认目录就是/home/ccx
】,关闭匿名登陆以后,访问方法是ftp://ip
进去默认就是家目录,如果后面跟路径了,可能就回报550权限问题了【限windows】
测试
我先在ccx家目录中创建一些文件,可以看到ccx用户的编译器是nologin的哦。
打开windows,输入:ftp://ip
,输入用户名和密码
登陆以后就可以看到了这些文件了
上传下载删除新建都是可以正常使用的
敲黑板,注意,我上面说过这段话,如果没注意看,可能就会产生下面错误了
我现在访问在位置栏输入:/ftp://ip/pub/
访问就会报下面的550错误,这个是无法解决的!!!
修改默认家目录
如果不修改的话,我们通过不同用户登陆进去的,都是在这个用户的家目录里面【比如:/home/ccx, /home/ccx1, /home/ccx2】
但是修改了这个默认家目录以后,所有的用户登陆进去都在这个指定目录里面了。
这个不建议配置,除非你知道自己的在干什么。
一般情况都是不修改默认目录,但开启目录限制,就是每个用户登陆进去只能看到自己家目录的内容不能切换到其他目录【一般在linux上可以体现,linux可以cd切换目录,下面有说明】
新增行: local_root=/data/ccx
#后面/data/ccx为路径
为路径根文件设置777权限,否则后面会无法操作:chmod 777 -R /data
【家目录不用是修改是因为家目录默认777权限】
[root@centos76_2 ccx]# vim /etc/vsftpd/vsftpd.conf
新增在任意位置即可
local_root=/data/ccx
allow_writeable_chroot=YES #2.3.5之后,如果用户被限定在了其主目录下,则该用户的主目录不能再具有写权限了,需新增此配置
[root@centos76_2 ccx]# mkdir -p /data/ccx #创建默认目录
[root@centos76_2 ccx]# chmod 777 -R /data
[root@centos76_2 ccx]#
[root@centos76_2 ccx]# touch /data/ccx/test{1…3} #创建几个默认文件夹测试用
[root@centos76_2 ccx]# ls /data/ccx/
test1 test2 test3
[root@centos76_2 ccx]#
[root@centos76_2 ccx]# systemctl restart vsftpd
测试
我使用ccx1这个用户测试,我先在这个家目录下创建几个文件,以便于后面区别是否配置成功
[root@centos76_2 ccx]# cd
[root@centos76_2 ~]# touch /home/ccx1/ccx1{1…3}
[root@centos76_2 ~]# ls /home/ccx1
ccx11 ccx12 ccx13
我们在地址栏把这个/
去掉回车就可以重新登陆了哦【windows】
登陆 ccx1
登陆进来以后看到是test文件【如果不是可以尝试刷新一下当前页面】,修改成功,2个文件夹是刚才创建的【有操作权限】
如果不修改权限为777的话,就无法创建文件这些操作了【刚去把权限改为755了】
linux上也是正常查看的,只是目录变成/
了
[root@centos76_1 ~]# ftp 192.168.59.129
Connected to 192.168.59.129 (192.168.59.129).
220 (vsFTPd 3.0.2)
Name (192.168.59.129:root): ccx1
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (192,168,59,129,199,12).
150 Here comes the directory listing.
-rw-r–r-- 1 0 0 0 May 06 04:03 test1
-rw-r–r-- 1 0 0 0 May 06 04:03 test2
-rw-r–r-- 1 0 0 0 May 06 04:03 test3
226 Directory send OK.
ftp> pwd
257 “/”
ftp>
目录限制配置
默认情况当前用户登陆ftp后可以来回切换文件系统,如果开启,就不能来回切换目录,只能查看编辑当前目录内容了。
这个需要用linux做测试了,未修改前如下,可以正常切换所有目录
[root@centos76_1 ~]# ftp 192.168.59.129 #登陆
Connected to 192.168.59.129 (192.168.59.129).
220 (vsFTPd 3.0.2)
Name (192.168.59.129:root): ccx # 输入用户名
331 Please specify the password.
Password: #输入密码
230 Login successful. #登陆成功提升
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pwd #默认家目录
257 “/home/ccx”
ftp> cd /var/ftp/ #可以切换目录
250 Directory successfully changed.
ftp> ls
227 Entering Passive Mode (192,168,59,129,56,40).
150 Here comes the directory listing.
drwxr-xr-x 2 0 0 6 Apr 30 04:04 file_test
drwxrwxrwx 5 0 0 84 Apr 30 09:31 pub
226 Directory send OK.
ftp> cd pub
250 Directory successfully changed.
ftp> ls
227 Entering Passive Mode (192,168,59,129,187,216).
150 Here comes the directory listing.
drwxr-xr-x 2 0 0 6 Apr 30 03:56 file1
drwxr-xr-x 2 0 0 6 Apr 30 03:56 file2
drwxr-xr-x 2 0 0 6 Apr 30 03:56 file3
-rw-r–r-- 1 0 0 34 Apr 30 09:03 test1
-rw-r–r-- 1 0 0 4 Apr 30 03:57 test2
-rw-r–r-- 1 0 0 0 Apr 30 03:56 test3
226 Directory send OK.
ftp> get test1 # 可以下载其他目录中的文件
local: test1 remote: test1
227 Entering Passive Mode (192,168,59,129,85,16).
150 Opening BINARY mode data connection for test1 (34 bytes).
226 Transfer complete.
34 bytes received in 0.000346 secs (98.27 Kbytes/sec)
ftp>
-
配置
-
增加内容为:开启chroot选项
allow_writeable_chroot=YES
- 取消注释 指定本地用户不能翻目录
chroot_local_user=YES
[root@centos76_2 ccx]# vim /etc/vsftpd/vsftpd.conf
#大概在102行,取消注释下列行内容,我是在取消注释前面添加的这个行呢
快速跳到102行的方法,vim进去以后,按102再按G即可,临时开启行号显示,:set nu
前面的102序号是行号,不要加啊!
102 allow_writeable_chroot=YES
103 chroot_local_user=YES
[root@centos76_2 ccx]# systemctl restart vsftpd
上面这样说这样能看懂吗? 如下图,102行是我新增的,103行是我取消注释的。
测试
上面步骤做完以后,我们再次使用ftp登陆该服务器,可以看到登陆进去以后,目录变成/
了,而非家目录全程,并且再次切换目录就会报550错误呢,配置完成。
[root@centos76_1 ~]# ftp 192.168.59.129
Connected to 192.168.59.129 (192.168.59.129).
220 (vsFTPd 3.0.2)
Name (192.168.59.129:root): ccx
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pwd
257 “/”
ftp> ls
227 Entering Passive Mode (192,168,59,129,230,53).
150 Here comes the directory listing.
drwxr-xr-x 2 0 0 6 May 06 03:29 home_ccx
drwxr-xr-x 2 1000 1000 6 May 06 03:34 新文件夹
drwxr-xr-x 2 1000 1000 6 May 06 03:34 新文件夹 (2)
226 Directory send OK.
ftp> cd /etc/
550 Failed to change directory.
ftp>
注:上面新增的行,不要敲错代码了,如果敲错以后,登陆会变成如下样子,并且是无法做任何操作的。
[root@centos76_1 ~]# ftp 192.168.59.129
Connected to 192.168.59.129 (192.168.59.129).
220 (vsFTPd 3.0.2)
Name (192.168.59.129:root): ccx
331 Please specify the password.
Password:
500 OOPS: vsftpd: refusing to run with writable root inside chroot()
Login failed.
421 Service not available, remote server has closed connection
ftp>
ftp> ls
Not connected.
只允许用户列表中用户切换目录【白名单】
-
说明,这个功能不是说只允许列表中用户登陆ftp,而是说列表中的用户不受功能限制,比如下面限制了本地用户不能翻目录,但列表中的用户依然是可以翻目录的【其他用户只能登陆到家目录不能切换其他目录】,就是这样,之前我以为是这个只允许列表中用户登陆ftp,其他用户无法登陆,折腾了很久,发现是我理解错了。
-
chroot_list_enable=YES
开启代表用户列表文件/etc/vsftpd/chroot_list
中的用户可以访问【需要在/etc/vsftpd
目录下创建文件chroot_list
,在文件中写入用户名,一行一个用户】,未在文件中列出的用户不能访问 -
需要修改3处
-
首先开启chroot选项,添加:
allow_writeable_chroot=YES
【已添加忽略】 -
取消注释 指定本地用户不能翻目录 ,
chroot_local_user=YES
-
最后取消注释,指定用户列表文件的用户可以访问
chroot_list_enable=YES
#和上面是配套使用的
[root@centos76_2 ~]# vim /etc/vsftpd/vsftpd.conf
103 allow_writeable_chroot=YES
104 chroot_local_user=YES
105 chroot_list_enable=YES
[root@centos76_2 ~]# systemctl restart vsftpd
[root@centos76_2 ~]# cd /etc/vsftpd/
[root@centos76_2 vsftpd]# ls
ftpusers user_list vsftpd.conf vsftpd_conf_migrate.sh
[root@centos76_2 vsftpd]# vim chroot_list # 创建允许登陆的用户
hero1
hero2
[root@centos76_2 vsftpd]# useradd -s /sbin/nologin hero1 #创建用户名和密码
[root@centos76_2 vsftpd]# useradd -s /sbin/nologin hero2
[root@centos76_2 vsftpd]# echo hero1|passwd --stdin hero1
Changing password for user hero1.
passwd: all authentication tokens updated successfully.
[root@centos76_2 vsftpd]# echo hero2|passwd --stdin hero2
Changing password for user hero2.
passwd: all authentication tokens updated successfully.
[root@centos76_2 vsftpd]#
测试
注意看命令中的说明
[root@centos76_1 ~]# ftp 192.168.59.129
Connected to 192.168.59.129 (192.168.59.129).
220 (vsFTPd 3.0.2)
Name (192.168.59.129:root): ccx #先登陆未在列表中的用户
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls # 能进入到家目录【我设置默认目录了】
227 Entering Passive Mode (192,168,59,129,122,26).
150 Here comes the directory listing.
-rwxrwxrwx 1 0 0 0 May 06 04:03 test1
-rw-r–r-- 1 0 0 0 May 06 04:03 test2
-rw-r–r-- 1 0 0 0 May 06 04:03 test3
226 Directory send OK.
ftp> cd /var/ftp #切换路径会报错
550 Failed to change directory.
ftp> ls
227 Entering Passive Mode (192,168,59,129,244,220).
150 Here comes the directory listing.
-rwxrwxrwx 1 0 0 0 May 06 04:03 test1
-rw-r–r-- 1 0 0 0 May 06 04:03 test2
-rw-r–r-- 1 0 0 0 May 06 04:03 test3
226 Directory send OK.
ftp> 221 Goodbye.
[root@centos76_1 ~]# ftp 192.168.59.129
Connected to 192.168.59.129 (192.168.59.129).
220 (vsFTPd 3.0.2)
Name (192.168.59.129:root): hero1 # 登陆在列表中的用户
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls #进入到默认路径了
227 Entering Passive Mode (192,168,59,129,56,190).
150 Here comes the directory listing.
-rwxrwxrwx 1 0 0 0 May 06 04:03 test1
-rw-r–r-- 1 0 0 0 May 06 04:03 test2
-rw-r–r-- 1 0 0 0 May 06 04:03 test3
226 Directory send OK.
ftp> cd /var/ftp # 能正常切换目录
250 Directory successfully changed.
ftp> ls
227 Entering Passive Mode (192,168,59,129,19,221).
150 Here comes the directory listing.
drwxr-xr-x 2 0 0 6 Apr 30 04:04 file_test
drwxrwxrwx 5 0 0 84 Apr 30 09:31 pub
226 Directory send OK.
ftp>
扩展说明
-
在默认配置下,本地用户登入FTP后可以使用cd命令切换到其他目录,这样会对系统带来安全隐患。可以通过以下三条配置文件来控制用户切换目录。
-
chroot_list_enable=YES/NO
#设置是否启用chroot_list_file配置项指定的用户列表文件。默认值为NO。
用户名存放文件:/etc/vsftpd.chroot_list
,一行一个白名单用户,用于指定用户列表文件,该文件用于控制哪些用户可以切换到用户家目录的上级目录。
-
chroot_local_user=YES/NO
#用于指定用户列表文件中的用户是否允许切换到上级目录。默认值为NO。 -
通过搭配能实现以下几种效果:
-
①当
chroot_list_enable=YES,chroot_local_user=YES
时,在/etc/vsftpd.chroot_list文件中列出的用户,可以切换到其他目录;未在文件中列出的用户,不能切换到其他目录。 -
②当
chroot_list_enable=YES,chroot_local_user=NO
时,在/etc/vsftpd.chroot_list文件中列出的用户,不能切换到其他目录;未在文件中列出的用户,可以切换到其他目录。 -
③当
chroot_list_enable=NO,chroot_local_user=YES
时,所有的用户均不能切换到其他目录。 -
④当
chroot_list_enable=NO,chroot_local_user=NO
时,所有的用户均可以切换到其他目录。
禁止某些用户登陆
/etc/vsftpd/ftpusers
这个是系统默认的黑名单,这里面的用户也是直接被拒绝的,但我们不用这种方法,用其他方法,继续往下看。
-
额,就是不想让某些用户访问ftp
-
命令说明
-
userlist_deny=YES
/默认没有这一项,与下面这条参数:userlist_file=/etc/vsftpd/localuser_list
结合使用。
userlist_file=/etc/vsftpd/localuser_list
/默认没有这一项, 与上面参数:userlist_deny=YES结合使用此参数用,来改变存放可以登录或禁止登录的账号,suerlist_deny为YES时,这里面的用户则不能登录,当为NO时,这里面的用户可以登录,和/etc/vsftpd/user_list是一个意思
- 过程见下面,后面说明,不懂就认真看。
[root@centos76_2 userconfig]# vim /etc/vsftpd/vsftpd.conf
我是在最后添加的下面2行
userlist_deny=YES
userlist_file=/etc/vsftpd/localuser_list
[root@centos76_2 vsftpd]# systemctl restart vsftpd
[root@centos76_2 userconfig]# cd /etc/vsftpd/
[root@centos76_2 vsftpd]# vim localuser_list #创建不允许登陆的用户名,一行一个
ccx
superman1
测试
因为上面限制了ccx和superman1不能正常登陆,所以我登陆这2个用户直接连输密码的机会都不给我。
[root@centos76_1 ~]# ftp 192.168.59.129
Connected to 192.168.59.129 (192.168.59.129).
220 (vsFTPd 3.0.2)
Name (192.168.59.129:root): ccx #输入用户名就结束了
530 Permission denied.
Login failed.
ftp> ls
530 Please login with USER and PASS.
Passive mode refused.
ftp> 221 Goodbye.
[root@centos76_1 ~]# ftp 192.168.59.129
Connected to 192.168.59.129 (192.168.59.129).
220 (vsFTPd 3.0.2)
Name (192.168.59.129:root): superman1 #输入用户名就结束了
530 Permission denied.
Login failed.
ftp> ls
530 Please login with USER and PASS.
Passive mode refused.
ftp>
这放一个正常的康康
[root@centos76_1 ~]# ftp 192.168.59.129
Connected to 192.168.59.129 (192.168.59.129).
220 (vsFTPd 3.0.2)
Name (192.168.59.129:root): ccx1
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> 221 Goodbye.
配置多用户登陆
-
这个功能可能有点鸡肋,就是为了不同用户登陆进去进入到不同的路径,和不指定默认家目录唯一不同的区别就是这个可以指定路径罢了。
-
注:我当前ftp已经配置了默认家目录
-
配置
命令:新增一行user_config_dir=/etc/vsftpd/userconfig
#用户配置目录【多用户的时候,设置各个用户登录自己的目录】
mkdir创建/etc/vsftpd/userconfig文件夹,然后在文件夹中vim编辑需要配置的用户名,内容是:local_root=/file
【口述的过程,看不懂不要紧,下面命令有详细过程 】
- 过程看命令介绍吧,跟着命令流程走
[root@centos76_2 vsftpd]# vim vsftpd.conf
我是在最后新增的下面行内容
user_config_dir=/etc/vsftpd/userconfig
[root@centos76_2 vsftpd]# systemctl restart vsftpd
[root@centos76_2 vsftpd]# cd /etc/vsftpd
[root@centos76_2 vsftpd]# mkdir userconfig
[root@centos76_2 vsftpd]# cd userconfig
[root@centos76_2 userconfig]# vim superman1 #superman1是用户名
#这个命令其实就是修改默认家目录的命令,后面是自定义路径
local_root=/ftp/superman1
[root@centos76_2 userconfig]# vim superman2 #superman2是用户名
#这个命令其实就是修改默认家目录的命令,后面是自定义路径
local_root=/ftp/superman2
[root@centos76_2 userconfig]# useradd -s /sbin/nologin superman1 #创建用户名
[root@centos76_2 userconfig]# useradd -s /sbin/nologin superman2 #创建用户名
[root@centos76_2 userconfig]# echo superman1 | passwd --stdin superman1 # 设置密码
Changing password for user superman1.
passwd: all authentication tokens updated successfully.
[root@centos76_2 userconfig]# echo superman2 | passwd --stdin superman2
Changing password for user superman2.
passwd: all authentication tokens updated successfully.
[root@centos76_2 userconfig]#
[root@centos76_2 userconfig]# mkdir -p /ftp/superman1 #创建路径文件
[root@centos76_2 userconfig]# mkdir -p /ftp/superman2 #创建路径文件
[root@centos76_2 userconfig]# touch /ftp/superman1/superman{1…3} #创建几个文件,便于测试是否成功
[root@centos76_2 userconfig]# touch /ftp/superman2/superman{4…6}
[root@centos76_2 userconfig]#
测试
登陆superman1
内容是刚创建的【如果内容没变,可以刷新该页面】,成功。
superman2我用linux登陆
[root@centos76_1 ~]# ftp 192.168.59.129
Connected to 192.168.59.129 (192.168.59.129).
220 (vsFTPd 3.0.2)
Name (192.168.59.129:root): superman2 # 登陆
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls # 可以看到下面的文件确实是自定义里面的内容,成功
227 Entering Passive Mode (192,168,59,129,97,210).
150 Here comes the directory listing.
-rw-r–r-- 1 0 0 0 May 06 10:19 superman4
-rw-r–r-- 1 0 0 0 May 06 10:19 superman5
-rw-r–r-- 1 0 0 0 May 06 10:19 superman6
226 Directory send OK.
ftp> cd /etc/ # 这个是不能切换路径的,如果要切换路径,把这个用户名加到上面配置的白名单列表中哈
550 Failed to change directory.
ftp>
注:除了刚才创建的superman1和superman2用户,其他用户都是前面的默认家目录而非自定义目录呢,测试
登陆进来是这样的
21端口修改为区间【修改一个也说明】
- 修改默认21简单的多,直接添加下面这行,后面21改为想修改的端口即可
listen_port=21
/默认没有这一行 #ftp监听端口
-
如字面意思,修改端口。不知道自己在干嘛不要操作这个,否则会导致ftp没法使用。
-
最后一行添加如下3行即可
-
pasv_enable=YES
-
pasv_min_port=59601
-
pasv_max_port=59611
【vsftpd被动模式配置,命令端口21 控制端口59601-59611】
[root@centos76_2 vsftpd]# vim vsftpd.conf
可以添加在最后一行,初始端口和结尾端口自定义
pasv_enable=YES
pasv_min_port=59601
pasv_max_port=59611
[root@centos76_2 vsftpd]# systemctl restart vsftpd
说明
-
在linux,使用vsftp建立用户后,默认使用ftp访问的时候,是访问对应的用户家目录。想要多个用户同时访问一个目录,同时对同一目录有着不同的权限,这些设定只能通过vsftp中的虚拟用户来进行设定,普通用户无法达到这样的效果。
-
配置过程:
首先通过建立一个普通系统用户,建立家目录,然后将所有的虚拟用户映射到对应的普通系统用户家目录,然后对各虚拟用户进行权限控制,虚拟用户没有查看目录的权限。
配置【demo说明】
-
这里我以一个测试做说明,原理会了,用户功能增删改就行;
-
要求
-
yb1只能进行下载
-
yb2能进行下载和上传
-
对下载/上传流量进行控制
配置过程
(1)操作虚拟用户列表并生成认证文件
- 建立虚拟用户的用户名、密码列表的文本文件
[root@centos76_2 vsftpd]# vim /etc/vsftpd/vsftp_users.conf
#下面一行用户名一行密码【奇数行用户名,偶数行密码】
#下面的用户名和密码是虚拟出来的,本地用户中不存在下列用户名和密码
yb1
yb1_passwd
yb2
yb2_passwd
~
- 用db_load转换工具,将文本文件(上一步所建立的文件)转化为数据库文件
#如果是最小化安装,没有db_load命令【完整安装忽略这步】,先安装命令:yum -y install db4-utils
【可以先执行下面命令,有命令忽略这步】
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Linux运维工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Linux运维全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Linux运维知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加VX:vip1024b (备注Linux运维获取)
建立虚拟用户的用户名、密码列表的文本文件
[root@centos76_2 vsftpd]# vim /etc/vsftpd/vsftp_users.conf
#下面一行用户名一行密码【奇数行用户名,偶数行密码】
#下面的用户名和密码是虚拟出来的,本地用户中不存在下列用户名和密码
yb1
yb1_passwd
yb2
yb2_passwd
~
- 用db_load转换工具,将文本文件(上一步所建立的文件)转化为数据库文件
#如果是最小化安装,没有db_load命令【完整安装忽略这步】,先安装命令:yum -y install db4-utils
【可以先执行下面命令,有命令忽略这步】
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Linux运维工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Linux运维全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
[外链图片转存中…(img-1MaXAUbj-1712522693938)]
[外链图片转存中…(img-OZ1wg6w9-1712522693938)]
[外链图片转存中…(img-rwK94hW5-1712522693939)]
[外链图片转存中…(img-SQbDKXnV-1712522693939)]
[外链图片转存中…(img-rGZzLr0Q-1712522693939)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Linux运维知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加VX:vip1024b (备注Linux运维获取)
[外链图片转存中…(img-dEKPJAfh-1712522693940)]