Blog信息 |
blog名称: 日志总数:1304 评论数量:2242 留言数量:5 访问次数:7630978 建立时间:2006年5月29日 |

| |
[网络与系统管理]Debian学习笔记11 软件技术
lhwork 发表于 2007/2/2 10:17:19 |
11.5. 监控你的网络
强化完我们的系统后,我们还要对我们网络运行状况进行监控,随时了解网络的健康情况,及时发现问题,及时处理。在Linux下提供了强大的软件包帮助我们完成这个任务,下面简单介绍几个。
tcpdump
Wireshark
Snort
Nagios
11.6. PAM
PAM(Pluggable Authentication Modules
可插拔式身份验证模块)是一种系统身份验证机制,最先在Solaris操作系统上实现,现在已应用到包括Linux在内的绝大多数Unix
like系统上。开发使用PAM是为了改进Unix上传统单一的/etc/passwd和/etc/shadow口令文件式的身份验证方式。PAM可为我们提供更高的安全性和更灵活的配置方式。通过PAM我们可为不同的应用程序配置不同的身份验证方式,随时增加新的模块来支持不同的身份验证方式。下面介绍有关PAM的配置和使用。
11.6.1. PAM配置文件
Debian已默认安装有pam软件包,旧的pam使用/etc/pam.conf配置文件,现在已基本不用,现在使用/etc/pam.d目录来组织各种服务的身份验证配置。每一个使用PAM的系统服务在/etc/pam.d目录下都有一个配置文件,如登录服务/bin/login的pam配置文件就叫/etc/pam.d/login。配置文件中的每一行最多由4组参数组成,依次是:模块接口,控制标志,模块路径和模块参数。以#开头的为注释行。其中模块参数是可选项,其余的都是必选项。
模块接口,定义PAM所能完成的身份验证工作的类型,总共有四种模块接口,分别:account,auth,password和session。
account接口负责检查帐号是否有权使用本项服务,如检查帐号是否存在,是否失效等。
auth接口负责对用户身份进行验证。这可以是提示并检查一个口令字、一个数据库或另一种机制。auth类别的模块也可以用来设置凭证信息,比如用户组成员资格、Kerberos凭证等。
password接口负责基于口令的身份验证。
session接口负责配置和管理用户的会话过程,如挂装子目录、创建文件等。
控制标志字段,控制身份验证通过的条件,共有四种标志:optional,required,requisite和sufficient。
optional,表示可选模块,对身份验证的成功与否不产生影响,除非在给定接口中不存在任何其他的模块。
required,必须返回一个成功结果,用户才能继续前进。用户通知将在接口中的所有模块都满足后才发送。
requisite,必须返回一个成功结果,用户才能继续前进。用户通知将在接口中出现第一个requisite或required模块返回的"失败"消息时立刻发出。
sufficient,检查成功且此前没有任何requisite或required模块返回"失败"时,发出"验证通过"的用户通知,本接口上的其他后续PAM模块不再执行。sufficient模块的失败被忽略。
模块路径字段负责给出PAM模块的存放位置。如果模块没有写完整路径,则到PAM模块的默认存放位置/lib/security子目录下查找。
模块参数是可选的,根据不同的模块有不同的参数,如pam_unix.so模块的nullok、obscure、min=4、max=8、md5等参数。
在修改PAM之前,请先做好备份。如果我们不小心删除了PAM的配置文件,我们将不能正常登录系统。这时我们可以启动系统进入单用户模式,然后重建一个最简单的PAM配置文件。cd /etcmkdir pam.dcd pam.dvi test在test文件中输入以下内容:auth required pam_unix.soaccount required pam_unix.sopassword required pam_unix.sosession required pam_unix.so
这样,我们就创建了一个最简单pam配置文件,重启系统,我们就可正常登录系统了。
11.6.2. PAM模块介绍
pam_unix模块是PAM口令字和帐号验证器,可用于多个接口。用于auth接口时可用来验证口令字,用于account接口时可用来检查用户帐号,用于passowrd接口时可用来设置密码加密方式。用于session接口时用来刷新lastlog文件里的"最后一次登录时间",把原来的"最后一次登录时间"读出来提供给/bin/login程序,把这次登录的时间写进lastlog作为新的"最后一次登录时间"。参数选项有:
nullok,允许空白口令,一般不要使用该选项。
likeauth,允许用户在输入口令字时修改打字错误或是更换口令。
shadow,把口令字密文保存在/etc/shadow文件。
md5,允许使用md5加密口令字。
pam_deny模块的唯一功能就是拒绝访问。如果上一行内容是控制标志为sufficient的pam_unix模块,而且没有返回成功信息,则系统将拒绝用户登录。
pam_cracklib模块,负责检查用户输入的口令字是不是常见单词。
pam_limits模块可根据/etc/security/limits.conf文件的内容为用户设置一些资源配额。
pam_console模块用来为从物理控制台登录系统的用户分配某些硬件设备的所有权。
pam_wheel模块可以让你指定哪些用户有权使用su命令切换成根用户。如果想在系统上激活wheel用户组,可以在/etc/pam.d/su文件的开头部份插入以下内容:auth required pam_wheel.so use_uid qroup=wheel
pam_mktemp模块可以为每位用户分别创建一个独享的临时子目录,然后把TEMP和TEMPDIR环境变量都赋值为那个子目录。这样有利用减少在多用户环境下对/tmp资源的竞争。
pam_passwdqc模块可为我们提供高强度的口令字验证机制。它可检查用户选用的口令字是否高强度的,也可为用户生成随机口令字。它与pam_cracklib模块不能同时存在一个配置文件中,如果要使用pam_passwdqc模块,则要把pam_cracklib模块替换下来。该模块有以下选项:
mix,设置口令字最小长度,默认值是mix=disabled。
max,设置口令字的最大长度,默认值是max=40。
passphrase,设置口令短语中单词的最少个数,默认值是passphrase=3,如果为0则禁用口令短语。
match,设置密码串的常见程序,默认值是match=4。
similar,设置当我们重设口令时,重新设置的新口令能否与旧口令相似,它可以是similar=permit允许相似或similar=deny不允许相似。
random,设置随机生成口令字的默认长度。默认值是random=42。设为0则禁止该功能。
enforce,设置约束范围,enforce=none表示只警告弱口令字,但不禁止它们使用;enforce=users将对系统上的全体非根用户实行这一限制;enforce=everyone将对包括根用户在内的全体用户实行这一限制。
non-unix,它告诉这个模块不要使用传统的getpwnam函数调用获得用户信息,
retry,设置用户输入口令字时允许重试的次数,默认值是retry=3。
11.7. 创建chroot环境
chroot是change
root的缩写,顾名思义,就是改变根目录的意思。它可以让系统管理员在一个权限受到限制的根目录中执行一个shell或运行进程。如果在chroot环境下以根用户权限运行进程,则有很多种方法可以逃离chroot环境,对系统造成危害。所以运行在chroot环境下的进程一般都运行在非根用户权限下,一旦chroot环境被黑客攻破,也不会影响系统其它服务的正常运行。chroot环境是我们强化服务安全的一个有力技术,系统管理员一定要掌握好它。
创建chroot环境的步骤如下:
创建chroot环境的基础目录debian:~# mkdir chrootdebian:~# mkdir chroot/bindebian:~# mkdir chroot/libdebian:~# mkdir chroot/etc
chroot环境相当于我们系统的一个简化版,所以我们要在chroot的基础目录下创建一些相关的子目录,并拷贝一些必须的文件进来。这些文件包括我们在chroot环境下运行shell环境或进程所需的所有二进程程序文件、库文件和配置文件。strace程序可以跟踪运行程序所需的库文件、系统调用和配置文件。如:debian:~/c# strace lsexecve("/bin/ls", ["ls"], [/* 35 vars */]) = 0uname({sys="Linux", node="debian.tigerhead", ...}) = 0brk(0) = 0x805c000access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7fc5000access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7fc4000open("/etc/ld.so.cache", O_RDONLY) = 3fstat64(3, {st_mode=S_IFREG|0644, st_size=67031, ...}) = 0mmap2(NULL, 67031, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7fb3000close(3) = 0access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)open("/lib/tls/librt.so.1", O_RDONLY) = 3read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0`\35\0\000"..., 512) = 512fstat64(3, {st_mode=S_IFREG|0644, st_size=26516, ...}) = 0mmap2(NULL, 29264, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb7fab000mmap2(0xb7fb1000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x5) = 0xb7fb1000close(3) = 0access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)open("/lib/libacl.so.1", O_RDONLY) = 3read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\320\23"..., 512) = 512.....
以open开头的就是ls程序需打开的文件,如:open("/lib/libacl.so.1", O_RDONLY) =
3,说明ls程序运行时需要libacl.so.1这个动态链接库。我们也可使用ldd命令来跟踪动态链接库文件,ldd命令输出的信息比较简洁,但它不会列出运行程序所需的配置文件和系统调用,所以这两个程序我们可结合起来使用。下面是使用ldd命令输出的信息:debian:~# ldd /bin/ls linux-gate.so.1 => (0xffffe000) librt.so.1 => /lib/tls/librt.so.1 (0xb7f1e000) libacl.so.1 => /lib/libacl.so.1 (0xb7f18000) libselinux.so.1 => /lib/libselinux.so.1 (0xb7f03000) libc.so.6 => /lib/tls/libc.so.6 (0xb7dd1000) libpthread.so.0 => /lib/tls/libpthread.so.0 (0xb7dbf000) /lib/ld-linux.so.2 (0xb7f39000) libattr.so.1 => /lib/libattr.so.1 (0xb7dba000) libdl.so.2 => /lib/tls/libdl.so.2 (0xb7db6000) libsepol.so.1 => /lib/libsepol.so.1 (0xb7d75000)
如果我们需要在chroot环境下运行ls命令,我们首先要把/bin/ls命令拷贝到chroot/bin目录下。debian:~# cp /bin/ls chroot/bin/.
如果现在在chroot环境下运行ls命令,则会提示出错,如:debian:~# chroot chroot /bin/lschroot: cannot run command `/bin/ls': No such file or directory
这里的出错提示说不能运行ls命令是因为没有文件或路径,其实不然,出错的原因应该是ls命令找不到所需的动态链接库。所以下一步我们要把运行ls程序所需的库文件拷贝到chroot/lib目录下,这些库文件在上面用ldd命令已列出。在拷贝这些库文件之前,我们要把/lib/ld-linux.so.2库文件拷贝到chroot/lib目录,因为所有的二进制程序都需要使用该文件来确定它的库文件的依赖关系,也就是说,ld-linux.so.2动态链接库是所有程序都需要用到的动态链接库。在用cp命令拷贝库文件时记住要用-p参数,这样才能把库文件的内容和所有属性原封不动地拷贝过来。我们先拷贝ld-linux.so.2这个库:debian:~# cp -p /lib/ld-linux.so.2 chroot/lib/.
现在我们再试试运行chroot环境下的ls命令。debian:~# chroot chroot /bin/ls/bin/ls: error while loading shared libraries: librt.so.1: cannot open shared object file: No such file or directory
有了ld-linux.so.2库后,运行chroot环境下的ls命令就会提示缺少的动态链接库的名称。这个动态链接库在ldd命令中也是有列出的。当我们把ls命令所需的链接库全部拷贝完成后就可以在chroot环境下正常运行ls命令了。debian:~# chroot chroot /bin/lsbin lib
这里列出了chroot环境根目录下的文件和目录。按相同的步骤我们就可以创建一个完整的chroot环境来运行我们的服务器,如Apache、DNS等。在创建chroot环境中最大的挑战是确定二进程文件的动态链接库的依赖关系。如果需要为chroot环境提供一个交互式的shell,则我们可利用busybox这个软件包。它为我们提供一个完整的,静态编译的工具集,不需我们手工复制大量的shell、系统工具和动态链接库。有关busybox软件包的安装和使用请参考本笔记的相关内容。
在chroot中安装服务时,应该采用在chroot中从源码开始重新编译安装的方式,而不是采用从主系统中把服务程序目录直接复制过去的方式。因为从源码重新编译安装能确保chroot中的服务是最新和最可靠的。
有些应用程序需要用到设备文件与CD-ROM、USB和远程访问打交道。设备文件不能使用cp命令复制,要用MAKEDEV命令来创建。因为在chroot环境下创建设备文件系统不会对系统安全造成不良影响,所以我们可在chroot环境下用MAKEDEV命令创建一套标准的设备文件。debian:~# cd chrootdebian:~# mkdir devdebian:~# cd devdebian:~/chroot/dev# MAKEDEV generic
"generic"参数使MAKEDEV脚本创建一组默认的设备文件。
在chroot中我们也需要设置日志系统,记录chroot中各种活动,为系统维护和安全审计提供依据。在chroot中使用日志系统,有两种主要的方式,一种是在chroot环境下直接创建日志系统,在chroot环境的/var/log目录下创建如下的目录结构:chroot/var/log lastlog messages secure wtmp /run
日志信息记录在chroot环境下,再通过主系统中有权限访问chroot/var/log目录和文件的用户定期采集日志信息。另一种方式是把日志信息直接发送给syslog服务器。如果采用这种方式,则需在chroot环境下创建一个/etc/syslog.conf文件。
使用chroot环境应注意的问题:
要用strace或ldd命令仔细检查程序的依赖关系,不要遗漏。特别注意/etc/目录下的几个常用的文件,如:resolv.conf和nsswitch.conf。
默认chroot环境的日志信息是写在chroot环境下的/var/log目录,而不是主系统。
注意检查chroot环境下各种文件的权限是否正确,尽量使用cp -p 或 tar -p选项来复制和解包文件。
注意chroot环境的磁盘空间,要留有足够的空间来运行程序。
不要把chroot系统挂装在NFS文件系统上,因为在默认情况下,NFS会自动去除文件上的根用户权限并把它们映射为"nobody"用户。
chroot环境配置好后,要及时做好备份工作。备份时要记住使用-p选项,如:debian:!# tar czvfp chroot.tar.gz chroot
要及时为chroot中的各种软件打补丁。
11.8. SSH
SSH是Security
Shell的简写,它即是程序名,也是一种协议的名称。目前使用中的有SSH1和SSH2两个版本,SSH1的安全性较差,难以防御"内容插入"攻击,它使用了RSA算法,该算法是一种专利算法,但它的专利保护期已经过去了。SSH2是较新的一种协议,在SSH1的基础上做了改进,考虑的安全问题更全面。它使用了一种非专利算法---DSA算法。SSH服务使用了22端口,如果我们要通过SSH连接内网的机器,则要在防火墙上设置规则允许TCP
22端口通过。OpenSSH是SSH应用的开源实现,也是Linux默认的SSH服务器,一般默认已安装。
Debian提供openssh-client和openssh-server两个软件包分别对应客户端程序和服务器程序。安装了openssh-client包后,就会有几个以ssh开头的程序,其中ssh是最重要的一个程序,它是telnet的替代程序,可登录远程主机。sshd是SSH服务器。/etc/ssh/ssh_config是ssh客户端的配置文件,/etc/ssh/sshd_config是SSH服务器的配置文件。这些配置文件默认已可正常工作,但为了达到更好的安全性,建议根据运行环境的要求进行定置。
ssh_config的内容如下:# $OpenBSD: ssh_config,v 1.19 2003/08/13 08:46:31 markus Exp $# This is the ssh client system-wide configuration file. See# ssh_config(5) for more information. This file provides defaults for# users, and the values can be changed in per-user configuration files# or on the command line.# Configuration data is parsed as follows:# 1. command line options# 2. user-specific file# 3. system-wide file# Any configuration value is only changed the first time it is set.# Thus, host-specific definitions should be at the beginning of the# configuration file, and defaults at the end.# Site-wide defaults for various options# Host *# ForwardAgent no# ForwardX11 no# ForwardX11Trusted yes# RhostsRSAAuthentication no# RSAAuthentication yes# PasswordAuthentication yes# HostbasedAuthentication no# BatchMode no# CheckHostIP yes# AddressFamily any# ConnectTimeout 0# StrictHostKeyChecking ask# IdentityFile ~/.ssh/identity# IdentityFile ~/.ssh/id_rsa# IdentityFile ~/.ssh/id_dsa# Port 22# Protocol 2,1# Cipher 3des# Ciphers aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,arcfour,aes192-cbc,aes256-cbc# EscapeChar ~
HOST *以下的内容为系统的默认配置,如果要修改默认配置,可以先删除#注释字符再修改选项。sshd_config的内容如下:# Package generated configuration file# See the sshd(8) manpage for details# What ports, IPs and protocols we listen forPort 22# Use these options to restrict which interfaces/protocols sshd will bind to#ListenAddress ::#ListenAddress 0.0.0.0Protocol 2# HostKeys for protocol version 2HostKey /etc/ssh/ssh_host_rsa_keyHostKey /etc/ssh/ssh_host_dsa_key#Privilege Separation is turned on for securityUsePrivilegeSeparation yes# Lifetime and size of ephemeral version 1 server keyKeyRegenerationInterval 3600ServerKeyBits 768# LoggingSyslogFacility AUTHLogLevel INFO# Authentication:LoginGraceTime 600PermitRootLogin yesStrictModes yesRSAAuthentication yesPubkeyAuthentication yes#AuthorizedKeysFile %h/.ssh/authorized_keys# Don't read the user's ~/.rhosts and ~/.shosts filesIgnoreRhosts yes# For this to work you will also need host keys in /etc/ssh_known_hostsRhostsRSAAuthentication no# similar for protocol version 2HostbasedAuthentication no# Uncomment if you don't trust ~/.ssh/known_hosts for RhostsRSAAuthentication#IgnoreUserKnownHosts yes# To enable empty passwords, change to yes (NOT RECOMMENDED)PermitEmptyPasswords no# Change to no to disable s/key passwords#ChallengeResponseAuthentication yes# Change to yes to enable tunnelled clear text passwordsPasswordAuthentication yes# To change Kerberos options#KerberosAuthentication no#KerberosOrLocalPasswd yes#AFSTokenPassing no#KerberosTicketCleanup no# Kerberos TGT Passing does only work with the AFS kaserver#KerberosTgtPassing yesX11Forwarding noX11DisplayOffset 10PrintMotd noPrintLastLog yesKeepAlive yes#UseLogin no#MaxStartups 10:30:60#Banner /etc/issue.netSubsystem sftp /usr/lib/openssh/sftp-serverUsePAM yes
使用ssh
以当前用户身份登录远程sshd服务器,当然,成功登录的前提是远程sshd服务器正常运行并允许你登录。debian:~# ssh remote_host
以另外一个用户test登录远程sshd服务器。debian:~# ssh test@remote_host
用ssh-keygen命令可以生成密钥对,使用密钥进行身份验证比使用密码验证的安全性高很多。所以我们推荐大家使用密钥进行身份验证。ssh-keygen默认生成rsa密钥对,用ssh-keygen
-t dsa可以生成dsa密钥对。下面是生成rsa密钥对的过程。debian:~# ssh-keygenGenerating public/private rsa key pair.Enter file in which to save the key (/root/.ssh/id_rsa):Enter passphrase (empty for no passphrase):Enter same passphrase again:Your identification has been saved in /root/.ssh/id_rsa.Your public key has been saved in /root/.ssh/id_rsa.pub.The key fingerprint is:9e:59:80:17:70:30:e4:4e:86:a3:b9:6b:9c:68:6b:27 root@debian.tigerheaddebian:~# cd .sshdebian:~/.ssh# lsid_rsa id_rsa.pub known_hostsdebian:~/.ssh# cat id_rsa.pubssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA6AFF0L+SUEFpUphWv6EMgpE7lV22HK1sqRezK2H3fGjSaa79/bpfpeQ+UGFzDS7HCplTh9JdoKrZJhjHetzmMe+7S8BYxiy7L7wWpqx9mPD4N2n+4w7e8HO3KAeCKeUJ6qj3iN4WV+wTur/2ZwhS8XvH+j3luhv8hSWFr3LSAC90rsNP5gVqBqBm/DB4QPfYeMbbLnnb9uT/oXvDKHCedbwCkBqCIRExTptyMk3PZpi5nUXaWjt5DNxP6LbVhHfhsJvRN07j8AW3qabzFHd2y/UxwunD/5f0Imlrf5G1gS9R71I/1qz3UnabUMtEf2OMx/q1PTTkONhTCGTTfTvAhw== root@debian.tigerheaddebian:~/.ssh# cat id_rsa-----BEGIN RSA PRIVATE KEY-----Proc-Type: 4,ENCRYPTEDDEK-Info: DES-EDE3-CBC,C1E14547B21EA0DATqp/DPeilx0UW5r8hC9mJljS7lGjTU2mCZwMfeNvFRLiNt+4XPHxlmzvBCbHkD+oLmZKeBE+ssg2jB42t3Y8KTXakh5kbK4bIVRBNNXYxTSz8oUYvwwzap0+U5rgnrs2kHOnslIYf7WPLZ507ysp91Nh5o4UlRr33ssUgemhtkxzNmvzFbcFcWXc/csTGWzFWixcpQ1tGJzN7NZFBLO8rESSyKprq2AC8AXw4MCgjvzGGBc2AD0PA7Nya0HvWYjEsp05PPpkap6jMGpKD5ogQS3boMLwey9ZPKPdCXrVuO7q/Kxi3ofI4KarKwYZxdm3qzwJ9M6U3n5WxQ4ynOuh3jHB3LtfrsOMLV7ccqST0XMGHJ/sF1FIkWUxweMDRtAaEzJfN5esBbq6++1uVhmD+ASM46d5Uqsa2FquuszvMwd+0q6AusWSQzBdqZnrnlVUdfHkWU/GJd0UAd88CO1IS15H5inCSd4BswkX2AIgJdzZw9sXXhndUTspQfEYy/kU9CWjLxEHmKMxxTDPkg4XoAPyg3sd44Lfy12POUl8gakdxZOsG7rMriUVXAj+quWtx3lu8zT/2LHc79UiXZNLMcWtXypByuO0k6tAc6tQuQUYc5tKySw63ahMda80wQZQtQqBY2SVkkDn6+DnyzWSkTdLhLsoSysOdlilqVVfamy+bYSKhBKRwgw+IHbi5kqrjoNeSxBblfsvjV5VblSlTJfQuroEHENYLkv7Xlcbsx4a64l7OjBzgJOF9D2ek283R1VZLIXS8DA3nqieRRz2UJ/n7ZYBr6SI6rOlutfHMEifuu0fFQMdjuqv8Ypisg0SjBzQO5U+GOxQfrmDwJyz1Il0VhTQ8RC+/D/WXDDwGecEI45HhSy4gU6dfHRiA6BbShVlW+ShD3HnpVUta2T7VlTqRxJgz+xiLbgWqOc+Xd6dNPdIkCVov0h/NvZJtfN9vGUDPm6sQDLBe/FTKTwkjH2BJ2ouwg045fMKnI8Dg0fZUMUaZF3D0Pm7ABANtmnbHOeiKcCHaRF8VWQbJL0gk1bL+gh0/XQk4v/gMpOoCsjmZ23948uc5IG6VoYAWFtRNwczx/EQczd/WEhzxtToAfcpBZPYCwa7x+h72RxDPLcgIzCS6GpGeuKTxmlG8FmZV0F3kn9m50U4V5frz1bhXaXR26Nc42bOYHKsppGOIpeP71Sph4nEXZYqFdEC6YZujcvyAtbCtjKQsJ685vKzuCCdXMYEN56uLfQpmPtmqpJGlhJTCPEvXcXds3Jgdgo3iezHpjnLClPr6vIgBZEoiwh8pWq86tVjh8WTjTJpu73JLX1T/Cx6GcdSOxnR2N4YBUD5WnoH9IYrZ2cZjhgvQen7ZgwP5nGxgo1mxls9IgNIh77e3zVvGjwSSVSb59OEGQtPZUi1Lz7yotyEZAHY61/jdKCgWh7SuQObuDMgdgFxXAqhr3DmH461Oimx4lYicGCZEQhbPcwRwCSsU/Nc3QWagIarWv5gySr//9k3yYFNJYOAy4ei7K1Bt9+t6Vn9knZ7wPwNnr+a8PSLlldztxDvl8JbXJOfKBGhetBVft8huvNjtUmoeA==-----END RSA PRIVATE KEY-----debian:~/.ssh#
这时,系统在用户主目录下自动创建一个.ssh目录,生成的密钥对就存放在该目录下,id_rsa.pub是公钥,id_rsa是私钥。公钥需要通过安全的通道分发到你需要登录的主机上,并保存在主机的~/.ssh/authorized_keys文件中。authorized_keys是一个文本文件,把客户端生成的id_rsa.pub文件的内容粘贴到authorized_keys文件可以啦。如果有多个公钥,则每个公钥一行保存。
使用scp命令安全地复制文件。debian:~# scp a.py yangjing@t02:~/.
上面命令的作用是把当前目录下的a.py文件拷贝到t02主机的yangjing用户的主目录下。scp的命令格式如下:scp <filename> <username>@<remote_host>: </path/filename>
在启用密钥验证的前提下,使用ssh-agent代理程序可以实现免输入口令字登录系统。ssh-agnet程序会生成一个新的shell中,在这个新生成的shell中,使用ssh-add命令把用户的验证字串放在内存中。当需要使用该用户连接远程主机时,系统就会自动使用验证字串进行验证,用户无需输入。yangjing@debian:~$ ssh-agent bashyangjing@debian:~$ ssh-addEnter passphrase for /home/yangjing/.ssh/id_rsa:Identity added: /home/yangjing/.ssh/id_rsa (/home/yangjing/.ssh/id_rsa)yangjing@debian:~$ ssh t02[yangjing@t02 yangjing]$
我们使用的shell是bash,添加完验证字串后,使用ssh t02命令即可直接登录进t02主机,不需输入任何信息。
SSH通过"端口转发"或"数据封包"技术提供对其他TCP/IP协议进行加密的能力。
保护X连接,在本机将sshd_config文件里的X11Forwarding选项设置为Yes。重启sshd服务器后就可使用SSH加密连接来传输X会话啦。
11.9. VPN
11.10. 安全工具列表
在Linux中,有大量的免费工具可帮助我们检测安全问题和解决安全问题。下面介绍一些常用的网络安全工具。
netcat
通过TCP/UDP建立各种网络连接。
nmap
著名的网络扫描和检测工具
Snort
IDS
tcpdump
数据包抓取工具。
httptunnel
可穿透防火墙在两台机器上通过HTTP协议创建连接。
swatch
实时的日志监控工具,可定义日志事件的触发规则把日志信息及时反馈到系统管理员。
Linux rootkit 6(LRK6)
rootkit工具集
Tcp_wrapper
可控制Linux系统中各种服务的访问许可权限。
logrotate
日志循环管理工具,可自动删除最久的日志。
Nagios
一个全功能的系统监控程序,可以监控服务、主机和网络。 |
|
|