一, 前言
关于 ssh 的好处, 相信不用我多说了吧?
简而言之, 之前的 rpc command 与 te.net 都全可用 ssh 代替.
比方如下的这些常见功能:
- 远程登录
ssh user@remote.machine
- 远程执行
ssh user@remote.machine ’command ...’
- 远程粗?
scp user@remote.machine:/remote/path /local/path
scp /local/path user@remote.machine:/remote/path
- x forward
ssh -x user@remote.machine
xcommand ...
- tunnel / portforward
ssh -l 1234:remote.machine:4321 user@remote.machine
ssh -r 1234:local.machine:4321 user@remote.machine
ssh -l 1234:other.machine:4321 user@remote.machine
至于详细的用法, 我这就不说了. 请读者自行研究吧.
我这里要说的, 是针对 ssh 服务为大家介绍一些安全技巧, 希望大家用得更安心些.
二, 实作
(实作以 redhat 9 为范例)
1) 禁止 root 登录
# vi /etc/ssh/sshd_config
permitrootlogin no
2) 废除密码登录, 强迫使用 rsa 验证(假设 ssh 账户为 user1 )
# vi /etc/ssh/sshd_config
rsaauthentication yes
pubkeyauthentication yes
authorizedkeysfile .ssh/authorized_keys
passwordauthentication no
# service sshd restart
# su - user1
$ mkdir ~/.ssh 2>/dev/null
$ chmod 700 ~/.ssh
$ touch ~/.ssh/authorized_keys
$ chmod 644 ~/.ssh/authorized_keys
--------------------------------------------------
转往 client 端:
$ ssh-keygen -t rsa
(按三下 enter 完成﹔不需设密码,除非您会用 ssh-agent 。)
$ scp ~/.ssh/id_rsa.pub user1@server.machine:id_rsa.pub
(若是 windows client, 可用 puttygen.exe 产生 public key,
然后复制到 server 端后修改之, 使其内容成为单一一行.)
---------------------------------------------------
回到 server 端:
$ cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
$ rm ~/id_rsa.pub
$ exit
3) 限制 su / sudo 名单:
# vi /etc/pam.d/su
auth required /lib/security/$isa/pam_wheel.so use_uid
# visudo
%wheel all=(all) all
# gpasswd -a user1 wheel
4) 限制 ssh 使用者名单
# vi /etc/pam.d/sshd
auth required pam_listfile.so item=user sense=allow file=/etc/ssh_users onerr=fail
# echo user1 >> /etc/ssh_users
5) 封锁 ssh 联机并改用 web 控管清单
# iptables -i input -p tcp --dport 22 -j drop
# mkdir /var/www/html/ssh_open
# cat > /var/www/html/ssh_open/.htaccess <<end
authname "ssh_open"
authuserfile /var/www/html/ssh_open/.htpasswd
authtype basic
require valid-user
end
# htpasswd -c /var/www/html/ssh_open/.htpasswd user1
(最好还将 ssl 设起来, 或只限 https 联机更佳, 我这里略过 ssl 设定, 请读者自补.)
(如需控制联机来源, 那请再补 allow/deny 项目, 也请读者自补.)
# cat > /var/www/html/ssh_open/ssh_open.php <<end
<?
//set dir path for ip list
$dir_path=".";
//set filename for ip list
$ip_list="ssh_open.txt";
//get client ip
$user_ip=$_server[’remote_addr’];
//allow specifying ip if needed
if (@$_get[’myip’]) {
$user_ip=$_get[’myip’];
}
//checking ip format
if ($user_ip==long2ip(ip2long($user_ip))) {
//put client ip to a file
if(@!($file = fopen("$dir_path/$ip_list","w+")))
{
echo "permission denied!!<br>";
echo "pls check your rights to dir $dir_path or file $ip_list";
}
else
{
fputs($file,"$user_ip");
fclose($file);
echo "client ip($user_ip) has put into $dir_path/$ip_list";
}
} else {
echo "invalid ip format!!<br>ssh_open.txt was not changed.";
}
?>
end
# touch /var/www/html/ssh_open/ssh_open.txt
# chmod 640 /var/www/html/ssh_open/*
# chgrp apache /var/www/html/ssh_open/*
# chmod g+w /var/www/html/ssh_open/ssh_open.txt
# chmod o+t /var/www/html/ssh_open
# service httpd restart
# mkdir /etc/iptables
# cat > /etc/iptables/sshopen.sh <<end
#!/bin/bash
path=/sbin:/bin:/usr/sbin:/usr/bin
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器