FTP服务器 怎么根据用户名 改变进入的目录

时间:2021-02-09 18:23:03
客户端用的是:leapftp 2.7.6 ,服务器自己写。
如果是root用户,就应该让他登入root目录,其他用户到 home 目录,
可是这个应该让客户端 发送CWD +目录 来实现呀,
我怎么来实现客户端会根据登入的用户不同 发送不同的目录路径呢? 

这是vsftp 服务器的应答:S
215 UNIX Type: L8
REST 100
350 Restart position accepted (100).
REST 0
350 Restart position accepted (0).
CWD /home/oracle    (这里,用户oracle 登入, 结果客户端会要求进入:/home/oracle 目录)
250 Directory successfully changed.
PWD
257 "/home/oracle"

///////////////////
这是我的服务器应答:
220 Service ready for new user
USER oracle        //用户是 oracle   
331 User name okay, need password
PASS xxxxxx
230 User logged in, proceed
SYST
215 Linux i686
REST 100
350 Restart position accepted (100)
REST 0
350 Restart position accepted (0)
CWD /        ( 这里,客户端 要求进入:root 目录,如何让它发送 CWD /home/oracle????);
200 not permit to change
PWD
257 /home    (这里是我自己在代码里修改的,其他用户进入/home 目录,直接chdir();)
TYPE A



还一个问题:当收到abor 中断的时候,如果有数据正在传输,我怎样判断是客户端 主动断开的数据连接,而不是已经读完了数据结束的?

9 个解决方案

#1


难道这里也没人吗~?o(︶︿︶)o 唉。

#2


你让客户端来发送他要登入到那个目录,出于安全考虑是不是应该放到服务器来做,不太清楚你的客户端会不会有恶意用户,底层socket是主动断开连接还是被动的是可以区分出来的所以上层应该是可以知道的, ftp的我也不是很清楚你可以到vc/mfc板块问问,

#3


你是自己想写ftp服务器还是想实现这样的功能?
想实现这样的功能的话大多数ftp服务器都可以设置的

#4


大哥大姐大侠们,多谢你们的关注,茅塞顿开,我明白了;

#5


客户端把第一次输入的用户名记下来,就行了,到CWD的时候自动一比对就发送相应的路径.
至于判断是否自动断开,根据每个数据包接收到的ack来判断,不是很难

#6


vsftpd 有这样的功能的 

参见: http://vsftpd.beasts.org/vsftpd_conf.html

user_config_dir 、user_sub_token 节点,

#7


服务器端,为每个用户保存一个home folder,当用户登录时,直接将用户的工作目录设置到home folder,并不允许用户在此基础上切换到更高层目录。

引用楼主 arsenal12 的回复:
客户端用的是:leapftp 2.7.6 ,服务器自己写。
如果是root用户,就应该让他登入root目录,其他用户到 home 目录,
可是这个应该让客户端 发送CWD +目录 来实现呀,
我怎么来实现客户端会根据登入的用户不同 发送不同的目录路径呢?

这是vsftp 服务器的应答:S
215 UNIX Type: L8
REST 100
350 Restart position accepted (100).
REST 0
350 Restart position accepted (0).
CWD /home/oracle (这里,用户oracle 登入, 结果客户端会要求进入:/home/oracle 目录)
250 Directory successfully changed.
PWD
257 "/home/oracle"

///////////////////
这是我的服务器应答:
220 Service ready for new user
USER oracle        //用户是 oracle 
331 User name okay, need password
PASS xxxxxx
230 User logged in, proceed
SYST
215 Linux i686
REST 100
350 Restart position accepted (100)
REST 0
350 Restart position accepted (0)
CWD /        (这里,客户端 要求进入:root 目录,如何让它发送 CWD /home/oracle????);
200 not permit to change
PWD
257 /home    (这里是我自己在代码里修改的,其他用户进入/home 目录,直接chdir();)
TYPE A


还一个问题:当收到abor 中断的时候,如果有数据正在传输,我怎样判断是客户端 主动断开的数据连接,而不是已经读完了数据结束的?

#8


另外,受到 abor时,就是说明用户主动放弃传输

#9


我一直都是这么做的,保存当前的工作目录,如果要切换高层目录就进行判断,list的时候就列出当前保存的目录。可是,每次转变目录,都要自己刷新,否则客户端都以为是在/目录下,他并不知道服务器的工作目录。
引用 6 楼 sciolist 的回复:
vsftpd 有这样的功能的

参见: http://vsftpd.beasts.org/vsftpd_conf.html

user_config_dir 、user_sub_token 节点,

#1


难道这里也没人吗~?o(︶︿︶)o 唉。

#2


你让客户端来发送他要登入到那个目录,出于安全考虑是不是应该放到服务器来做,不太清楚你的客户端会不会有恶意用户,底层socket是主动断开连接还是被动的是可以区分出来的所以上层应该是可以知道的, ftp的我也不是很清楚你可以到vc/mfc板块问问,

#3


你是自己想写ftp服务器还是想实现这样的功能?
想实现这样的功能的话大多数ftp服务器都可以设置的

#4


大哥大姐大侠们,多谢你们的关注,茅塞顿开,我明白了;

#5


客户端把第一次输入的用户名记下来,就行了,到CWD的时候自动一比对就发送相应的路径.
至于判断是否自动断开,根据每个数据包接收到的ack来判断,不是很难

#6


vsftpd 有这样的功能的 

参见: http://vsftpd.beasts.org/vsftpd_conf.html

user_config_dir 、user_sub_token 节点,

#7


服务器端,为每个用户保存一个home folder,当用户登录时,直接将用户的工作目录设置到home folder,并不允许用户在此基础上切换到更高层目录。

引用楼主 arsenal12 的回复:
客户端用的是:leapftp 2.7.6 ,服务器自己写。
如果是root用户,就应该让他登入root目录,其他用户到 home 目录,
可是这个应该让客户端 发送CWD +目录 来实现呀,
我怎么来实现客户端会根据登入的用户不同 发送不同的目录路径呢?

这是vsftp 服务器的应答:S
215 UNIX Type: L8
REST 100
350 Restart position accepted (100).
REST 0
350 Restart position accepted (0).
CWD /home/oracle (这里,用户oracle 登入, 结果客户端会要求进入:/home/oracle 目录)
250 Directory successfully changed.
PWD
257 "/home/oracle"

///////////////////
这是我的服务器应答:
220 Service ready for new user
USER oracle        //用户是 oracle 
331 User name okay, need password
PASS xxxxxx
230 User logged in, proceed
SYST
215 Linux i686
REST 100
350 Restart position accepted (100)
REST 0
350 Restart position accepted (0)
CWD /        (这里,客户端 要求进入:root 目录,如何让它发送 CWD /home/oracle????);
200 not permit to change
PWD
257 /home    (这里是我自己在代码里修改的,其他用户进入/home 目录,直接chdir();)
TYPE A


还一个问题:当收到abor 中断的时候,如果有数据正在传输,我怎样判断是客户端 主动断开的数据连接,而不是已经读完了数据结束的?

#8


另外,受到 abor时,就是说明用户主动放弃传输

#9


我一直都是这么做的,保存当前的工作目录,如果要切换高层目录就进行判断,list的时候就列出当前保存的目录。可是,每次转变目录,都要自己刷新,否则客户端都以为是在/目录下,他并不知道服务器的工作目录。
引用 6 楼 sciolist 的回复:
vsftpd 有这样的功能的

参见: http://vsftpd.beasts.org/vsftpd_conf.html

user_config_dir 、user_sub_token 节点,