正文

linux SSH 的一些安全小技巧 2006-09-21 22:02:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/sovf/18630.html

分享到:

一, 前言  关于 ssh 的好处, 相信不用我多说了吧?  简而言之, 之前的 rpc command 与 telnet 都全可用 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

阅读(1980) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册