1.常用登陆方式:
格式:sftp <user>@<host>
通过sftp连接<host>,端口为默认的22,指定用户<user>。
2.查看sftp支持的命令
使用help命令,查看支持的命令,如:
sftp>help
(其中命令前面有“l”表示本地执行,其他表示在所登录的远程主机上面执行)
3.基本的使用
sftp主要是用来传输文件的,包括上传文件(从本机到远程主机) ,下载文件(从远程主机到本机)。
(1)文件下载
get [-Ppr] remote [local]
如:get test.cpp ./Project/
将远程当前目录下的文件test.cpp下载到本地当前目录的Project文件夹中。
(2)文件上传
put [-Ppr] local [remote]
如:put /home/liu/Software/RHEL_5.5\ x86_64.iso /home/xudong/Blog/
将本地/home/liu/Software/目录下的ios文件传送到远程登陆主机的/home/xudong/Blog/目录下。
(3)其他命令
可以使用命令还是有几个的,如ls、lls;cd、lcd;pwd、lpwd等。具体查看help输出吧。
4. 查看登录时的服务器和本机的当前目录:
你如果不知道远程主机的目录是什么样, pwd命令可以帮您查询远程主机的当前路径。查询本机当前工作目录 lpwd.
5. 其他命令:改变路径可以用cd ,改变本机路径可以用 lcd;
ls rm rmdir mkdir 这些命令都可以使用。同理调用本机都是加 l , 即 lls lrm.
要离开sftp,用exit 或quit、 bye 均可。详细情况可以查阅 man sftp.
如果觉得在命令行模式下不太方便,可以 sudo apt-get install gftp。在图形界面下操作就简便多了。
匿名用户登陆FTP:
默认配置文件里开启了匿名访问(anonymous_enable=YES),只需要使用默认的匿名用户名ftp或anonymous,密码为空登陆即可
Linux访问FTP服务:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
[root@justin ~] # lftp 10.15.72.38
lftp 10.15.72.38:~> cdpub cdok, cwd= /pub
lftp 10.15.72.38: /pub > ls
-rw-r--r-- 1 0 0 4 Dec 26 06:11 111.txt -rw-r--r-- 1 0 0 2006 Dec 09 06:23 CentOS6-Base-163.repo -rw-r--r-- 1 0 0 1706 Nov 16 2001 RPM-GPG-KEY-CentOS-6 -rw-r--r-- 1 0 0 37052 Nov 16 2001 python-iniparse-0.3.1-2.1.el6.noarch.rpm -rw-r--r-- 1 0 0 1019540 Dec 09 04:30 yum-3.2.29-40.el6.centos.noarch.rpm -rw-r--r-- 1 0 0 27140 Nov 16 2001 yum-metadata-parser-1.1.2-16.el6.i686.rpm -rw-r--r-- 1 0 0 28220 Nov 16 2001 yum-plugin-fastestmirror-1.1.30-14.el6.noarch.rpm lftp 10.15.72.38: /pub > get 111.txt
4 bytes transferred lftp 10.15.72.38: /pub > get CentOS6-Base-163.repo
2006 bytes transferred lftp 10.15.72.38: /pub > quit
[root@justin ~] # ls
111.txt anaconda-ks.cfg CentOS6-Base-163.repo install .log install .log.syslog
[root@justin ~] # lftp 10.15.72.38
lftp 10.15.72.38:~> put anaconda-ks.cfg put: Access failed: 550 Permission denied. (anaconda-ks.cfg) lftp 10.15.72.38:/> |
下载的文件默认放在用户当前登陆的目录,所以用户一定要对当前的目录有写入权限
开启匿名用户上传功能:
默认情况下,ftp的根目录为/var/ftp,为了安全,这个目录默认不允许设置为777权限,应该是750 或者 755;否则ftp将无法访问。但是我们要匿名上传文件,需要“other”用户的写权限,正确的做法:
在/var/ftp中建立一个upload(名子自己起吧)文件夹
客户端登陆ls提示:226 Transfer done (but failed to open directory).
检查selinux,关闭selinux:
关闭SELinux的方法:
修改/etc/selinux/config文件中的SELINUX="" 为 disabled ,然后重启。
如果不想重启系统,使用命令setenforce 0
注:
setenforce 1 设置SELinux 成为enforcing模式
setenforce 0 设置SELinux 成为permissive模式
另外还可:
在终端输入 setsebool ftpd_disable_trans 1 然后service vsftpd restart重启vsftp服务。
如果输入上述命令时出现:Could not change active booleans: Invalid boolean
是因为SELinux的问题接着在终端输入:setsebool ftp_home_dir=1 重启vsftp服务即可解决问题。
1、上传目录ftp用户有写入权限
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
[root@justin ~] # cd /var/ftp/
[root@justin ftp ] # ll
总用量 4 drwxr-xr-x 2 root root 4096 12月 26 15:18 pub [root@justin ftp ] # mkdir upload
[root@justin ftp ] # ll
总用量 8 drwxr-xr-x 2 root root 4096 12月 26 15:18 pub drwxr-xr-x 2 root root 4096 12月 26 15:23 upload [root@justin ftp ] # chown ftp upload/
[root@justin ftp ] # ll
总用量 8 drwxr-xr-x 2 root root 4096 12月 26 15:18 pub drwxr-xr-x 2 ftproot 4096 12月 26 15:23 upload [root@justin ftp ] #
|
2、修改配置文件,使服务器配置支持上传
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
[root@justin ftp ] # vim /etc/vsftpd/vsftpd.conf
17 # Uncomment this to enable any form of FTP write command.
18 write_enable=YES 21 # if your users expect that (022 is used by most other ftpd's)
22 local_umask=022 23 anon_umask=022 24 # Uncomment this to allow the anonymous FTP user to upload files. This only
25 # has an effect if the above global write enable is activated. Also, you will
26 # obviously need to create a directory writable by the FTP user.
27 anon_upload_enable=YES 28 #
29 # Uncomment this if you want the anonymous FTP user to be able to create
30 # new directories.
31 anon_mkdir_write_enable=YES 32 #
|
取消27和31行的注释,anon_upload_enable设置是否允许匿名用户上传文件,默认为YES,开启该项须设置全局的write_enable=YES,anon_mkdir_write_enable设置是否允许匿名用户创建新文件夹,默认为YES且不启用,anon_umask设置匿名用户的umask值。umask值是一种反码的形式,当匿名用户在FTP主目录中创建目录或文件时,目录或文件所具有的默认权限就是由umask值决定的。由于对于目录,我们所能拥有的最大权限是777,对于文件,我们所能拥有的最大权限是666。因为x执行权限对于目录是必须的,没有执行权限就无法进入目录;而对于文件则不必默认赋予x执行权限。所以对于匿名用户创建的目录,默认的权限就是用777减去umask值,即755;对于创建的文件,默认的权限则是用666减去umask值,即644
3、确认SELinux为关闭状态
1
2
3
|
[root@justin ftp ] # sestatus
SELinux status: disabled [root@justin ftp ] #
|
1
2
3
4
|
[root@justin ftp ] # /etc/init.d/vsftpd restart
关闭 vsftpd: [确定] 为 vsftpd 启动 vsftpd: [确定] [root@justin ftp ] #
|
4、重启服务
1
2
3
4
|
[root@justin ftp ] # /etc/init.d/vsftpd restart
关闭 vsftpd: [确定] 为 vsftpd 启动 vsftpd: [确定] [root@justin ftp ] #
|
5、匿名登陆上传文件
1
2
3
4
|
[root@justin ftp ] # cd /var/ftp/upload/
[root@justin upload] # ls
check_traffic.docx [root@justin upload] #
|
上传的文件匿名是无法删除的
anon_other_write_enable=YES #容许匿名用户除了新建和上传外的其他权限,如:删除、更名。
如果要修改主目录:
local_root=/var/www/html
chroot_local_user=YES
anon_root=/var/www/html
注:local_root 针对系统用户;anon_root 针对匿名用户。
禁用匿名用户登陆
1
2
|
# Allow anonymous FTP? (Beware - allowed by default if you comment this out). anonymous_enable=NO |
如果此时本地用户也不允许登陆连接ftp时会提示500 OOPS: vsftpd: both local and anonymous access disabled!
开启匿名登陆弹出验证窗口:
配置文件里anonymous_enable=YES,同时指定了密码用户访问的目录anon_root=/app/ftp,登陆时候会弹出帐号密码筐,这时可以检查ftp用户的的家目录是否为/app/ftp
可选项
1
|
#anon_max_rate= 5000 |
设置匿名用户传输的最大速率,单位B(0为不限制)
1
|
#chown_uploads=YES |
匿名用户上传文件是否更改文件的拥有者(拥有组仍是FTP)匿名用户建立文件夹,拥有者仍是FTP
1
|
#chown_username=ftp |
更改后的拥有者。
1
|
#anon_umask=700 |
同local_umask
本地用户登陆FTP:
FTP主配置文件中默认允许本地用户访问,访问后进入的是该用户的家目录,即对该目录有写权限,写入的umask是022
1
2
3
4
5
6
7
8
9
10
11
|
[root@justin ~] # vim /etc/vsftpd/vsftpd.conf
14 # Uncomment this to allow local users to log in.
15 local_enable=YES 16 #
17 # Uncomment this to enable any form of FTP write command.
18 write_enable=YES 19 #
20 # Default umask for local users is 077. You may wish to change this to 022,
21 # if your users expect that (022 is used by most other ftpd's)
22 local_umask=022 23 #
|
1、不管源文件权限如何,上传后文件根据由local_umask=xxxx决定,777-xxx;
2、不管源文件权限如何,也不管xxx是否屏蔽1可执行,上传文件都不可执行。上传后的文件永远不可执行。
3、 默认xxx为177(0077)
4.、 建立目录权限为700
以下为可选项
1
|
#local_max_rate=50000 |
设置本地用户传输的最大速率50k(0为不限制)
1
2
3
4
5
|
# users to NOT chroot(). #chroot_local_user=YES #chroot_list_enable=YES # (default follows) #chroot_list_file=/etc/vsftpd/chroot_list |
1、是否囚监本地用户使其不能切换到自家目录。
2、表示转折开启囚监列表功能,在列表中的用户可是例外。
3、囚监列表文件的存放位置。
1
2
3
|
#userlist_enable=YES #userlist_deny=YES | NO #userlist_file=/etc/vsftpd/userlist_file |
是否开启userlist访问控制功能。
列表中的用户是否被禁止访问,YES禁止列表中的用户。NO除列表中用户外都被禁止。当NO时,只有在列表中加入“ftp”匿名用户才可以访问。或加入“anonymous”,anonymous才可以访问。当最终文件拥有者仍为“ftp”用户。userlist_file指定列表文件
1
|
#local_root=/app |
默认没有此参数,将本地用户引导到自家目录当中,也可加入此参数,指定本地用户来登录后进入其他目录中。
创建本地账户:
1
2
3
4
5
6
7
|
[root@justin ~] # useradd localftp
[root@justin ~] # echo "ftp"|passwd --stdin localftp
更改用户 localftp 的密码 。 passwd : 所有的身份验证令牌已经成功更新。
[root@justin ~] # cat /etc/passwd |grep localftp
localftp:x:515:515:: /home/localftp : /bin/bash
[root@justin ~] #
|
确认SELinux状态:
本机SELinux为关闭状态
1
2
3
|
[root@justin ~] # sestatus
SELinux status: disabled [root@justin ~] #
|
如果SELinux是开启的,需要让SELinux允许用户在家目录里写入数据
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
[root@justin ~] # getsebool -a|grep ftp
allow_ftpd_anon_write --> off allow_ftpd_full_access --> off allow_ftpd_use_cifs --> off allow_ftpd_use_nfs --> off ftp_home_dir --> off ftpd_connect_db --> off ftpd_use_passive_mode --> off httpd_enable_ftp_server --> off tftp_anon_write --> off [root@justin ~] # setsebool -P ftp_home_dir on
[root@justin ~] # getsebool -a|grep ftp
allow_ftpd_anon_write --> off allow_ftpd_full_access --> off allow_ftpd_use_cifs --> off allow_ftpd_use_nfs --> off ftp_home_dir --> on ftpd_connect_db --> off ftpd_use_passive_mode --> off httpd_enable_ftp_server --> off tftp_anon_write --> off [root@justin ~] #
|
Windows访问FTP服务:
系统用户可以随意切换到任何有访问权限的其他目录,这样会带来一些不安全因素,一般会限制在该账户的家目录里
1
2
3
4
5
6
7
8
9
10
|
# directory. If chroot_local_user is YES, then this list becomes a list of # users to NOT chroot(). chroot_local_user=YES #chroot_list_enable=YES # (default follows) #chroot_list_file=/etc/vsftpd/chroot_list [root@justin ~] # service vsftpd reload
关闭 vsftpd: [确定] 为 vsftpd 启动 vsftpd: [确定] [root@justin ~] #
|
开启chroot_local_user,这样所有本地用户都只能在自己的家目录,如果要让部分本地用户在自己家目录可以开启chroot_list_enable项,通过chroot_list_file指定的文件来设置,chroot_list默认不存在,需要手动添加。此时再切换就会失败
如果要指定用户到非家目录的根目录
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
[root@dsj xhcj] # vim /etc/vsftpd/vsftpd.conf
local_enable=YES write_enable=YES anon_upload_enable=YES anon_mkdir_write_enable=YES local_root= /app/dsj/WebDsj/php/app_wxapi/xhcj #设定所有本地用户登陆后的目录
#anon_root=/app/dsj/WebDsj/php/app_wxapi/xhcj #匿名用户登录后的目录 chroot_local_user=YES #锁定用户到各自目录为其根目录
user_config_dir= /etc/vsftpd/userconfig #用户配置文件目录
[root@dsj xhcj] # mkdir /etc/vsftpd/userconfig
[root@dsj xhcj] # cd !$
cd /etc/vsftpd/userconfig
[root@dsj userconfig] # cat xhcj #一个用户一个文件,文件名对应用户名
local_root= /app/dsj/WebDsj/php/app_wxapi/xhcj
[root@dsj userconfig] # service vsftpd restart
|
默认设置下,FTP服务器中的所有系统用户都可以访问FTP服务,也就是说只要是系统里存在的用户都可以链接FTP服务,如果只允许或禁止部分用户,可以通过修改系统的/etc/vsftpd/ftpusers、/etc/vsftpd/user_list文件来设定:
-
/etc/vsftpd/ftpusers:文件中包含的用户账号将被禁止登录vsftpd服务器,不管该用户是否在/etc/vsftpd/user_list文件中是否出现。
12345678910111213141516[root@justin ~]
# cat /etc/vsftpd/ftpusers |grep -v "#"
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody
[root@justin ~]
#
-
/etc/vsftpd/user_list:文件中包含的用户账户可能被禁止登录,也可能被允许登录,文件中用户是否可以登陆由主配置文件vsftpd.conf决定。当存在“userlist_enable=YES”的配置项时,表示启用文件/etc/vsftpd/user_list,如果此时再配置“userlist_deny=YES”,则表示禁止列表中的用户账户登录,如果配置“userlist_deny=NO”,则仅允许列表中的用户账户登录。
12345678910111213141516[root@justin ~]
# cat /etc/vsftpd/user_list |grep -v "#"
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody
[root@justin ~]
#
如果需要拒绝localftp用户登陆可以直接在文件/etc/vsftpd/ftpusers里添加该用户,重启服务后就无法登陆,或者在/etc/vsftpd/user_list里添加该用户(经过测试,系统默认userlist_deny=YES),重启服务后该用户无法访问,要是该用户可以访问需要添加userlist_deny=NO,重启服务后即可访问,
Linux访问FTP服务:
禁止了匿名访问后直接使用lftp 10.15.72.38无法访问,此时正确的方式为lftp localftp@10.15.72.38
1
2
3
4
5
6
7
8
9
10
|
[root@justin ~] # lftp localftp@10.15.72.38
Password: lftp localftp@10.15.72.38:~> ls
-rw-r--r-- 1 0 0 2006 Dec 09 06:23 CentOS6-Base-163.repo -rw-r--r-- 1 0 0 1706 Nov 16 2001 RPM-GPG-KEY-CentOS-6 -rw-r--r-- 1 0 0 37052 Nov 16 2001 python-iniparse-0.3.1-2.1.el6.noarch.rpm -rw-r--r-- 1 0 0 1019540 Dec 09 04:30 yum-3.2.29-40.el6.centos.noarch.rpm -rw-r--r-- 1 0 0 27140 Nov 16 2001 yum-metadata-parser-1.1.2-16.el6.i686.rpm -rw-r--r-- 1 0 0 28220 Nov 16 2001 yum-plugin-fastestmirror-1.1.30-14.el6.noarch.rpm lftp localftp@10.15.72.38:/> |
虚拟用户登陆FTP:
所谓虚拟用户是指存放于独立数据库文件中的FTP用户账号,可以将他们映射到某个不能登录的系统用户账号上,以进一步增强FTP服务器的安全性。vsftpd服务的虚拟用户数据库是使用Berkeley DB格式的数据库文件,建立数据库文件需要用到db_load命令工具,db_load工具是由db4-utils软件包提供。
-
检查是否安装db-utils软件包
123[root@justin ~]
# rpm -qa|grep db4-utils
db4-utils-4.7.25-17.el6.i686
[root@justin ~]
#
-
创建虚拟用户数据库文件
创建一个存放虚拟用户的文本文件(文件一般是保存在/etc/vsftpd目录中),各用户名和密码独立为一行,奇数行表示用户名,偶数行为上一行用户所对用的密码,然后通过db_load将文本文件转化问db格式的数据库文件,为了提高虚拟用户账号的安全性,将这两个存放虚拟用户账号的文件的权限都设为600,即只有root用户具有读取和写入权限。
123456789101112131415161718[root@justin ~]
# touch /etc/vsftpd/virtual.txt
[root@justin ~]
# echo "virtual1" > !$
echo
"virtual1"
>
/etc/vsftpd/virtual
.txt
[root@justin ~]
# echo "123" >> /etc/vsftpd/virtual.txt
[root@justin ~]
# echo "virtual2" >> /etc/vsftpd/virtual.txt
[root@justin ~]
# echo "123" >> /etc/vsftpd/virtual.txt
[root@justin ~]
# cat !$
cat
/etc/vsftpd/virtual
.txt
virtual1
123
virtual2
123
[root@justin ~]
# db_load -T -t hash -f /etc/vsftpd/virtual.txt /etc/vsftpd/virtual.db
[root@justin ~]
# chmod 600 /etc/vsftpd/virtual.*
[root@justin ~]
# ll /etc/vsftpd/virtual.*
-rw------- 1 root root 12288 12月 27 16:03
/etc/vsftpd/virtual
.db
-rw------- 1 root root 26 12月 27 16:01
/etc/vsftpd/virtual
.txt
[root@justin ~]
#
“-T”选项表示允许非Berkeley DB的应用程序使用从文本格式转换的DB数据库文件,“-t hash”选项指定读取数据文件的基本方法,“-f”选项用于指定数据的源文件。
-
创建虚拟用户的映射账号
vsftpd服务对虚拟用户采用了映射的控制方式,把所有的虚拟用户账号都对应到了同一个系统用户账号上,并将这个系统用户的主目录作为所有虚拟用户登录后共用的FTP根目录。
1
2
3
4
5
|
[root@justin ~] # useradd -d /var/virtual -s /sbin/nologin virtual
[root@justin ~] # chmod 755 /var/virtual/
[root@justin ~] # ll -d /var/virtual/
drwxr-xr-x 4 virtual virtual 4096 12月 27 16:27 /var/virtual/
[root@justin ~] #
|
-
创建PAM认证文件
PAM在Linux系统中提供了统一的身份验证机制,认证文件都统一存放在/etc/pam.d/目录中。虚拟用户的身份认证也是通过PAM机制来实现的,PAM是Linux系统中的一个独立API(应用程序接口),它提供了各种验证模块以供其它程序调用。当这些程序需要进行用户身份验证的操作时,就可以直接调用PAM的相应模块,
1
2
3
|
[root@justin pam.d] # vim /etc/pam.d/vsftpd.vu
auth required pam_userdb.so db= /etc/vsftpd/virtual
account required pam_userdb.so db= /etc/vsftpd/virtual
|
“db=/etc/vaftpd/virtual”参数指定了要使用的虚拟用户数据库文件的位置,这里不需要写“.db”的扩展名。
-
主配置文件中添加支持虚拟用户
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
[root@justin pam.d] # cat /etc/vsftpd/vsftpd.conf|egrep -v "#|:"|sed '/^[[:space:]]*$/d'
anonymous_enable=NO local_enable=YES write_enable=YES local_umask=022 dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES xferlog_std_format=YES chroot_local_user=YES listen=YES pam_service_name=vsftpd userlist_enable=YES tcp_wrappers=YES guest_enable=YES guest_username=virtual pam_service_name=vsftpd.vu user_config_dir= /etc/vsftpd/vuser
anon_umask=022 [root@justin pam.d] # service vsftpd reload
关闭 vsftpd: [确定] 为 vsftpd 启动 vsftpd: [确定] [root@justin pam.d] #
|
guest_enable=YES 表示启用虚拟用户映射功能
guest_username=virtual 表示指定所映射的系统用户名称;
pam_service_name=vsftpd.vu 表示指定PAM认证文件。
user_config_dir=/etc/vsftpd/vuser 表示虚拟用户配置文件的存放目录,通过该目录可以控制不同虚拟用户的权限,如使virtual1用户可以上传、下载(系统默认可以下载),virtual2只能下载(系统默认可以下载,所以不需要对virtual2配置)可通过如下操作:
1
2
3
4
|
[root@justin pam.d] # mkdir /etc/vsftpd/vuser
[root@justin pam.d] # vim /etc/vsftpd/vuser/virtual1
anon_upload_enable=YES anon_mkdir_write_enable=YES |
anon_umask=022 在vsftpd服务中,虚拟用户被默认作为匿名用户进行处理以降低权限,因此对应的配置项通常以anon_开头。虚拟用户的一切权限也可以参考匿名用户项设置如在vsftpd.conf配置文件中添加配置项“aono_upload_enable=YES”和“anon_mkdir_write_enable=YES”,便可以使虚拟用户具备上传权限
至此就可以通过虚拟用户virtual1、vitrual2登陆FTP服务:
以下为可选项
1
|
#user_config_dir=/etc/vsftpd/config |
设置放置虚拟用户各自的配置文件,以该用户名字命名
error:
530 Permission denied
检查配置文件中是否设置了userlist_enable=YES,此项设为YES,则只允许user_list文件中的用户允许登录FTP服务器,文件中不包含的用户不能登陆,若此项设置为NO,user_list文件中的用户不允许登录FTP服务器,而如果同时设置了userlist_deny=YES,则user_list文件中的用户将不允许登录FTP服务器,甚至连输入密码提示信息都没有,而userlist_deny=NO,user_list文件中的用户将允许登录FTP服务器
userlist_enable=YES
userlist_deny=YES
userlist_file=/etc/vsftpd/user_list
530 Login incorrect
一、先检查vsftpd的配置文件是否正常。检查了/etc/vsftpd目录,以及vsftpd.conf配置文件,查看/etc/vsftpd/user_list和/etc/vsftpd/ftpusers文件中,是否有限制登录的帐号
二、查看/etc/vsftpd/vsftpd.conf文件中的相关配置,是否启用pam
pam_service_name=vsftpd PAM认证文件
查看/etc/pam.d/vsftpd文件
注释掉auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed行,或者把指定用户去掉
本文转自 justin_peng 51CTO博客,原文链接:http://blog.51cto.com/ityunwei2017/1345792,如需转载请自行联系原作者