Tairan's Story

「知之真切笃实处即是行,行之明觉精察处即是知,知行工夫不可离。」


安全与易用

今天在公司里出现了一件事情,让我认真的思考了下Windows平台的易用性和安全。

事情是这样的,我们需要远程登录到一台德语的机器上工作。为了设置可以同时有两个相同用户名的用户远程登录,我们修改了组策略。两个德语文盲想当然的把一个和英语环境相同位置的选项给禁止了,然而那是拒绝远程用户登录的选项。刚改好的时候还很高兴马上用另外一台机器远程登录试用,很不幸将另外一个已经在上面的用户踢掉后自己也无法登录。

根据以前使用Windows的经验加上问Google,发现Windows远程维护是如此的强大。不仅仅是远程注册表编辑,还可以远程编辑组策略,AD,等等一大堆的东西。这一切在MMC中就可以完成。

如此强大的远程管理,却把我引入到为什么Windows不安全的地方去了。因为如果这是在Linux上把唯一的SSH关闭了,我还真的没辙。

在Windows上的这些远程控制是可以管理的,你可以选择让它不提供这些服务,然而这一切是Windows的默认设置。没有不安全的系统,只有不靠谱的管理员。默认开启了如此之多的远程服务,又遇到了不靠谱的管理员,在互联网上这个服务器绝对是挂了。

为什么是互联网?互联网就是一个狂野丛林,一不小心就成了别人口中的美味。既然那么危险,为什么Windows还开启了那么多的默认服务?让我们来看看Windows的主要用户吧。企业用户,企业内部和外界的联系至少有道墙,或者根本就不和外界联系。个人用户,虽然它们经常暴露在外面,但是即使他们受到伤害,通常损失也不会太大。这两种用户都有共同点,就是不太关心计算机的技术问题。

了解了Windows的使用者,那么Microsoft®有足够的理由开启这些默认服务,让他们的客户更简单的使用Windows,如果遇到问题,可以让IT远程配置即可。这一切的代价就是开启了很多潜在风险。Microsoft®的人当然不都是傻瓜,解决不了问题,只是这个世界有条准则就是做的越多错的越多。在你不真正了解Windows的时候冒然用它作为互联网服务器,那你会得到很多不错的教训!

在这里我并不是声讨Microsoft®和Windows,而是想提醒自己和大家,浅尝辄止害死人!你懂的。

No Comments » | Tags:,,,, | Categories: Technology, 我的声音
Remote Control via GTalk (XMPP)

想远程控制家里的电脑?却因IP地址动态分配(花生壳可以解决),远程连接速度慢,机器暴露在外网怕不安全,等种种原因无法理想的实现。

现在我们就另辟蹊径使用Gtalk来远程控制家里的电脑

基本思路如下
Gtalk基于XMPP这个开放的协议。那么我们也基于XMPP协议开发一个客户端就可以和Gtalk进行通讯,可以发送和接收来自Gtalk的消息后,再进行扩展,做成一个shell(命令解释器)。当我们用Gtalk给客户端发送消息后,客户端接收消息进行解释并处理。这样就完成了远程控制的家里电脑的任务。

具体实现
本人才采用的是.NET技术,使用agsXMPP这个开源的封装了XMPP协议的类库。我们基于这个类库就可以和Gtalk通讯了。
下面附上源码,这里只是实现使用Gtalk发送消息,客户端接收到消息后自动将接收的消息再发送回去。

using System;
 
using agsXMPP;
using agsXMPP.protocol.client;
 
namespace XMPPClient
{
    class Program
    {
        static void Main(string[] args)
        {
            XmppClientConnection xmpp = new XmppClientConnection();
 
            xmpp.Server = "gmail.com";
            xmpp.Username = "your_username";
            xmpp.Password = "your_password";
            xmpp.ConnectServer = "talk.google.com";
            xmpp.SocketConnectionType = agsXMPP.net.SocketConnectionType.Direct;
            xmpp.ClientVersion = "1.0";
            xmpp.AutoRoster = true;
 
            xmpp.Open();
 
            Console.WriteLine("connected.");
 
            xmpp.Show = agsXMPP.protocol.client.ShowType.away;
            xmpp.OnLogin += new ObjectHandler(xmpp_OnLogin);
            xmpp.OnMessage += new MessageHandler(xmpp_OnMessage);
 
            Console.ReadKey();
        }
 
        static void xmpp_OnRosterItem(object sender, agsXMPP.protocol.iq.roster.RosterItem item)
        {
            Console.WriteLine(string.Format("{0} was found", item.Jid));
        }
 
        static void xmpp_OnMessage(object sender, agsXMPP.protocol.client.Message msg)
        {
            Message response = new Message();
            response.To = msg.From;
            response.Type = MessageType.chat;
            response.Body = string.Format("{0}", msg.Body);
            //replay
            (sender as XmppClientConnection).Send(response);
        }
 
        static void xmpp_OnLogin(object sender)
        {
            Console.WriteLine(string.Format("{0} login.", (sender as XmppClientConnection).Username));
        }
    }
}

后面的工作就是扩展了,既然能够接收到消息,那么再实现一个消息解释器就可以根据发送过来的消息来做一些事情了。理论上我们能控制这台机器上的所有资源!

Note:
这个想法源自同事(老江)的灵感,他现在正基于此实现远程控制家中的电脑用BT,电驴等方式下载电影,只是他还要把WCF掺和进来一起玩,所以做的比较复杂。我这里化繁为简,只是实现一个可扩展的Shell也是要一番功夫的。

2 Comments » | Tags:,, | Categories: Technology, 我的声音


我的豆瓣

二维码快速链接
QR Code fuer diese Seite