Chinaunix首页 | 论坛 | 博客
  • 博客访问: 215876
  • 博文数量: 71
  • 博客积分: 481
  • 博客等级: 二等列兵
  • 技术积分: 530
  • 用 户 组: 普通用户
  • 注册时间: 2012-02-24 09:07
文章分类

全部博文(71)

文章存档

2012年(71)

分类:

2012-05-06 23:07:43

http://blog.chinaunix.net/space.php?uid=20168535&do=blog&id=330500

写在前面:做为2001年就注册了CU的老会员,其实坦白说现在上CU的频率稍微低点,自从 2002年好像我记得是这年,在论坛多个版主会员之间陷入一场吵架后,我宣称自此再不上CU后,我很久没访问CU ,直到2003年实在忍不住又注册了个ID ,十年过去了,2001年我才刚刚接触UNIX ,回想当年是多么幼稚,无论技术还是泡坛子…… CU的朋友联系我升级博客希望我多发博文,算是纪念这逝去的青春和这十年的技术生涯吧,打算发表一篇好一点的文章,想来想去,在LAMP兄弟连教学中很多 学生很困惑和难以形成系统的是Linux的权限问题,于是计划做一个连载文章详细剖析下,估计会很长,只好连载了,再者时间有限,容我陆续发完吧。这年头 提倡眼球经济,标题起的雷人点,敬请见谅。
 
 
Linux权限360度赤裸裸华丽丽大曝光连载之一:从ls开始
                                               
                                                           LAMP兄弟连 李明(ID:肥同小可)
                                                           Email/QQ:
 
                                          [原创文章,转载请注明作者及出处,谢谢]
 

ls命令开始

 

Linux学习的第一步就是掌握常用命令,Linux命令众多,以笔者使用的Red Hat Enterprise Linux 5.4来 说,有大概两千多个命令,假设每个命令有二十个选项,如此多的命令和选项全部敲一遍,简直是在浪费生命浪费键盘浪费手指头,更加没有必要买一本大部头的什 么命令大全之类的东西狂看,真正在管理应用中使用到的命令大概也就只有一二百个,所以要把握学习的原则,掌握最常使用的命令和最常使用的选项即可。在入门 悟道之后,碰到未知的命令或选项,只要自己掌握获得帮助的方法,即可一通百通,如同已有九阳神功护体再学习乾坤大挪移或葵花宝典就小case了。

学 习命令的窍门之一是掌握方法,把每个命令的英文全称和每个选项的英文单词找到,籍此记忆强于死记硬背,方可事半功倍;学习命令的窍门之二是不断的练习和实 验,记住,练习是掌握命令的最好方法,毛主席教导我们说“实践是验证真理的唯一标准”;学习命令的窍门之三是学习和练习每个命令或选项时不要形而上学,要 多想一想什么时候会用到如何去用,才能让你的知识系统化和有目的性。

 

Linux中使用频率最高的命令唯ls莫属,而ls使用最多的选项自然是-l 。本讲即以ls -l命令为例做一示例讲解,全做抛砖引玉。

ls意为“list directory contents”,列出目录内容之意,可理解为ls即为list的缩写;-l意为“use a long listing format”,长格式显示,通俗点说就是显示文件的详细信息,可理解为l即为long的缩写。通过maninfo等帮助命令可获得此信息,英文不好的兄弟还可籍此学习(每天背上二三十个英文单词,不出三个月所有Linux英文帮助文档相信应该都差不多可以看懂),通过这种方法记忆会容易得多。

 

Linux中使用ls -l命令查看文件的详细信息:

-rw-r--r-- 1 root root 27974 Oct 27  2009 install.log

 

-rw-r--r--第一个字符表示文件类型,常见的文件类型包括:-表示二进制文件,d表示目录,l表示软链接文件,使用ls查看会发现有颜色标记不同的文件类型,如目录是蓝色、二进制文件是白色、软链接是青色……默认ls查看目录内容是没有颜色标记的,之所以会显示这样的信息,因为在Linux中默认有一个别名定义:

# which ls

alias ls=`ls --color=tty`

       /bin/ls

甚至颜色还可以更改,比如你喜欢黄色想把目录改成黄色,只需编辑配置文件/etc/DIR_COLORS即可,把这个文件复制改名并保存用户宿主目录中(cp /etc/DIR_COLORS ~/.dir_colors),就可以产生一个用户独立的配置,具体颜色如何更改只要看此文件的注释说明即可。笔者并不推荐用颜色的方式识别文件类型,一来大多UNIX默认无此设置;二来很多远程登录管理工具默认不支持颜色标记。

