一部连上 Internet 上面的您的个人主机,最重要的是什么呢?大概就是如何让您自己可以联机进入自己的主机,并且进行所谓的『远程操控』了吧!也就是说,您可以在任何具有连上 Internet 的计算机中,以远程联机软件连上 Internet ,并藉由您主机上面的远程联机服务器软件提供的功能,直接登入您的主机来进行操控的工作!此时,您将发现 Linux 有趣又好玩的地方啰!在 Unix Like 的机器当中,几乎都提供 Telnet 这个远程联机服务器软件,不过, Telnet 本身是以『明码』来传送您操作的数据,安全上面是值得来思考要不要开放吶!这个时候就有需要了解一下传送过程中以加密动作来传送数据封包的 SSH 这个远程联机服务器软件啦!这个章节当中,我们会提到 Telnet 与 SSH 这两个服务器,值得参考喔! |
[root@test
root]# rpm -qa | grep telnet
telnet-server-krb5-1.2.5-1mdk telnet-client-krb5-1.2.5-1mdk # 上面是 Mandrake 9.0 的范例;或底下是 Red Hat 7.2 的范例 telnet-0.17-20 telnet-server-0.17-20 |
[root@test
root]# vi /etc/xinetd.d/telnet
# default: on # description: The telnet server serves telnet sessions; it uses \ # unencrypted username/password pairs for authentication. service telnet { disable = yes<==就是改这里,将 yes 改成 no 即可! flags = REUSE socket_type = stream wait = no user = root server = /usr/sbin/in.telnetd log_on_failure += USERID } |
方法一:仅支援
Red Hat 或 Mandrake 系统:
[root@test root]# service xinetd restart Stopping xinetd: [ OK ] Starting xinetd: [ OK ] 方法二:正统的启动方式:
|
[root@test
root]# netstat -tl
Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 *:ssh *:* LISTEN tcp 0 0 *:telnet *:* LISTEN |
step 1: 修改一下
/etc/xinetd.d/telnet 档案:
[root@test root]# vi /etc/xinetd.d/telnet # default: on # description: The telnet server serves telnet sessions; it uses \ # unencrypted username/password pairs for authentication. service telnet { disable = no<==就是改这里,将 no 改成 yes 即可! flags = REUSE socket_type = stream wait = no user = root server = /usr/sbin/in.telnetd log_on_failure += USERID } step 2: 重新启动
xinet 即可:
|
[root@test
root]# telnet localhost
Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. Red Hat Linux release 7.2 (Enigma) Kernel 2.4.18 on an i586 login: test <==输入账号 Password: <==输入密码请注意!密码并不会在屏幕上面显示任何的字眼 Last login: Thu Oct 3 11:59:29 from test_inside <==提示上次登入的地址 You have new mail. <==自上次登入以来,是否信箱内有新信件!? [test@test test]$ <==这里就进入了 telnet 的联机程序当中了! [test@test test]$ exit <==离开这次 telnet 的登入! |
[root@test
root]# vi /etc/xinetd.d/telnet
# This file had been modified by VBird 2002/11/04 # First is about inside the network service telnet { disable = no bind = 192.168.1.2 only_from = 192.168.1.0/24 # 上面这两行说明仅提供内部网域! instance = UNLIMITED nice = 0 flags = REUSE socket_type = stream wait = no user = root server = /usr/sbin/telnetd server_args = -a none log_on_failure += USERID } # Second is
about the outside domain's settings
|
[root@test root]# mv /etc/securetty /etc/securetty.bak |
[root @test
/root]# vi /etc/pam.d/login
#%PAM-1.0 #auth required /lib/security/pam_securetty.so # 将上面这一行加上 # 批注掉! auth required /lib/security/pam_stack.so service=system-auth auth required /lib/security/pam_nologin.so account required /lib/security/pam_stack.so service=system-auth password required /lib/security/pam_stack.so service=system-auth session required /lib/security/pam_stack.so service=system-auth session optional /lib/security/pam_console.so |
/sbin/iptables
-A INPUT -p tcp -i eth0 -s 192.168.0.0/24 --dport 23 -j ACCEPT
/sbin/iptables -A INPUT -p tcp -i eth0 -s 61.xxx.xxx.xxx --dport 23 -j ACCEPT /sbin/iptables -A INPUT -p tcp -i eth0 --dport 23 -j DROP |
[root@test
root]# vi /etc/hosts.allow
in.telnetd: 192.168.0.1, 192.168.0.2, 192.168.0.3, 192.168.0.4, 192.168.0.5: allow [root@test root]#
vi
/etc/hosts.deny
|
[root@test
root]# /etc/rc.d/init.d/sshd start
[root@test root]# service sshd start [root@test root]# netstat -tl Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 *:ssh *:* LISTEN |
[root@test
root]# ssh user@hostname
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! Someone could be eavesdropping on you right now (man-in-the-middle attack)! It is also possible that the RSA host key has just been changed. The fingerprint for the RSA key sent by the remote host is 6e:1a:60:d0:ee:d0:7c:91:df:94:de:09:35:7b:08:ba. Please contact your system administrator. Add correct host key in /root/.ssh/known_hosts to get rid of this message. Offending key in /root/.ssh/known_hosts:8 RSA host key for hostname has changed and you have requested strict checking. Host key verification failed. |
sftp 一般联机的使用方式:
[root@test root]# sftp test@test.linux.org test@test.linux.org's password: <==请输入 test 这个使用者的密码! sftp> <==等待您输入指令! |
针对远方主机(Server)之行为 | |
变换目录到 /etc/test 或其它目录 | cd /etc/test
cd PATH |
列出目前所在目录下的档案或目录 | ls
dir |
建立目录 | mkdir directory |
删除目录 | rmdir directory |
显示目前所在的目录 | pwd |
更改档案或目录群组 | chgrp groupname PATH |
更改档案或目录拥有者 | chown username PATH |
更改档案或目录的权限 | chmod 644 PATH
其中,644 与权限有关!回去看基础篇! |
建立连结档 | ln oldname newname |
删除档案或目录 | rm PATH |
更改档案或目录名称 | rename oldname newname |
离开远程主机 | exit
bye |
针对本机(Client)之行为(都加上 l, L 的小写 ) | |
变换目录到本机的 PATH 当中 | lcd PATH |
列出目前本机所在目录下的文件名 | lls |
在本机建立目录 | lmkdir |
显示目前所在的本机目录 | lpwd |
档案传输 | |
将档案由本机上传到远程主机 | put [本机目录或档案] [远程]
put [本机目录或档案] 如果是这种格式,则档案会放置到目前远程主机的目录下! |
将档案由远程主机下载回来 | get [远程主机目录或档案] [本机]
get [远程主机目录或档案] 若是这种格式,则档案会放置在目前本机所在的目录当中!可以使用万用字符,例如: get * get *.rpm 亦是可以的格式! |
psftp: no hostname
specified; use "open host.name" to connect
psftp> |
psftp: no hostname
specified; use "open host.name" to connect
psftp> open test.linux.org login as: test Using username "test". test@test.linux.org's password: Remote working directory is /home/test psftp> |
# 1. 关于 SSH
Server 的整体设定,包含使用的 port 啦,以及使用的密码演算方式
Port 22 # SSH 预设使用 22 这个 port,您也可以使用多的 port ! # 亦即重复使用 port 这个设定项目即可! Protocol 2,1 # 选择的 SSH 协议版本,可以是 1 也可以是 2 , # 如果要同时支持两者,就必须要使用 2,1 这个分隔了! #ListenAddress 0.0.0.0 # 监听的主机适配卡!举个例子来说,如果您有两个 IP, # 分别是 192.168.0.100 及 192.168.2.20 ,那么只想要 # 开放 192.168.0.100 时,就可以写如同下面的样式: ListenAddress 192.168.0.100 # 只监听来自 192.168.0.100 这个 IP 的SSH联机。 # 如果不使用设定的话,则预设所有接口均接受 SSH PidFile /var/run/sshd.pid # 可以放置 SSHD 这个 PID 的档案!左列为默认值 LoginGraceTime 600 # 当使用者连上 SSH server 之后,会出现输入密码的画面, # 在该画面中,在多久时间内没有成功连上 SSH server , # 就断线!时间为秒! Compression yes # 是否可以使用压缩指令?当然可以啰! # 2. 说明主机的 Private Key 放置的档案,预设使用下面的档案即可! HostKey /etc/ssh/ssh_host_key # SSH version 1 使用的私钥 HostKey /etc/ssh/ssh_host_rsa_key # SSH version 2 使用的 RSA 私钥 HostKey /etc/ssh/ssh_host_dsa_key # SSH version 2 使用的 DSA 私钥 # 2.1 关于 version
1 的一些设定!
# 3. 关于登录文件的讯息数据放置与
daemon 的名称!
# 4. 安全设定项目!极重要!
# 4.5 登入后的项目:
# 4.6 关于使用者抵挡的设定项目:
# 5. 关于 SFTP
服务的设定项目!
|
[test2@test2
test2]$ ssh-keygen -t rsa <==这个步骤在产生
Keys
Generating public/private rsa key pair. Enter file in which to save the key (/home/test2/.ssh/id_rsa): Enter passphrase (empty for no passphrase): <==这里按 Enter Enter same passphrase again: <==再按一次 Enter Your identification has been saved in /home/test2/.ssh/id_rsa. <==这是私钥 Your public key has been saved in /home/test2/.ssh/id_rsa.pub.<==这是公钥 The key fingerprint is: c4:ae:d9:02:d1:ba:06:5d:07:e6:92:e6:6a:c8:14:ba test2@test2.linux.org 注意: -t 指的是『使用何种密码演算方式?』由于我们使用 RSA , 所以直接输入 -t rsa 即可建立两支 Keys ! 此外,建立的两把 Keys 都放置在家目录下的 .ssh 这个目录中! 察看一下这两把 Keys 吧! [test2 @test2
test2]$ ll ~/.ssh
|
1. 先在 Client
端以 sftp 将公钥丢到 test 上面去!
[test2@test2 test2]$ cd ~/.ssh <==切换目录 [test2@test2 .ssh]$ sftp test@test.linux.org<==连到主机上面 Connecting to test.linux.org... test@test.linux.org's password: <==输入 test 的密码 sftp> put id_rsa.pub <==将公钥丢到 Server 上面去! Uploading id_rsa.pub to /home/test/id_rsa.pub sftp> exit 2. 到 Server
上面,将公钥转存到 authorized_keys 档案中!
|
[test2@test2 test2]$ ssh test@test.linux.org |
这三方面来着手进行!底下我们就说一说吧!
- /etc/ssh/sshd_config
一般而言,这个档案的预设项目就已经很完备了!所以,事实上是不太需要更动他的!但是,如果您有些使用者方面的顾虑,那么可以这样修正一些问题呢!
- 禁止 root 的登入:任何时候,不许 root 以远程联机的方式登入,都会是一个好主意!所以这里蛮建议大家直接将 root 的登入权限拿掉吧!所以,可以修改 /etc/ssh/sshd_config 这个档案的内容为:
如此一来,以后 root 就不能以 ssh 登入啰!这样还是比较好的啦! ^_^
[root@test root]# vi /etc/ssh/sshd_config
PermitRootLogin no <==将他改成 no 啦!
[root@test root]# /etc/rc.d/init.d/sshd restart
- 不许某个群组登入:有些特殊情况中,我们想要让使用者只能使用 sendmail, pop3, ftp 等,但是不希望他可以远程联机进来,那么您可以这样做:
1. 将这些使用者都归纳在某一个特殊群组之下,例如 nossh 这个群组好了;
2. 在 /etc/ssh/sshd_config 当中加入这一行:『DenyGroups nossh』
3. 重新启动 sshd : /etc/rc.d/init.d/sshd restart
这样就OK啦!
- 不许某个使用者登入:跟 DenyGroups 类似,使用 DenyUsers 即可!参考 sshd_config 的设定喔!
- /etc/hosts.allow 及 /etc/hosts.deny :
这东西也是很简单的啦!直接参考: 简易防火墙架设 一文啰!当然,简单的方法就是:
[root@test /root]# vi /etc/hosts.allow
sshd: 192.168.0.1, 192.168.0.2, 192.168.0.3, 192.168.0.4, 192.168.0.5: allow[root@test /root]# vi /etc/hosts.deny
sshd : ALL : spawn (/bin/echo Security notice from host `/bin/hostname`; \
/bin/echo; /usr/sbin/safe_finger @%h ) | \
/bin/mail -s "%d -%h security" root@localhost & \
: twist ( /bin/echo -e "\n\nWARNING connectin not allowed. Your attempt has been logged. \n\n\n警告您尚未允许登入,您的联机将会被纪录,并且作为以后的参考\n\n ". )- iptables
多几层保护也很好的!所以也可以使用 iptables 喔!参考:简易防火墙架设 一文啰!
基本上, SSH 还蛮安全的,只要取消 root 的登入权限,那么问题应该就会比较小一点啦!所以,虽然可以不用设定 iptables ,但是建议针对几个网域设定一下 /etc/hosts.allow 与 /etc/hosts.deny !加油啰!