[置顶] 推荐文章

[置顶] 本站部分代码下载

Kerberos原理

2015年3月15日 没有评论
文章作者:Yx.Ac   文章来源:勇幸|Thinking (http://www.ahathinking.com)   转载请注明,谢谢合作。

---

前些日子为了搞清楚Kerberos原理,把MIT的Kerberos经典对话看了几遍,终于有了一个稍微清晰的认识,这里稍微记录下,因为Kerberos是使用传统加密技术实现的一个认证机制,所以顺便备忘下关于加密的一些知识概念。本文组织如下:

===关于Kerberos===

===认证授权===

===加密术语===

===单点登录===

===Kerberos术语===

===Kerberos原理===

===经典对话手记===

==============================================================

关于Kerberos

什么是Kerberos?

一句话,Kerberos是一种认证机制。

它的目的:通过密钥系统为客户端/服务器应用程序提供强大的认证服务:保护服务器防止错误的用户使用,同时保护它的用户使用正确的服务器,即支持双向验证

Kerberos协议的整个认证过程实现不依赖于主机操作系统的认证,无需基于主机地址的信任,不要求网络上所有主机的物理安全,并假定网络上传送的数据包可以被任意地读取、修改和插入数据。说白了, Kerberos通过传统的加密技术(共享密钥)实现了一种可信任的第三方认证服务。

认证授权

认证授权(Anthentication and Authorization)是系统权限管理经常需要考虑的问题,也是一个很复杂的问题,至少我是这样觉得的。

认证:系统识别某个个体/请求的身份时,称为认证;即辨别身份真伪,解决“你是谁”的问题。

授权:系统赋予某个个体从事某种行动的权利,叫做授权;即解决“你能做什么”的问题。

感觉应该说清楚了,认证未必授权,授权必须认证。

加密术语

上面说过,Kerberos是网络服务的认证机制,使用加密技术实现认证,这里再啰嗦下它们之间的关系。

加密:给数据加密,目的是保护数据,强调的是安全性

认证:判断身份的真实性,目的是辨真伪,强调的是真实性

授权:根据不同的身份给予不同的授权;所以认证(authentication)与授权(authorization)往往是相伴而生。

阅读全文...

Kerberos KDC 备份方案

2015年3月15日 2 条评论
文章作者:Yx.Ac   文章来源:勇幸|Thinking (http://www.ahathinking.com)   转载请注明,谢谢合作。

---

写在前面:

真是好久好久好久木有更新博客了,工作了确实就忙了,尤其是在小米这样的公司;发现学的很多东西当时不沉淀,再回头就需要大量的时间和精力捡起来,真是取不得取不得;能记点就记点,能沉淀点就沉淀点吧,吾当努力而为之;

最近在搞一个Kerberos账号管理系统,出发点是鉴于Kerberos kdc本身没有多机房同步的功能,所以我们打算自己搞一个假同步。本文简单说下我们的同步方案,后面就是笔记了,记录备忘。组织如下:

===KDC同步方案===

===KDC搭建-配置-使用===

===常用命令===

================================================

KDC同步方案

简单来说,我就利用mysql db的实时replication来达到kdc db的同步;

首先,我们有一个基于mysql的Kerberos账号管理系统:Kerberos account management system(简称KAS),管理公司所有的Kerberos账号(具体数据结构就不细说了,视用途而定),账号信息都存储在mysql当中;

其次,不同的机房(包括海外机房)分别部署一个KAS,并部署mysql db主备实时同步;

第三,每个KAS的系统所在的机器都对应部署着KDC的服务器,KAS后面都有一个程序专门check mysql中的账号信息,并将mysql中的账号信息(包括增删改等)同步到KDC server,以此来保证KDC的同步方案;

第四,我们对mysql db replication,kas,以及实施mysql和kdc db同步的script都设置监控报警、自动拉起等配套方案。

下图就是KDC同步方案的架构图:

通过KAS,我们可以对Kerberos账号有一个非常方便的管理,例如:基本的增删改查;同一个账号为不同用户设置不同权限;提供接口查询一个账号都有哪些owner;提供接口给用户导出keytab文件等等;最重要的是通过KAS,我们完成了对Kerberos账号权限管理资源管理

阅读全文...

矩阵转置 O(1)空间

2013年7月12日 8 条评论
文章作者:Yx.Ac   文章来源:勇幸|Thinking (http://www.ahathinking.com)   转载请注明,谢谢合作。

---

题目:用O(1)的空间实现矩阵的转置

为了方便,使用一维数组来分析。所谓矩阵转置,行变列,列变行。在转置的过程中,有的元素位置是不变的;对于变化位置的元素,要求O(1)空间完成,那么这些位置的变化一定是有着规律的。

举例,2×5的矩阵,A={0,1,2,3,4,5,6,7,8,9};转置后为AT={0,5,1,6,2,7,3,8,4,9},探索下标变化:

0->0

1->2->4->8->7->5->1

3->6->3

9->9

这些下标的变化是一些环,如果我们能找到这个环,对环做移动处理,就可以O(1)完成了。

现在的问题是,我们如何知道一个环是已经处理过的,仔细观察,如果一个环被处理过,那么总能找到一个它的后继是小于它的。例如,处理了前三个环的时候,当尝试找下标4打头的环时,一直找4的后继下标,会发现后继1是小于4的,我们就知道4是存在于一条已经处理过的环,跳过。

接下来的问题是如何找到当前元素下标的前驱和后继。先求下标i转置前的下标,即i的前驱,对于m×n的矩阵,转置后为n×m,则一维数组的第i个元素表示的行列为(i/m, i%m),根据转置原理,那么这个元素在转置前的m×n矩阵中所表示的行列为(i%m, i/m),那么i在转置前一维数组中的位置为j=(i%m)×n+(i/m)。同理,下标i转置后的位置j=(i%n)×m+(i/n)。

这样,前驱后继都可以求得,找到环就移动环的元素,如果已处理过则跳过,代码如下

阅读全文...

此刻,感恩

2013年7月12日 6 条评论
文章作者:Yx.Ac   文章来源:勇幸|Thinking (http://www.ahathinking.com)   转载请注明,谢谢合作。

---

过去这一年是不怎么好过的一年,经历了很多事,一年中碰到的事情感觉比整个大学遇到的还要多,很庆幸现在都成为过去,自己也对即将开启的新生活充满期待。

这一年中,得到了太多人的帮助,我真心很感恩,感谢在我困难时那些伸出援手的挚友,感谢在我窘迫时那些能够陪伴我的人,感谢在我几近绝望时帮我创造机会以及给予我机会的人,感谢一直给我鼓励打气的朋友。

在以后的人生中,我也会努力去为身边需要帮助的人做我能做的事,在我有能力为别人创造机会的时候我也会尽力,希望将我得到的正能量也传递给需要正能量的人。

此刻,感恩。

这一年,还要感谢自己,感谢曾经倔强的自己,感谢一直没放弃的自己。有时候我在想,应该对过去的一年好好总结,想来想去我觉得没什么总结的,这些都是要经历的,只有经历才会增加厚度,除了感恩,没有其他,埋在心底,继续努力吧。

此刻,我更加坚定:现在的碎碎片片要虔诚地对待,总有一天它会成为你做成一件事情的一针一线!就像乔布斯说的,你所学的一切终究会用到,总有一天它们会串联成一条线。我想,到那一天,我们都会感谢曾经认真的自己。 阅读全文...

分类: 生活随笔 标签: ,

Twitter online 两题

2013年6月15日 7 条评论
文章作者:Yx.Ac   文章来源:勇幸|Thinking (http://www.ahathinking.com)   转载请注明,谢谢合作。

---

今天有个群里发了两道twitter online的题目,看了下,练手写一下。

题一:

A zero-indexed array A consisting of N different integers is given. The array contains all integers in the range [0..N−1]. Sets S[K] for 0 ≤ K < N are defined as follows: S[K] = { A[K], A[A[K]], A[A[A[K]]], ... }. Sets S[K] are finite for each K.

Write a function:

class Solution { public int solution(int[] A); }

that, given an array A consisting of N integers, returns the size of the largest set S[K] for this array. The function should return 0 if the array is empty.

阅读全文...

再谈数字序列和为0

2013年5月8日 4 条评论
文章作者:Yx.Ac   文章来源:勇幸|Thinking (http://www.ahathinking.com)   转载请注明,谢谢合作。

---

之前研究过一道微策略的笔试题-数字序列和为零,当时采用DFS做的,深感别扭,后来在Tutu_Lux的帮助下,得到一个不错的方案,思路简单,说白了就是暴搜,但实现巧妙,代码灰常漂亮。感谢Tutu_Lux

先说一下大致思路,然后贴代码,之后分析代码中的各个函数,实现充分展现了Tutu_Lux扎实的基本功和灵动的脑瓜子,哈,:-) 。

思路:

  1. 由于N是从3至9的范围,解决方案就是针对每个N的取值,先计算三个分隔符“_ + -”填入序列1-N的所有可能组合的情况总数
  2. 设置所有情况的组合序列(采用3进制的思想,即set函数)
  3. 对每种组合计算表达式值,如果为0则输出(利用栈&状态机,calculate函数)

代码如下:

阅读全文...

IP地址字符串转无符号整型uint—自动机思想【小米、腾讯面试题】

2013年5月6日 4 条评论
文章作者:Yx.Ac   文章来源:勇幸|Thinking (http://www.ahathinking.com)   转载请注明,谢谢合作。

---

题:写一个把字符串的IP地址变成32位整数的函数,要求考察程序健壮性。

这个很能考察眼高手低的问题;如果考虑程序健壮性,有很多的非法情况需要考虑,稍有不慎就会有欠考虑的情况;如不考虑非法情况,转换的过程无非就是分解整数,合并这两步;只需两句代码就可以搞定,如下:


sscanf(ipstr, "%d.%d.%d.%d", &a, &b, &c, &d);

return (a<<24)|(b<<16)|(c<<8)|d;

但是考虑程序健壮性就没这么简单了,不过核心思想也就是上面的两句话,下面将各种错误情况定义成状态表,程序如下:

阅读全文...

必应词典新应用改进建议

2013年5月3日 4 条评论
文章作者:Yx.Ac   文章来源:勇幸|Thinking (http://www.ahathinking.com)   转载请注明,谢谢合作。

---

首先感谢编程之美全国挑战赛在之前的活动中给予的最佳博客奖,这里对必应词典新出的两个应用(必应电台&单词挑战)的使用体验简单描述下:

必应电台

1. 个人建议“听写”这个功能可以砍掉了,有点凑功能的嫌隙。首先,在如此快的播放速度下,用键盘跟着语速敲出来难度太大,仔细考虑下,这个功能的实用性真心不大;其次,已经提供了原文参考,这跟提交对比没啥区别;再者“返回听写”这个按钮也是冗余的,其功能也就是上面的播放开关的“开”的功能。

2. 除了CRI的内容,可否有更多一些收听选择?

3. 点击了左侧的收听列表,电台就自动从节目单的第一条开始播放,个人觉得没必要;要播放哪个,用户自己来选择就好,省的用户还没反应过来,已经播放一大块了,即使要收听最新的内容也还是要重新点击从头播放。

4.关于推广,我搜索了CRI每日新闻,发现有下载CRI音频的需求,但是他们未必知道bing的这个应用,其实bing很多东西做的挺好的,就是感觉缺少一些推广,个人感觉必应词典客户端界面下面的广告较烦人,倒不如换成“体验必应英文电台,下载CRI音频”这样类似的文字,为自己的应用产品做一些推广,而不是做其他的广告。

阅读全文...

UNIX环境高级编程学习笔记(中)

2013年5月1日 没有评论
文章作者:Yx.Ac   文章来源:勇幸|Thinking (http://www.ahathinking.com)   转载请注明,谢谢合作。

---

此文作者:冰镇南瓜汁;mail:munantv@qq.com

进程环境

常用函数:

<unistd.h>

void _exit(int status);

<stdlib.h>


void exit(int status);
void _Exit(int status);

正常终止程序,_Exit和_exit立即进入内核,exit要先执行清理工作(包括关闭所有打开的流,以及调用终止处理程序)。

int atexit(void (*func)(void));

登记终止处理函数,这些函数会被exit自动调用,调用的顺序与登记的顺序相反,登记多次会导致调用多次。成功返回0,出错返回非0值。


void *malloc(size_t size);
void *calloc(size_t nobj, size_t size);
void *realloc(void *ptr, size_t newsize);
void free(void *ptr);

malloc(memory allocation)分配指定字节数的存储区,初始值不定。calloc为指定大小指定个数的元素分配存储区,每一个位置都初始化为0。realloc更改以前分配区的长度。free释放ptr指向的存储空间。

阅读全文...