Linux用户和组,su和sudo的理解

对Linux的用户和组概念的理解,对配置Linux安全来说是很重要的。 这里我不进行说明用户和组的添加删除之类的使用说明! 主要进行说明该如何理解Linux中的用户和组的概念。 为了更好的理解这些概念,我们引入下面这个例子,其中可能有些地方不妥当,但都是为了方便我们理解。 先介绍下出场角色: root:Linux系统用户     饰演  房东 anykoro:Linux普通可登陆用户 饰演  房客 gardener:Linux不可登陆用户(nologin) 饰演  园丁 nginx:HttpServer  饰演  WebServerUser varnish:CacheServer  饰演  CacheServerUser naigos:Linux监控程序  饰演  PerformanceMonitor crontab或rc.local  : Linux执行任务  饰演 管家 注:以上的WebServerUser,CacheServerUser,PerformanceMonitorUser代表对应程序所属的用户,同时我们认为不使用root作为他们的用户。 我们的故事是这样开始, root买了一栋很大的房子,一直一个人悠闲自得的住在里面。突然有天root碰到了朋友anykoro,两个人一见如故,聊得很是开心。所以root让anykoro搬到自己这里来书,anykoro欣然同意了。于是root给anykoro一个房间(对应/home/anykoro),但是root没有告诉anykoro的活动范围(对应权限),所以anykoro就只能在自己的屋子里摆弄东西或者到外面大厅走走看看。root一看,不能这样,anykoro可是他的挚友啊。于是他和anykoro说,这里、这里、这里,这些等等,你都是可以用的,同时告诉他,你和他是同一战线(都属于root组),所以只要写着战友可用的,anykoro你就可以用。(对应权限系统中的gourp部分的执行权限)。anykoro大悦,果然生活多了很多自由。 光阴荏苒,2个月转眼间就过去了,root惊觉,屋外的花园中杂草丛生。这样放人不管也有点不像话,于是root亲自上阵,出去除草(对应 su root 除草)。可能长期不锻炼,root感觉太累了,而且还修剪的不好。root觉得他要找个园丁专门除草,于是他到中介(yum repo之类的地方)找了个园丁gardener(对应使用的程序)。但是园丁,毕竟是外人,是不能让他进屋子的,另外也没有必要让他进屋子,所以root就和gardener说,你就在外面收拾花草就行,我就不让你进屋子了。(对应指定useradd gardener -s …

继续阅读 »

配置Varnish的Service启动项

我们经常使用service varnish start之类,非常的方便,但是当你需要定制一些东西的时候,就会涉及到修改相应的配置项目。 其实,这个是相同的,对于别的程序也是如此,甚至也可以自己写。 在这里我们主要用到两个文件。 vim /etc/rc.d/init.d/varnish vim /etc/sysconfig/varnish 第一个文件就是我们service启动的脚本,第二个是service启动时候,会用到的配置文件。 我们现在举一个简单的场景, 比如,我现在需要将我的配置文件加载不使用default,使用my.vcl,同时监听80端口,内存2G,管理后台端口为2000,那么我们应该如何修改呢? 这里因为都是配置项目,其实我们不用修改/etc/rc.d/init.d/varnish这个脚本的内容,但是好好读这个文件,会让我们更容易调整。 接下来我们进入/etc/sysconfig/varnish。 找到我们需要修改的项,分别为: 1、将VARNISH_VCL_CONF=/etc/varnish/default.vcl,把这里的default.vcl改成my.vcl 2、将VARNISH_LISTEN_PORT=6801,把这里的6801改成80 3、将VARNISH_STORAGE_SIZE=1G,把这里的1G改成2G 4、将VARNISH_ADMIN_LISTEN_PORT=6802,把这里的6802改成2000 Ok,自此我们就改完了。这里只是简单的举个例子。 SyntaxHighlighter.defaults['class-name'] = ”; SyntaxHighlighter.defaults['smart-tabs'] = true; SyntaxHighlighter.defaults['tab-size'] = 4; SyntaxHighlighter.defaults['gutter'] = true; SyntaxHighlighter.defaults['quick-code'] = true; SyntaxHighlighter.defaults['collapse'] = false; SyntaxHighlighter.defaults['auto-links'] = …

继续阅读 »

CentOS防火墙配置实战

操作系统CentOS 5.7. 首先,先记住别用setup配置防火墙,因为灵活度有限,同时,还会还原你用iptables设置的规则。 另外,使用iptables配置完后要使用service iptables save进行保存。 如果你想快速看如何添加防火墙规则的请点击此处! 【正文】 一般来说我们使用iptables采用以下形式, iptables -A INPUT -i eth0 -p udp -s 60.195.252.110 –dport 1000 -j ACCEPT 这种并没有错。也是好用的。但是在centos系统中,其主要的防火墙设置都在RH-Firewall中了。下面就是一个样例: [root@nanya ~]# iptables -L -n Chain INPUT (policy ACCEPT) target prot opt source destination RH-Firewall-1-INPUT all — …

继续阅读 »

HTML和CSS中容易忽视的一些东西

一、选择器的效率 id选择器(#myid) 类选择器(.myclassname) 标签选择器(div,h1,p) 相邻选择器(h1+p) 子选择器(ul< li) 后代选择器(li a) 通配符选择器(*) 属性选择器(a[rel="external"]) 伪类选择器(a:hover,li:nth-child) 由上至下,效率递减! 二、选择器的优先级 选择器的优先级是用数值表示的, 下面是基本项的对应值 element style = 1000 #id = 100 .classname = 10 tag = 1 对于符合的情况则使用值的相加,例如 p .classname 其对应的数值为1+10=11。所以在做优先级比较的时候,使用11去和其他的样式优先级比较,如果大于其他的则渲染,覆盖原样式,否则不渲染。 三、浏览器的样式渲染机制 1、从上到下 浏览器的样式渲染,是从上到下的(至少ie如此),所以CSS中,对于类似样式的覆盖,还有个就近原则。它就是依据此的。 2、比较优先级数值,觉得是否渲染 在从上到下渲染过程中,比较样式优先级。然后选择是否渲染。就这样在不停的覆盖中,最终形成最终正确的样式。 以上两点是同时起作用的,不分谁先谁后。 四、浏览器的选择器解析机制 …

继续阅读 »

Varnish3.0中文入门教程

本教程为官方教程的完整翻译。并做了一定总结、整理。 整个Varnish的学习需要分成两个部分,PART1:部署篇,PART2:应用篇     第一部分:部署篇 作为一个Server Service,部署是最基本的,同时也没有太多需要说明的。按照官方的教程,一运行便可了。但是需要注意的是,–perfix什么的,具体怎么设置的,可要好好的记住,否则,以后要查起来,可就没有头绪了。另外,装了什么样的插件也要清楚的。 下面介绍下,安装方法。 针对CentOS系统,有两种方法安装,一种是通过rpm,另一种是通过源码安装。 一、通过rpm安装: 使用varnish-cache.org库,运行 rpm –nosignature -i http://repo.varnish-cache.org/redhat/varnish-3.0/el5/noarch/varnish-release-3.0-1.noarch.rpm 然后运行, yum install varnish –no-signature只在初始安装时需要,因为Varnish的GPG key还不再yum的keyring中。 二、通过源码编译安装: 1、获得源码文件 从http://repo.varnish-cache.org/source上下载tar包,找release版的。 或者你可以通过git克隆一个。Git clone git://git.varnish-cache.org/varnish-cache 要注意通过git签出的版本会比一般情况需要更多依赖包,尤其是Python Docutils和Sphinx。 2、所需要的依赖包 automake autoconf libtool ncurses-devel libxslt groff pcre-devel pkgconfig 3、配置和编译 确保上面的依赖包都满足,这样才能配置。基本命令如下 …

继续阅读 »

Javascript中Function,Object,Prototypes,__proto__等概念详解

Javascript中Function,Object,Prototypes,__proto__等概念是在JavaScript中很常用,但又总是不清不楚的概念。今天主要是解释他们之间的概念和关系,帮助我们更好的理解Javascript。 我们本次的解释,主要通过下图 粗看该图,估计你不一定能看明白。不过接下来让我逐行向你解释。 【第一行】 最左侧:意思是,有两个对象f1和f2,他们是通过new Foo()出来的。 中间:Foo()就是最左侧用到的Foo() 最右侧:表示,函数的prototype属性,对是函数的,不是对象的,站点要注意! 现在知道了各个区块的意思,接下来解释各条线是什么意思。 1、__proto__的虚线:该条线表示通过f1.__proto__可以访问到Foo.prototype,其实两者是等价的,我们可以通过以下代码验证。 function Foo(){ } var f1=new Foo(); alert(f1.__proto__==Foo.prototype);//true 2、prototype实线:表示通过Foo.prototype可以找到Foo.prototype。这里没有写错,这么写虽然看似有些废话,但是是要体现出流向的。 3、constructor实现:表示通过Foo.prototype.constructor可以找到Foo。验证代码如下: function Foo(){ } alert(Foo==Foo.prototype.constructor);//true 其中的意义在于f1.__proto__.constructor等于Foo 至此第一行结束了。 【插播】 在讲解下面第二行和第三行前,有两个很重要的概念需要深刻理解。否则理解下面的内容是举步维艰的。 Function和Object function Object(){[native code]}//Javascript自带,不是自定义的,可以近似认为是基类 function Function(){[native code]}//Javascript自带,不是自定义的,可以近似认为是基类 这里的这两个function,分别走两个方向, Object作为了众多object(实例,new出来的)的基类型 Function作为众多function(主要是那些function出来的,就是定义出来的函数)的基类型 在开始下面更细致的解释先,我们约定一些内容,Object代表这里所说的Object,object代表实例对象 ,Function代表这里说的Function,function是关键字。对于Object与object的区别很好理解,一个是function,一个是new出来。 现在让我们思考两个问题: …

继续阅读 »

闭包(Closure)详解及Javascript静态变量实现分析

闭包这一词很抽象,事实上概念并不抽象,但是应用起来还真的是很抽象。 先来看看定义(引自百度百科): 闭包是可以包含自由变(未绑定到特定对象)量的代码块;这些变量不是在这个代码块内或者任何全局上下文中定义的,而是在代码块的环境中定义。“闭包”一词来源于以下两者的结合:要执行的代码块和自由变量提供绑定的计算环境。   读完后感觉困惑是很正常的,我现在来好好解释下。 为了方便解释,我们给定义中出现的角色赋上代号,首先我们命名闭包为snippet,包含的自由变量为fvar,全局上下文变量统称为globals,代码块环境是context。 根据定义,我们可以如下改述: snippet含有fvar,此fvar在snippet中没有定义,同时globals中也不含有fvar的定义,所以,当我们单看snippet时候,你会发现fvar是一个未定义的变量。当我们把snippet放到context中,为了让其正常执行,我们需要补全fvar的定义,但又不能在snippet中定义。所以就要在context中定义。   有了上面改述的内容,我们再看一个实例,来加深理解,下面的代码,我使用JavaScript解释: var displayItemName=function(item){ var itemDefault = “default”; var closure1 = function(){ alert(item); } var closure2 = function(){ alert(itemDefault); } closure1(); closure2(); } displayItemName(“football”)   这里的displayItemName函数对应context,这里没有globals,closure对应我们前面说的snippet,closure中的item和itemDefault,对于closure来说是自由变量,也即对应fvar。但是对于context(displayItemName函数)来说,不是自由变量,并在其中定义了。   从这么多角度说,应该能搞清楚闭包的意思了。接下来我们用一句话总结闭包(针对JavaScript),就是: 在一个函数(父函数)中,定义另一个函数(子函数),子函数用到了父函数的变量,但自己并没有重新定义此变量,此时称该子函数为一个闭包。   上面的定义应该比原本的定义好理解多了,但要注意这主要是根据JavaScript的特性总结的,不同的语言室不同的。   …

继续阅读 »

使用xsd,让你的config文件更健壮

xml在Asp.net中应用得非常之多,很多时候,我们自己还需要加入新的配置文件,对于新的配置文件,如果我们使用xsd对xml进行约束的话,会让整个配置文件更容易排错,也更有利于程序的健壮性。 最主要!! 实现起来非常简单。 下面简述过程。 【第一步】 首先我们先写一个最简的情况的xml,不在于是否真的和实际情况相符,但是要体现出各种可能性。 <?xml version="1.0" encoding="utf-8" ?> <accessValidator redirectLocation="http://www.baidu.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mywebsite.com/Website"> <validator name="ReferrerValidator" type="ResourceService.Core.Validator.UrlReferrerValidator"> <!– ReferrerValidator使用的参数,不同的地址请用|间隔,例如localhost|127.0.0.1 –> <param key="UrlReferrer" value="localhost,*.0.0.1"/> </validator> <validator name="HttpMethodValidator" type="ResourceService.Core.Validator.HttpMethodValidator"> <!– HttpMethodValidator使用的参数,不同的地址请用,间隔,例如HEAD,GET –> <param key="HttpMethod" value="HEAD,GET"/> <param key="param1" value="param2"/> </validator> </accessValidator> 【第二步】 既然用Asp.net,IDE应该是Visual …

继续阅读 »

SAE版的ck-and-syntaxhighlighter

ck-and-syntaxhighligter是一个很不错的wordpress的编辑器插件。但是其不是针对SAE写的。所以,上传功能会受到限制。 这里我根据这个插件http://wordpress.org/extend/plugins/ck-and-syntaxhighlighter/ 已经前人做的一个sae版本的ckeditor+ckfinder做了简单的修改,地址为http://zuojianghua.sinaapp.com/。 不过目前还是有2个bug,1个是首次上传,无法显示已经上传的文件,2是无法删除目录 并且只支持php5 点击下载附件

操作系统中的几个重要概念

先看一个完整的场景,以下的场景和解释主要解释大致的原理。 Linux 在操作系统运行中运行一个程序,首先,系统会先起一个进程,此时进程会首先处在用户态,运行自己的代码,然后随着程序的不断执行,到了需要通过系统调用使用操作系统内核的阶段,此时进程就要进入内核态。此时有个最主要的事情要做,就是从用户态向内核态传送数据(进程上下文)。然后执行完内核程序,又回到用户态。如果执行完毕,进程进入睡眠状态。 里面涉及几个重要的概念 1、进程:执行一段代码,管理资源,但是线程的话,只是执行代码,不会管理资源。 2、用户态:进程执行用户自己编写的代码时,称为处于用户(运行)态。 3、内核态:当一个进程执行系统调用时,会进入内核代码运行,此时称进程处于内核(运行)态。 4、进程上下文:包含了一系列的进程用到的参数、数据和环境变量(包括了硬件和软件的)。 扩展: 内核空间(栈)和用户空间(栈): 这两种空间在Linux的虚拟空间中,对于32位Linux其寻址能力为(0×00000000~0xFFFFFFFF)其实就是4G的空间。这个大小也决定了32位Linux支持的内存大小,对于64位能支持的内存就大多了(可以自己算)。这里我们假定内存为4G,Linux中会把高位的1G(0xC0000000~0xFFFFFFFF)作为内核空间(栈),余下的3G作为用户空间栈。这里在操作系统的角度看,每个进程都共用了这4G的内存,大家共享资源。对于进程来说,他们看起来是每个都有一个4G的虚拟空间。这里说虚拟空间,是指,实际上是没有这么多的,因为是共享的。所以在使用很多Service程序时,在意其用户态和内核态的资源使用情况也是很重要的。因为过高的话,会影响其他的程序运行,并且这两个态会有短板效应,要兼顾。 地址: 逻辑地址 —-(段表)—> 线性地址 — (页表)—> 物理地址             启用分段时               启用分页时 注意:Linux在2.6时,实现了真正意义上的线程,但针对PHP来说,并没有办法使用线程。这边,为了利于PHP理解,就没有体现线程。 Windows 在操作系统运行中运行一个程序,首先,系统会先起一个进程,此时进程会创建一个主线程,主线程开始执行程序,根据程序的代码,会决定是否创建其他的辅助线程。首先进程处在用户态,然后随着程序的不断执行,到了需要通过系统调用使用内核程序的阶段,同时还会用户态会向内核态传递数据(进程上下文),此时进程就处在内核态。然后执行完内核程序,又回到用户态。如果执行完毕,进程进入睡眠状态。 里面涉及几个重要的概念 1、进程:进行资源管理,创建线程。 2、线程:执行代码片断。 3、用户态:进程执行用户自己编写的代码时,称为处于用户(运行)态。 4、内核态:当一个进程执行系统调用时,会进入内核代码运行,此时称进程处于内核(运行)态。 …

继续阅读 »

无觅相关文章插件,快速提升流量