博文

(转)Solaris RBAC系统简介(2009-06-29 19:57:00)

摘要:Solaris RBAC(Role-Based Access Control)系统简介 转自http://blogs.sun.com/maxzhen/entry/solaris_rbac_role_based_access 众所周知,Solaris的安全性是世界领先的。而Solaris的RBAC系统(基于角色的存取控制系统)则为其领先性提供了强大的技术保证。最近因为一个项目需要,我有幸接触了一下RBAC系统,发现其复杂性估计也是世界第一了(天下没有免费的午餐啊)。 记得那天需要做项目中有关安全方面的设计,由于自己安全方面的相关知识十分缺乏(只知道root能干所有的事情,non-root只能缩在自己的home目录里面,权限少的可怜),只得去咨询一位安全方面的资深工程师。原以为在他办公室门口几分钟就可以问清楚的问题,结果,硬是被他揪到一个会议室里面连讲带画图的说了两个小时。最后,他告诉我两条结论:第一,我们项目目前的模块设计无法保证安全,需要重新进行功能模块划分;第二,按照他以往的经验,如果我出门不马上把他给我讲的写下来,通常情况下,24小时后就基本上忘的差不多了。 现在已经过了n个24小时了,记忆已经模糊。我必须把我还记得的一些写出来,以免下次再去问同样的问题^_*。 RBAC系统和以往root包打天下的系统最大的不同就是定义了许多特权(privileges(5))。我们可以把这些特权都集中在root身上(那就是和以前的系统一样了),也可以把他们分配给不同的用户(于是,普通用户也就可以拥有部分的特权了)。其实,在本质上,我们是把特权分配给在系统中运行的用户进程,使得他们可以通过系统调用来请求操作系统内核来完成程序运行需要的功能。 在一台机器上,操作系统内核是真正的主宰者,拥有权力执行任何指令。保证一台机器的安全,从某种意义上来说就是保证操作系统内核不被怀有恶意的用户程序(通过系统调用)滥用。在RBAC系统中,请求执行某个系统调用,要求该用户进程拥有相应的特权。如果不具备相应的特权,系统调用的执行将会失败。 例如,root用户可以改写任何其他用户拥有的文件,这是因为root用户拥有“file_dac_write”的特权。当write()系统调用被执行的时候,内核将检查用户进程是否有file_dac_write特权,从而决定是否完成这个写操作。如果我们将“......

阅读全文(2109) | 评论:0

(转)删除NIS(2009-06-26 11:09:00)

摘要:删除NIS 转自http://blog.chinaunix.net/u2/80598/showart_1687152.html 1)停止NIS服务守护进程 # /usr/lib/netsvc/yp/ypsttop 2)删除NIS域名 # domainname “” # rm /etc/defaultdomain 3)更换/etc/nsswitch.conf文件 # cp /etc/nsswitch.files /etc/nsswitch.conf 4)删除文件及目录 master server:/nis、/var/yp/domainname、/var/yp/*.time、/var/yp/binding/* slave server:/var/yp/domainname、/var/yp/*.time、/var/yp/binding/* client:/var/yp/binding/* # rm -r /nis # rm -r /var/yp/domainname # rm /var/yp/*.time # rm -r /var/yp/binding/* 5)编辑/var/yp/aliases文件,删除包含NIS域名的一行 6)编辑/etc/hosts文件,删除配置NIS时添加的主机相关信息 7)重启 # sync # reboot  配置NIS的步骤见http://blog.chinaunix.net/u2/80598/showart_1671156.html......

阅读全文(1378) | 评论:0

(原创)按字节截取含有中文汉字的字符串(2008-07-21 00:32:00)

摘要:  Java中1个char类型的变量可存储任意编码的1个字符,如1个ASC码和或1个中文字符,例如:含有3个ASC和含有3个汉字字符的字符串长度是一样的:     "1ac".length()==3;     "你好a".length()=3; 但上述两个字符串所占的byte是不一样的,前者是3,后者是5(1个汉字2byte)。 请编写函数:     public static String leftStr(String source, int maxByteLen)   从source中取最大maxByteLen个byte的子串。当最后一个byte恰好为一个汉字的前半个字节时,舍弃此byte。例如:      String str="我LRW爱JAVA";     leftStr(str,1)=="";     leftStr(str,2)=="我";     leftStr(str,4)=="我LR";     leftStr(str,11)=="我LRW";或者,当最后一个byte恰好为一个汉字的前半个字节时,补全汉字(多截取一个byte)。例如:      String str="我LRW爱JAVA";     leftStr(str,1)=="我";     leftStr(str,2)=="我";     leftStr(str,4)=="我LR";     leftStr(str,11)=="我LRW爱";......