尤其要说明的是软链接文件,在Linux中,有两种链接文件,一种是软链接,类似Windows的桌面快捷方式;一种是硬链接,相当于复制+同步更新。

# ln -s install.log install.log.soft   # 生成install.log文件的软链接文件install.log.soft

# ln install.log install.log.hard   # 生成install.log文件的硬链接文件install.log.hard

# ls -l install.log install.log.soft install.log.hard

-rw-rw-r-- 2 root admgroup 27941 May 20 07:42 install.log

-rw-rw-r-- 2 root admgroup 27941 May 20 07:42 install.log.hard

lrwxrwxrwx 1 root root        11 May 29 01:14 install.log.soft -> install.log

可以观察到软链接文件用l标记,权限皆为“lrwxrwxrwx”,会有->指向源文件,它很小,同Windows快捷方式一样,只是一个符号链接。而硬连接所有属性与原文件相同,且与原文件可以同步更新,最牛X的是原文件即便被干掉了,硬连接依然有效,而软链接当然就死翘翘了。知其然还要知其所以然,为什么硬链接可以这么牛XX ,在此要先讲一个Linux法则,这个法则说的通俗一点就是Linux内核这家伙不认识字母,所以它在管理文件时文件要用一个数字标记,就是i节点;同样,用户要有一个UID 、用户组要有一个GID 、进程要有一个PID …… ls -i可以查看到文件的i节点:

# ls -i install.log install.log.soft install.log.hard

679394 install.log  679394 install.log.hard  679477 install.log.soft

Linux中每个文件必须有一个i节点,反之,一个i节点是不是必须对应一个文件,一般来说是的,但是硬链接就是个特例,大家会看到原文件和硬链接对映一个i节点,所以它们会同步更新,因为内核不管文件名是什么它只识别i节点,这就是硬链接和原文件可以同步更新的原因。

 

其他九个字符,每三个字符对应一种用户类型,简单来说,Linux中基本的权限管理,是每个文件把用户分成了三类:

第一类是所有者(u),也就是文件的创建者或拥有者

一般来说文件的创建者就是所有者,但有时会变更文件所有者,比如笔者原本在写一个防火墙脚本,因出差,工作要转交给另一个同事,索性把文件所有者改为他,他即可拥有对文件的全部操作权限,此时可以理解为他是文件的拥有者也就是所有者。文件的所有者只能有一个。

第二类是所属组(g),可以定义一组具有相同权限的用户对文件的操作权限

文件所属组默认就是创建文件的所有者所在的缺省组,一个用户可以属于多个组,但是只有一个缺省组,就像不管你是多么大个的花心大萝卜,你只能有一个媳妇,这就是缺省的,缺省的只能有一个,而且在Linux中 规定,没媳妇的萝卜是不允许存在的!每个用户必须有个缺省组,添加用户时如果没有指定所属组系统会自动为你分配。理论上来说,一个管理做的很好的系统,应 该每个用户都隶属于至少一个组,不可能添加一个用户到系统是什么都不让他做的或者他不属于任何公司部门的,这是管理员要规划好的事情。

第三类是其他人(o),如果不是所有者也不是所属组中的成员,那么就属于其他人

Linux中的用户分类比较简单,权限也简单的分为r可读、w可写、x可执行三种,ls-l的第三个部分“root root”分别对应着文件的所有者和所属组,所以此文件的权限为:所有者root对文件有读写权限,而所属组root用户组和其他人只有读权限。

 

案例一:深入理解rwx

 

做一个小实验,用root用户登录系统,然后执行:

# mkdir /test   # 创建目录/test

# chmod 777 /test   # 目录权限修改为777rwxrwxrwx

# touch /test/newfile   # /test目录下新建文件newfile

# ls -ld /test   # 查看/test目录详细信息

drwxrwxrwx 2 root root 4096 May 20 07:46 /test

# ls -l /test/newfile   # 查看/test/newfile文件详细信息

-rw-r--r-- 1 root root 0 May 20 07:46 /test/newfile

# su - zhangsan   # 切换用户身份为用户zhangsan

$ rm /test/newfile   # 删除/test/newfile文件

问题:普通用户zhangsan是否可以删除管理员root创建的newfile文件?

答案是:可以。很多朋友觉得不可以,因为newfile文件是root创建且其他用户没有写权限,这其实是搞错了一个概念:认为删除一个文件的前提条件是对文件有写权限。要注意的是,rwx对于文件和目录的意义是截然不同的,这往往是新手容易忽视的地方,我们通过表格比较一下。

 

代表字符

权限

对文件的含义

对目录的含义

r

可读

可以查看文件内容

可以列出目录中的内容

