2:允许匿名用户登录访问FTP资源;
因为匿名用户登录到FTP服务器后,实际上是一个"ftp"用户的身份进行所有操作,所以出于安全考虑,
这个用户的权限通常被设置得很低。比如:
1:不为该用户提供一个可用的shell,使其无法登录系统;
2:没有一个可用的密码(即FAQ上说的"This account shouldn't have a usable password;");
3:登录系统后被chroot;
......
接下来我们要做的就是按照上面列出的三个要求来添加和设置这个低权限、处处受限的"ftp"用户。 2.1:添加"ftp"帐户以提供匿名访问; 2.1.1:在/etc/shells中添加一个无法实际使用的shell:
设置"ftp"使用这个shell的目的,是不允许它通过shell登录到系统中。通常我们会有两种选择: /sbin/nologin
/usr/bin/false
为了在添加用户时可以使用这两个shell,我们可以这样做:
# echo '/sbin/nologin' >>/etc/shells
# echo '/usr/bin/false' >>/etc/shells
或者在未将它们加入到/etc/shells的情况下,在使用adduser添加帐户时加上"-shell"参数: # adduser -shell /sbin/nologin
Enter username []: ftp
Enter full name []: anonymous ftpd user
Enter shell bash csh ksh nologin sh [/sbin/nologin]: ......
这里在询问该用户使用何种shell时就出现了 /sbin/nologin 。如果不带这个参数,将无法使用它: # adduser
Enter username []: ftp
Enter full name []: anonymous ftpd user
Enter shell bash csh ksh nologin sh [bash]: /sbin/nologin
/sbin/nologin: is not allowed!
Enter shell bash csh ksh nologin sh [bash]:
这里就提示了不允许使用 /sbin/nologin 做为shell使用。
这里使用"adduser -s shell /sbin/nologin"来添加一个这样的"ftp"帐户做为示例,并将该用户的
$HOME目录设置为"/var/ftp": # adduser -shell /sbin/nologin -home /var
Use option ``-silent'' if you don't want to see all warnings and questions. Reading /etc/shells
Check /etc/master.passwd
Check /etc/group Ok, let's go.
Don't worry about mistakes. I will give you the chance later to correct any input.
Enter username []: ftp Enter full name []: anonymous ftpd user Enter shell bash csh ksh nologin sh [/sbin/nologin]:ENTER Uid [1001]:ENTER Login group ftp [ftp]:ENTER Login group is ``ftp''. Invite ftp into other groups: guest no
[no]:ENTER Login class daemon default staff [default]:ENTER Enter password []:ENTER # 在此直接按ENTER键。这样就可以设置一个不可用的密码。 Set the password so that user cannot logon? (y/n) [n]: y Name: ftp
Password: ****
Fullname: anonymous ftpd user
Uid: 1001
Gid: 1001 (ftp)
Groups: ftp
Login Class: default
HOME: /var/ftp
Shell:
OK? (y/n) [y]: y Added user ``ftp''
Copy files from /etc/skel to /var/ftp
Add another user? (y/n) [y]: n Goodbye!
#
到这里,添加用户的工作就完成了。还需要把从 /etc/skel 复制到 $HOME 目录的一些"dot files"给删除,
以免暴露信息。"dot files"的第一行通常会有一些系统的信息,比如"~/.cshrc"文件中就有这么一句: # $OpenBSD: dot.cshrc,v 1.5 2005/02/16 06:56:57 matthieu Exp $
这至少就告诉了匿名登录的用户,这是个OpenBSD系统。所以把它们删除: # rm -f /var/ftp/.* 3:为/var/ftp目录设置正确的权限以保证安全性; 3.1:"~ftp"目录; "~ftp"目录表示"ftp"用户的主目录,在本例中就是"/var/ftp"目录。
将它的owner设置为"root",权限设置为任何人都不可写(555): # chown -R root:wheel /var/ftp
# chmod -R 555 /var/ftp 3.2:"~ftp/bin"目录;
这个目录并不是必须的。如果希望匿名用户登录到FTP后能够执行一些command,就可以将command
复制到这个目录下。所有的command的权限都应该设置为只允许执行(111)。 # mkdir /var/ftp/bin # chown -R root:ftp /var/ftp/bin #COPY YOUR PROGRAMS TO /var/ftp/bin,AND THEN: # chmod -R 111 /var/ftp/bin/* 3.3:"~ftp/etc"目录;
和"~ftp/bin"目录一样,这也是个可选的,并不推荐创建它。(更多关于该目录设置的信息请查看"ftpd"
的man文档)。 3.4:"~ftp/pub"目录:
这个目录用来存放你希望被匿名用户访问的文件。权限应该设置为555。
# chown -R root:ftp /var/ftp/pub
# chmod -R 555 /var/ftp/pub
这里虽然提到了创建三个目录,但是实际上我们只需要创建"~ftp/pub"目录并设置好权限就可以了。 4:chroot匿名登录的用户;
"ftpd"会将"/etc/ftpchroot"文件中列出的用户都chroot。要使"ftp"用户在登录ftp后被chroot,只需要简单
地把用户名添加到这个文件中就可以了。这是一个示例文件: # file : /etc/ftpchroot # $OpenBSD: ftpchroot,v 1.3 1996/07/18 12:12:47 deraadt Exp $ # # list of users (one per line) given ftp access to a chrooted area. # read by ftpd(8). ftp bibby
"ftpd"在启动时会读取这个文件,如果"ftp"和"bibby"这两个用户登录ftp,将被分别chroot到自己的$HOME目录下。 5:其他一些相关文件; /etc/ftpusers -- 列出了所有不受欢迎的用户。列在该文件中的用户都无法登录ftp。 /etc/ftpwelcome -- 欢迎信息。登录上ftp的用户都将在登录时看到这一信息。 /etc/motd -- 如果"/etc/ftpwelcome"文件不存在,则使用"/etc/motd"文件的内容做为欢迎信息。 .message -- 这个文件可以被放置在"~ftp"目录下的任何一个子目录中。用户进入该目录时就会显示这个文件中的内容。