主要内容:

FTP/MAIL/SSH等服务等配置


wu-ftpd的基本配置

wu-ftpd的主要配置文件
/etc/ftpaccess ftpd configuration file
/etc/ftpconversions ftpd conversions database
/etc/ftphosts ftpd individual user host access file
/etc/ftpusers list of users disallowed any ftp access


/etc/ftpusers - 禁止ftp用户登陆的列表

缺省情况下, 主要包括系统用户和特权用户.
root, bin, daemon, adm, lp,
sync, shutdown, halt, mail, news,
uucp, operator, games, nobody
可以将希望禁止ftp登陆的用户加入到这个文件中

注意: 登陆运行程序如果不包括在/etc/shells中这个用户也无法通过ftpd登录


/etc/ftphosts 用户与地址访问表

指令:
 allow <username> <addrglob> [<addrglob> ...]
 deny <username> <addrglob> [<addrglob> ...]

<addrglob>是格式可以是: address/cidr 或 address:netmask
比如192.168.8.0/24和192.168.8.0:255.255.255.0


/etc/ftpconversions 文件转换配置文件

配置指令共分8节, 用:隔开
%1:%2:%3:%4:%5:%6:%7:%8
  1. Strip Prefix
  2. Strip Postfix
  3. Addon Prefix
  4. Addon Postfix
  5. External Command
  6. Types
  7. Options
  8. Description
当get命令中的文件名, 与实际文件名符合匹配的时候, 执行相应的操作.
例子:
 :.Z: : :/bin/compress -d -c %s:T_REG|T_ASCII:O_UNCOMPRESS:UNCOMPRESS
ftp当前目录下有个文件名为test.Z, 用户ftp登陆后使用
  get test
真正下载得到的文件为compress -d -c test.Z的结果.


/etc/ftpaccess wu-ftpd的主要配置文件

详悉的配置命令, 可以从man ftpaccess中得到

具体的一个列子
class   all   real,guest,anonymous  *

email root@localhost

loginfails 5

readme  README*    login
readme  README*    cwd=*

message /welcome.msg            login
message .message                cwd=*

compress        yes             all
tar             yes             all
chmod		no		guest,anonymous
delete		no		guest,anonymous
overwrite	no		guest,anonymous
rename		no		guest,anonymous

log transfers anonymous,real inbound,outbound

shutdown /etc/shutmsg

passwd-check rfc822 warn


class - 定义一个组

  class <class> <typelist> <addrglob> [<addrglob> ...]


email: 定义ftp管理员的email地址
loginfails 5: 5次错误登录之后, 记录错误信息, 关闭连接


指定登陆logo文件(message)与README文件

readme README* login
readme README* cwd=*

message /welcome.msg login
message .message     cwd=*

readme <path> {<when> <class>}
message <path> {<when> <class>}

在这些文件中, 可以使用特殊的符号来替代一些ftp服务器的信息
				
       %T      local time (form Thu Nov 15 17:12:42 1990)
       %F      free space in partition of CWD (kbytes)
               [not supported on all systems]
       %C      current working directory
       %E      the maintainer's email address as defined in ftpaccess
       %R      remote host name
       %L      local host name
       %u      username as determined via RFC931 authentication
       %U      username given at login time
       %M      maximum allowed number of users in this class
       %N      current number of users in this class
       %B      absolute limit on disk blocks allocated
       %b      preferred limit on disk blocks
       %Q      current block count
       %I      maximum number of allocated inodes (+1)
       %i      preferred inode limit
       %q      current number of allocated inodes
       %H      time limit for excessive disk use
       %h      time limit for excessive files


chmod		no		guest,anonymous
delete		no		guest,anonymous
overwrite	no		guest,anonymous
rename		no		guest,anonymous
设置操作权限
chmod <yes|no> <typelist>
delete <yes|no> <typelist>
overwrite <yes|no> <typelist>
rename <yes|no> <typelist>
umask <yes|no> <typelist>
typelist可以是real, guest, anonymous或者class名
compress, tar同上


shutdown /etc/shutmsg
设置shutdown文件. 如果ftpd检测到/etc/shutmsg则在打印该文件后关闭连接.
可以使用ftpshut命令生成这个文件来关闭ftp