w

可写

可以修改文件内容

可以在目录中创建、删除文件

x

可执行

可以执行文件

可以进入目录

 

1、对于文件来说

可读是指可以使用catmore等命令查看文件内容;

可写是指可以使用vi等编辑器修改文件内容;

可执行指的是这个文件可能是命令或者Shell脚本等,可以执行。

2、对于目录来说

可读是指能使用ls命令显示目录下的内容;

可写指的是能够在此目录下使用mkdirtouchrm等命令创建或删除文件;

可执行指的是能够使用cd进入目录。

所以,在Linux中,一个文件能否被删除,是取决于命令执行者对文件所在目录是否有写权限,而与文件本身权限无关,文件本身权限只是限定文件内容查看或修改权限及是否可执行。

 

案例二:用户授权

 

授权用户zhangsanlisi/backup目录具有读写权限,是Linux中最基本的用户与权限管理,一般的做法是:把zhangsanlisi用户加入到一个用户组中,然后改变/backup目录的所属组为此用户组,再将所属组权限设置为rw即可。

# groupadd admgroup   # 添加用户组admgroup

# gpasswd -a zhangsan admgroup   # 将用户zhangsan加入用户组admgroup

# gpasswd -a lisi admgroup   # 将用户lisi加入用户组admgroup

# grep admgroup /etc/group   # 查看admgroup用户组的信息

admgroup:x:502:zhangsan,lisi

# chgrp admgroup /backup   # 改变/backup目录的所属组为admgroup

# chmod g+w /backup   # 给所属组添加w可写权限

# ls -ld /backup   # 查看/backup目录详细信息

drwxrwxr-x 2 root admgroup 4096 May 20 08:19 /backup

以上是授权用户对目录的访问权限,若授权用户对文件的控制权限,则要更复杂一点,除了对文件本身授权外,还要授权用户对文件所在目录具有可读可执行权限,如root用户创建的脚本/script/userinfo.sh如果授权某个普通用户可以执行,那么除了授权用户对/script/userinfo.sh要有rx权限,还要对/script目录也具有rx权限。类似的例子,Linux系统在安装后会在/root下生成安装日志文件,设置用户zhangsanlisi/root/install.log文件有读写权限,还要考虑用户对文件所在目录/root要具有可读和可执行权限,否则依然无法获得文件的操作权限。

如果想授权一个文件或目录让某个用户有全部的操作权限,还有一种最简单的方法,只要修改文件或目录的所有者为此用户即可(chown 用户名 目录名/文件名)。

 

做为权限管理的补充,要记住一点,在Linux系统中任何时候新建的文件不能具有可执行权限(x),默认用户创建的文件权限umask掩码值为022 ,也就是说默认权限为777-022=755 ,但是实际上新建目录权限真的为755 ,而二进制文件都取消了x权限,实际权限为644

 

但是若是有一个文件或目录,要设置用户张三有rwx权限,用户李四有rw权限,用户王五有r权限,用户赵六有rx权限,怎么办呢?各位兄弟莫急,这个,且待下回分解,请继续关注Linux权限360度赤裸裸华丽丽大曝光连载文章,精彩即将呈现!

 

下面接着把ls -l其他部分内容看完吧——

ls -l的第二部分“1表示硬连接数,默认文件本身起始硬链接数就是1 ,如果新建了一个硬链接文件,会更新为2 ,此项意义不大,不做过多讨论。

ls -l的第五部分“27974表示文件大小,在笔者使用的系统中是以字节为单位,但是很多LinuxUNIX系统单位以数据块为单位,一个数据块为512字节。

ls -l的第六部分“Oct 27  2009表示文件的创建时间或最后更改时间(如果文件在创建后被更改过的话)。

最后一部分“install.log”自然就是文件名了,在Linux中与Windows不同,第一,文件不必一定有后缀名;第二,文件名可以使用除“/”以外的任意字符;第三,以“.”开头的文件在Linux中表示隐藏文件。

 

至此,笔者对ls -l命令做了一个简单的介绍,更多的ls使用方法和选项可以通过man ls获得,记住,没有任何出版的图书或网上的资料会比官方的文档写的更正确,授之以鱼不如授之以渔,诚如一个程序员不会追女孩,给他安眠药让他犯罪,还不如让他认识陈冠希,貌似扯远了……

 

    (连载第一篇,字数多点,敲的累死了,各位有钱的捧个钱场,没钱的捧个人场吧……)

 

连载文章会陆续发布,有喜欢的朋友请关注我博客:samlee.blog.chinaunix.net

更多我的Linux免费视频教程可通过电驴下载:
阅读(779) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~