对用户登陆ftp、ssh、telnet的权限进行控制
一、只允许登陆ftp,但禁止通过telnet或ssh登陆
使用root修改特定用户的shell环境,即执行:
这样,该用户就只能登陆ftp,而使用telnet或ssh登陆时,就会被转到/sbin/nologin下,禁止进入。
若使用telnet或ssh访问时,会提示:
Kernel 2.6.18-8.10AX on an i686
login: hyphen
Password:
Last login: Mon Feb 16 05:28:59 from server01
This account is currently not available.
二、只允许使用telnet或ssh登陆,但禁止登陆ftp
这个主要是由ftp服务端软件决定的,一般有两种做法:
b、由系统的PAM数据库管理用户权限。
1、服务端控制
以红旗Asianux 3.0为例,其自带的FTP服务端软件是vsftpd。
在/etc/vsftpd/vsftpd.conf下默认有:
这说明,vsftpd允许使用userlist文件,该文件是vsftpd控制用户访问权限的文件,系统默认在/etc/vsftpd/user_list。
另外,vsftpd还默认有
的设定。(配置文件中可能没明确显示)
该设定的意思是,user_list文件中列举的用户是deny(禁用)的。除这些用户外,其余都可以登陆。
这样,只要你把需要禁止的用户写入该文件:
# echo 'hyphen' >> /etc/vsftpd/user_list
使用ftp访问时,会报:
Connected to 192.168.16.128.
220 (vsFTPd 2.0.5)
User (192.168.16.128:(none)): hyphen
530 Permission denied.
Login failed.
※ 反过来,您可以在配置文件中,加入userlist_deny=NO,重启vsftpd服务后。那么,写在user_list文件中的用户,就是只允许这些用户登陆,其他用户都禁止了。作用刚好相反。
2、PAM控制
除/etc/vsftpd/user_list文件外,还可以使用系统的PAM对登陆FTP的用户进行控制,这就是/etc/vsftpd/ftpusers文件。
把刚才加入/etc/vsftpd/user_list的控制先去掉:
然后把需要禁止的用户写入ftpusers文件:
使用ftp访问时,会报:
Connected to 192.168.16.128.
220 (vsFTPd 2.0.5)
User (192.168.16.128:(none)): hyphen
331 Please specify the password.
Password:
530 Login incorrect.
Login failed.
即使您输入正确的用户密码,也会报530错误。
※ 这可以发现,报错信息会与之前的不同。禁止用户登陆的地方也与之前的不同,由FTP服务端控制的用户管理,在提示Password之前就提示禁止了,而使用PAM控制的方式,则会在验证密码时才会报错。由于用FTP服务端控制对系统的性能影响更少,推荐使用这种方式。
三、参考文档
Ubuntu禁止用户telnet与ssh登录,但允许FTP(整理)
如何限制某个用户只能FTP不能TELNET?
vsftp详细配置文件参考
vsftp配置文件说明