passwd-check rfc822 warn

回到页首

sendmail的基本配置

    使用sendmail.mc来生成sendmail.cf
  1. 确定安装了sendmail-cf
  2. 定制sendmail.mc
  3. 使用m4生成sendmail.cf


缺省的sendmail.mc文件(redhat对应文件在/etc/sendmail.mc)

divert(-1)
dnl This is the macro config file used to generate the /etc/sendmail.cf
dnl file. If you modify thei file you will have to regenerate the
dnl /etc/sendmail.cf by running this macro config through the m4
dnl preprocessor:
dnl
dnl        m4 /etc/sendmail.mc > /etc/sendmail.cf
dnl
dnl You will need to have the sendmail-cf package installed for this to
dnl work.
include(`/usr/lib/sendmail-cf/m4/cf.m4')
define(`confDEF_USER_ID',``8:12'')
OSTYPE(`linux')
undefine(`UUCP_RELAY')
undefine(`BITNET_RELAY')
define(`confAUTO_REBUILD')
define(`confTO_CONNECT', `1m')
define(`confTRY_NULL_MX_LIST',true)
define(`confDONT_PROBE_INTERFACES',true)
define(`PROCMAIL_MAILER_PATH',`/usr/bin/procmail')
FEATURE(`smrsh',`/usr/sbin/smrsh')
FEATURE(`mailertable',`hash -o /etc/mail/mailertable')
FEATURE(`virtusertable',`hash -o /etc/mail/virtusertable')
FEATURE(redirect)
FEATURE(always_add_domain)
FEATURE(use_cw_file)
FEATURE(local_procmail)
MAILER(procmail)
MAILER(smtp)
FEATURE(`access_db')
FEATURE(`blacklist_recipients')
dnl We strongly recommend to comment this one out if you want to protect
dnl yourself from spam. However, the laptop and users on computers that do
dnl not hav 24x7 DNS do need this.
FEATURE(`accept_unresolvable_domains')
FEATURE(`relay_local_from')
dnl FEATURE(`relay_based_on_MX')
dnl后面直到行末, 都会被m4忽略, 相当于m4文件中的注释


include(`/usr/lib/sendmail-cf/m4/cf.m4')
指定sendmail-cf的安装路径

define(`confAUTO_REBUILD')
confAUTO_REBUILD - 自动刷新aliases数据库.

define(`confTO_CONNECT', `1m')
confTO_CONNECT - Timeout.connect, 连接超时为1分钟

define(`confTRY_NULL_MX_LIST',true)
confTRY_NULL_MX_LIST - 和邮件陆游算法有关系

define(`confDONT_PROBE_INTERFACES',true)
confDONT_PROBE_INTERFACES - 不绑定interface

define(`PROCMAIL_MAILER_PATH',`/usr/bin/procmail')
PROCMAIL_MAILER_PATH - 设置procmail的路径

FEATURE(`smrsh',`/usr/sbin/smrsh')
指定smrsh的路径

FEATURE(`mailertable',`hash -o /etc/mail/mailertable')
指定使用mailertable数据库

FEATURE(`virtusertable',`hash -o /etc/mail/virtusertable')
指定使用virtusertable数据库

FEATURE(redirect)
允许redirect功能

FEATURE(always_add_domain)
always_add_domain将foo@domain作为本地邮件

FEATURE(use_cw_file)
use_cw_file指定使用sendmail.cw
sendmail.cw保存所有的本地机器名

FEATURE(local_procmail)
使用procmail作为本地邮递器

FEATURE(`access_db')
使用access数据库

FEATURE(`blacklist_recipients')
同时适用于发送者与接收者

FEATURE(`accept_unresolvable_domains')
接收那些无法解析域名的邮件

FEATURE(`relay_local_from')
转发user@localdomain发来的邮件


sendmail中实用的选项

查看sendmail.cf, O开头的行, 都是选项. 设置这些选项的另一个办法, 是在sendmail起动的时候, 使用-Oname=var来设置.

QueueDirectory=/var/spool/mqueue
设置队列目录. 这个的实际用法, 是将缺省队列中选中的mail复制到一个临时目录, 然后
chown root.mail tmp
chmod 755 tmp
这样tmp就可以作为临时队列了.
可以指定特别的sendmail配置来处理这个队列中的mail, 比如说立刻将这些信弹出队列
sendmail -OQueueDirectory=tmp -OTimeout.queuereturn=0 -q

Timeout.*
这些选项都是用来设置各种超时时间的.
如果希望mail发送失败, 立刻弹回, 而不是在队列中等待重发, 可以使用
sendmail -OTimeout.queuereturn=0 ...
如果是拨号用户, 不希望收到队列滞留的警告mail, 可以修改sendmail.cf
#O Timeout.queuewarn=4h
O Timeout.queuewarn=5d
这样就将警告时间由四小时变成五天了.

具体可以设置的超时有
Timeout.initial=5m
Timeout.connect=5m
Timeout.iconnect=5m
Timeout.helo=5m
Timeout.mail=10m
Timeout.rcpt=1h
Timeout.datainit=5m
Timeout.datablock=1h
Timeout.datafinal=1h
Timeout.rset=5m
Timeout.quit=2m
Timeout.misc=2m
Timeout.command=1h
Timeout.ident=30s
Timeout.fileopen=60s
Timeout.queuereturn=5d
Timeout.queuereturn.normal=5d
Timeout.queuereturn.urgent=2d
Timeout.queuereturn.non-urgent=7d
Timeout.queuewarn=4h
Timeout.queuewarn.normal=4h
Timeout.queuewarn.urgent=1h
Timeout.queuewarn.non-urgent=12h
Timeout.hoststatus=30m

SmtpGreetingMessage=$j Sendmail $v/$Z; $b
设置sendmail SMTP daemon连接建立时的提示信息
为了隐藏系统信息, 可以做相应的修改.

MaxMessageSize=1000000
设置sendmail接收邮件的最大尺寸, 如果希望接收更大的邮件或限制邮件大小减轻服务复杂, 可以修改这个选项


sendmail相关数据库的功能与维护

/etc/aliases是系统邮件别名文件, 需要使用
newaliases
命令, 更新一下数据库. 如果sendmail设置了AutoRebuild的功能, 建议从新起动一次Sendmail.

对于一般的数据库文件, 如access, mailertable等等, 可以使用命令
makemap hash dbname.db > dbname
来构造数据库. 当这些数据库被修改以后, 也需要使用相通的命令进行同步更新

access提供简单的访问控制功能
可以简单的将不想接收的邮件的邮件地址, 写在这个文件中.
Example:
foo@bar.com REJECT
这样所有发送给foo@bar.com的mail都将被拒收的.
access文件还有更多用法, 可以在sendmail-doc中的README.cf中找到.
mailertable是邮件路由数据文件
比如
.               esmtp:[mail.tsinghua.edu.cn]
foo.com         esmtp:[mail1.foo.com]
.foo.com        esmtp:[mail2.foo.com]
bar.org         esmtp:other.mail.com
可以看出来, mailertable中的每条邮件路由为两列. 前面一列
以hostname或domainname作为key, 后面一列为使用的投递器与
目标主机. 从这个mailertable文件中可以看出来, 缺省情况下,
所有mail都使用esmtp协议, 发送给mail.tsinghua.edu.cn,
对于发送给too@foo.com的mail, 则直接发送给mail1.foo.com.
请主意几点, foo.com与.foo.com是不同的, .foo.com是匹配所有
xxx.foo.com这样的机器名的. 而这样的机器名是无法使用foo.com
来匹配的. sendmail是选择最大的匹配来确定邮件路由的.
[mail.tsinghua.edu.cn]与mail.tsinghua.edu.cn是不相同的,
[mail.tsinghua.edu.cn]使用与[IP]的地址一样的处理方法,
这样可以减少DNS查询, 提高邮件发送速度.

virtusertable提供最简单的邮件虚拟主机的功能
Example:
  info@foo.com foo-info
  info@bar.com bar-info
  @baz.org kite@any.where
这样发给info@foo.com的邮件, 都将被传发给foo-info用户, 相同的 info@bar.com的邮件将会转发给bar-info用户, 所由发给@baz.org 的用户, 将转发给kite@any.where.
virtusertable中还可以使用%1来表示原邮件中user的部分.
@foo.com %1@elsewahere.com

以上数据库的用法, 都可以在sendmail-doc中README.cf找到详悉介绍.

返回页首

openssh

ssh是Secure Shell的简称. 相当于一个在安全管道中的telnet, 所有数据都是加密传输的, 可以很好的防范网络窃听.

openssh是Open BSD的一个部分, 是完全free的ssh实现, 同时支持ssh1, ssh2, 已经被移植到各种Unix平台上.

openssh依赖于openssl, 因此安装openssh前, 必须先要安装openssl.


openssh的简单使用

Server端的起动
单独运行, 直接运行
sshd

使用inetd起动
在/etc/inetd.conf中添加一行
ssh stream  tcp nowait  root    /usr/sbin/tcpd ssh -i
然后重新起动inetd就可以了.

Client端
ssh -l user host
or
ssh user@host


sshd的配置文件( /etc/ssh/sshd_config)

# This is ssh server systemwide configuration file.

Port 22
#Protocol 2,1
ListenAddress 0.0.0.0
#ListenAddress ::
HostKey /etc/ssh/ssh_host_key
ServerKeyBits 768
LoginGraceTime 600
KeyRegenerationInterval 3600
PermitRootLogin yes
#
# Don't read ~/.rhosts and ~/.shosts files
IgnoreRhosts yes
# Uncomment if you don't trust ~/.ssh/known_hosts for RhostsRSAAuthentication
#IgnoreUserKnownHosts yes
StrictModes yes
X11Forwarding no
X11DisplayOffset 10
PrintMotd yes
KeepAlive yes

# Logging
SyslogFacility AUTH
LogLevel INFO
#obsoletes QuietMode and FascistLogging

RhostsAuthentication no
#
# For this to work you will also need host keys in /etc/ssh_known_hosts
RhostsRSAAuthentication no
#
RSAAuthentication yes

# To disable tunneled clear text passwords, change to no here!
PasswordAuthentication yes
PermitEmptyPasswords no
# Uncomment to disable s/key passwords 
#SkeyAuthentication no

# To change Kerberos options
#KerberosAuthentication no
#KerberosOrLocalPasswd yes
#AFSTokenPassing no
#KerberosTicketCleanup no

# Kerberos TGT Passing does only work with the AFS kaserver
#KerberosTgtPassing yes

CheckMail no
UseLogin no

#Subsystem	sftp	/usr/local/sbin/sftpd


scp 的使用方法
  scp [-pqrvC46] [-P port] [-c cipher] [-i identity_file]
      [[user@]host1:]file1 [...] [[user@]host2:]file2
使用ssh-keygen生成key

ssh-keygen [ -f key_file ] 生成RSA key, 用于ssh1协议
ssh-keygen -d [ -f key_file ] 生成DSA key, 用于ssh2协议

注意: 作为Host Key使用的key, passphrase必须为空


使用key做验证

缺省情况下, ssh仍然使用传统的口令验证. 可以通过简单的配置, 实现通过密匙的验证.
过程:
  1. 用ssh-keygen生成用户密匙, 存放在~/.ssh/下, 文件名为 identity.
  2. 将~/.ssh/identity.pub复制到远程机器用户帐户上, 并添加到~/.ssh/authorized_keys中.
  3. 必须确定远程机器上~/.ssh/authorized_keys属性为400.
这样就可以通过key来验证用户了.
可以通过一个命令来完成以上操作
ssh-keygen -f ~/.ssh/identity; cat ~/.ssh/identity.pub | \
ssh user@remote "mkdir ~/.ssh; > ~/.ssh/authorized_keys ; \
chmod 400 ~/.ssh/authorized_keys"


rsync与ssh配合使用

rsync是个非常好的网络文件传输程序, 很适合大量文件的复制.

rsync可以与rsh, ssh配合使用, server/client都需要安装ssh/rsync

rsync -e /usr/bin/ssh ......
或者定义环境变量
export RSYNC_RSH=/usr/bin/ssh (bash)
就可以直接让rsync去使用ssh了.

cvs中使用ssh

cvs可以使用rsh, ssh作为传输管道.
export CVS_RSH=/usr/bin/ssh
export CVSROOT=:ext:user@host:/path


返回页首