阅读全文(7817) | 评论:1

(原创)正则判断时间(2008-07-19 23:52:00)

摘要:  刚刚学习正则,正则正是很好很强大的东西。   练习下,时间格式为“HH:mm:ss”或“HH:mm”,采用24小时制。 普通方法为,分离出小时、分钟、秒分别进行判断:      public static boolean timeCheck(String time, String owner) {        //检查时间字符串time是否满足格式“HH:mm:ss”或“HH:mm”,若不满足显示相应消息,并返回false        if(time.equals("")){            String msg = owner+" : "+"Time is EMPTY.";            MessageDialog.showError(Controller.getMainFrame(), msg);            return false;        }        int hours, minutes, seconds = 0;        StringTokenizer st = new......

阅读全文(2943) | 评论:0

庞涓和孙膑问题(2008-07-19 21:30:00)

摘要:  一日,鬼谷子在2--100这99个数字中选了2个数字,然后把它们的和告诉了庞涓,把积告诉了孙膑。当然,庞涓不知道积是多少,孙膑不知道和是多少。第二日,庞涓遇见孙膑,很傲慢的对孙膑说:“虽然我不知道这两个数是多少但是我肯定你也不知道。”孙膑立刻还击道:“本来我不知道的,但是现在我知道这两个数是多少了。”庞涓想了一 会,说道:“现在我也知道这两个数是多少了。”   求这2个数........

阅读全文(2398) | 评论:0

(原创)JavaToHtml(2008-07-19 19:40:00)

摘要:  为了方便在blog中粘贴源代码,特意找了这方面的工具(本来琢磨自己写,可惜能力有限,再次受打击了~~~) JavaToHtml开源,Eclipse Plugin   大家都知道读源代码很累,读乱七八糟的源代码那就想吐了,所以格式化源代码还是很有必要的,不信看看下面的例子。 格式化后的漂亮效果: import java.util.Vector;public class Stack<T> {    private Vector<T> content;    public Stack() {        content = new Vector<T>();    }    public void push(T t) {        content.add(t);    }    public T peek() {        if (content.size() == 0) {            return null;        }        return content.get(content.size() -&......

阅读全文(2843) | 评论:1

(原创)JAVA只有值传递(2008-07-25 15:36:00)

摘要:  不明白怎么那么多人对JAVA中的参数传递有疑问,Think In Java中指出“JAVA中只有值传递”(见3rd Edition P78注释1)。我觉得记住这点挺重要的。   参数传递有“值传递”和“引用传递”之分,那么首先要弄清楚什么是“值传递”,什么是“引用传递”,其区分准则是什么?(参考http://hi.baidu.com/alljava/blog/item/6dddd4ca4f19be46f31fe765.html)   区分准则:形参和实参的关系。如果形参是实参的拷贝,则为值传递;否则,如果形参是实参的引用,则为引用传递。  显然,引用传递,改变形参的值将会影响实参;而值传递改变形参的值不会影响实参。  不能根据实参为引用就判定为引用传递,也就是要区分传递引用与引用传递。   引用传递是C++的特性(C#等其它后继语言可能也沿袭了),其典型例子如下:#include <iostream> using namespace std; //值传递 //形参是实参的拷贝 void swapByValueTranf(int a, int b){ cout<<"形参地址: a = "<<&a<<", b = "<<&b<<" | swapByValueTranf"<<endl; int t = a; a = b; b = t; } //引用传递 //形参是实参的引用 void swapByReferenceTranf(int &a, int &b){ cout<<"形参地址: a = "<<&a<<", b = "<<&b<<" | swapByReferenceTranf"<<endl; int t = a; a = b; b = t; } void swapWithNonSense(int* a, int* b){ cout<<"形参地址: a = "<<&a<<", b = "<<......

阅读全文(5106) | 评论:0

(转)JAVA经典例子(2008-07-19 19:56:00)

摘要:摘自http://topic.csdn.net/u/20080617/15/706679c5-e108-4ec0-801b-75728ad19fe6.html 1.一个饲养员给动物喂食物的例子体现JAVA中的面向对象思想,接口(抽象类)的用处 package com.softeem.demo;/** *@author leno *动物的接口 */interface Animal {    public void eat(Food food);}/** *@author leno *一种动物类:猫 */class Cat implements Animal {    public void eat(Food food) {        System.out.println("小猫吃" + food.getName());    }}/** *@author leno *一种动物类:狗 */class Dog implements Animal {    public void eat(Food food) {        System.out.println("小狗啃" + food.getName());    }}/** *@author leno *食物抽象类 */abstract class Food {    pro......

阅读全文(4924) | 评论:0

(转)我眼中的Java经典书籍(2008-07-13 04:55:00)

摘要:摘自http://www.knowsky.com/364533.html   什么叫“经典书籍”呢?     以往我们说,“一流的公司定标准,二流的公司搞技术, 三流的公司做服务,末流的公司卖产品”,其实这话并非全无道理。厌恶M$的人不少,但嘴上骂归骂,底下照样用Windows, 赌咒发誓不用的也未必不想暗地里钻研一下其中的技术,再狠点,干脆只看Linux的字符界面,连X都不用。 然而为啥不见哪位仁兄自己只玩自己弄的OS呢?M$和UNIX家族在OS上显然是具有语言霸权, OS搞到这份上基本上就是“标准”了,你愿意白手起家?呵呵~~~     说了这些废话,我无非想说的是,所谓Java的“经典书籍”,最好的就是Java的标准,也就是SUN的官方资料: From java.sun.comJavaTM 2 SDK, Standard Edition Documentation Version 1.4.2 [下载] JavaTM 2 Platform, Standard Edition, v 1.4.2 API Specification [下载] JavaTM 2 Platform Enterprise Edition, v 1.4 API Specification [下载] The Java Language Specification, Second Edition [下载] The JavaTM Virtual Machine Specification, Second Edition [下载] Java 2 Platform, Standard Edition, White Papers The Java Tutorial [下载] The J2EE 1.4 Tutorial [下载] The Swing Tutorial SUN官方系列推荐书目 Thinking in JavaJava 编程思想by BrUCe Eckel第一版京京工作室译本[下载]第二版候捷译本[下载(部分章节)]第三版原版[下载] [翻译(部分章节)][本书主页]书评: (2004-5-28)      说TIJ是“经典”想必不会有什么人反对,然而也许有人说这......

阅读全文(414) | 评论:0

(转)了解Java密码扩展的基础(2008-07-19 20:08:00)

摘要:摘自http://www.knowsky.com/362221.html Java密码扩展(The Java Cryptography Extension),是JDK1.4的一个重要部分,基本上,他是由一些包构成的,这些包形成了一个框架并实现了一些加密,密钥生成算法和协议,消息认证码等算法,这篇文章将想你介绍JCE的安装和使用。    值得注重的是,尽管JCE是JDK1.4的核心包的一部分,我们将首先用JDK1.2及高一点的版本向你演示一下假如安装配置JCE(静态安装)。稍后,将向你介绍如何在不安装的情况下使用JCE(动态安装)。最后,将演示怎么生成密钥和密码,及假如进行基本的加密.解密。提供者是什么?    提供者是特定加密算法的实现者,有的提供者(提供的加密技术)是免费的,有的不免费,IBM, Bouncy Castle, 和 RSA都是一些(加密)提供者.在本文的后面,我们将考察一下来自Bouncy Castle的RSA算法。Sun 也向大家说明了假如实现自己的提供者(需要符合jDK的一些约定)。静态安装    在安装和使用JCE之前,你需要从 Sun Web site(这里是以暗中sun的提供者为例).获得他的安装包,JCE有sun他自己的安全提供者-sunJCE,为了吧sunJCE静态的安装到默认的提供者列表中,你需要修改安全属性文件:•    <java-home>\jre\lib\security\java.security (Win32) •    <java-home>/jre/lib/security/java.security (UNIX)假如你把JDK安装在C:\jdk1.3,你需要编辑以下文件:C:\jdk1.3\jre\lib\security\java.security为了安装SunJCE,你需要在以上文件中加入:security.provider.n=com.sun.cr......

阅读全文(3138) | 评论:0