Linux文件系统与权限设置

  • A+
所属分类:Notes

1 权限的意义
执行ls –l或ls –a命令时所显现的结果,最前面的2—10个字符用来标示权限。第一个字符一般用于区别文件和目录
d:表示这是一个目录。
-:表这是一个普通的文件
L:表示这是一个符号连接的文件,实际上它指向另一个文件
b、c:分别表示区块设备和其他的外围设备,是特殊类型的文件
S、p:这些文件关系到系统的数据结构和管道

2 文件目录的权限
linux下,每一个文件、每一个目录都有一个属主,并针对用户自己、用户所在组、其它所有帐号(组)分别设定读、写、执行三种权限。
例如,我(假定是webusers组的floatboat帐户的拥有者)使用如下命令建立一个新的文件
#touch mytestfile
然后我们使用
#ls -l mytestfile
这一命令来查看这个文件的权限状态(关于ls命令,以前讲过),可以得到如下的屏幕输出显示:
-rw-rw-r-- 1 floatboat webusers 0 Feb 6 21:37 mytestfile
输出由空格分为9个部分,我们比较关心第一、三、四个字段,分别表示文件权限属性、文件所有者帐户、文件所属组。

3 使用chown命令修改文件的主人
当你新建立一个文件的时候,文件的所有者当然就是你了。这一事实只有超级用户(比如说root)才可以通过chown命令改变(例如 chown otheruser mytestfile,把mytestfile文件的属主改为otheruser)。chown命令的用法比较简单。这里我先假设你现在拥有超级用户权限,那么你就可以使用如下命令将一个文件“送给”floatboat了:
#chown floatboat /home/floatboat/thefileisrootcreate.txt (假定该文件是由root创建的)
修改一个目录的所有者也是类似的:
#chown floatboat /home/newboat
当然,如果这个目录还有子目录及文件需要同时送给floatboat,chown也是支持-R参数的:
#chown -R floatboat /home/newboat
如果你同时想修改文件/目录所属的组的话,你可以使用以下命令方便的达到目的:
#chown -R floatboat.ftpusers /home/newboat

4 修改文件的组属性
修改文件的组属性,文件所属组你倒是可以改变,前提是:
你是超级用户。
你同时属于两个或两个以上的组。
两个条件你至少具备一个,你才能够把文件所属旧组变为新组。使用如下的命令将当前目录下所有html文件所属的组改为httpd:
#chgrp httpd *.html

和chown命令一样,chgrp也可以使用-R参数对一个目录内的所有文件和子目录进行递归的修改组属性。
<提示>:你可以使用不带参数的groups命令查看自己属于哪个组。
文件权限的设定是我们这一小节讨论的核心,我们主要介绍chmod命令的两种用法

5 使用访问字符串设置文件目录权限
正如上例所示。 如果要修改目录中所有文件和子目录的权限属性,可以使用chmod提供的-R参数来递归修改。例如,下列命令将/www/site1目录及其下面的子目录的权限属性设定为所有者和组可读、写、执行,其它用户不可访问:
#chmod -R a+rwx,o-rwd /www/site1
注意,不要轻易使用-R选项,这可能会带来安全隐患。使用字符串方便了理解,单输入那么多字母还是有点累,如果你对8进制有些概念的话,可以使用下面介绍的方法来做权限设置。

正如前面所说的,每一个文件、目录都针对用户自己、用户所在组、其它所有帐号(组)分别有读、写、执行三种权限及其组合。当一个普通用户新建一个文件的时候,它默认的访问权限显示就如我们刚才所举例子的第一个字段所示。
总共十位字符“-rw-rw-r--”,
第一位是目录区分标志,如果是d的话,表示这是一个目录。
第二到四位分别表示文件所有者的读(r:read)、写(w:write)、执行(x:execute)属性,
第五到七位是文件所属组的读、写、执行权限,
第八到第十位则是其它用户的读、写、执行权限。
如果对应的位是相应的字母,就是有这相应权限,否则为“-”,表示没有获得这个许可。像刚才例子中的文件就是自己可读写,本组可读写,其它用户可读,所有的用户(包括自己)都不能执行它。
我们的用u、g、o分别来指代用户(user)、组(group)、其它帐户(other),就可以方便的设置文件和目录的权限了。当然,我们也可以用a来表示所有的这三项。
例如,我们要对所有perl的脚本文件设定权限,对所有用户都可以读和执行,文件所有者还允许写许可,那么我们可以使用如下命令:
#chmod a+rx,u+w *.pl
注意:如果要使用多个访问字符串,它们之间要用逗号隔开,各个许可字符串之间不允许有空格。

6 用数字表示权限
R:对应数值为4
W:对应数值为2
X:对应数值为1
“rwx”合起来就是4+2+1=7,一个“rwxrwxrwx”权限权限全开的文件,用数字来表示就是“777”;而完全不开放权限的文件“---------”,它的数字标示则为“000”。下面再以几个例子说明
-rwx------: 等于数字标示700
-rwxr—r--: 等于数字标示744
-rw-rw-r-x: 等于数字标示665
Drwx—x—x: 等于数字标示711

7 使用八进制数设置文件目录权限
我们知道,在ls -l的输出中,文件权限表示为“-rw-rw-r--”,前一位只和是否为目录有关,其它九位正好可以分成三段,每段三位,“rw-”、“rw-”和“r--”,“-”代表无效“0”,其它字符代表有效“1”,那么这个文件的权限就是“110”、“110”、“100”,把这个2进制串转换成对应的8进制数就是6、6、4,也就是说该文件的权限为664(三位八进制数)。我们也可以使用类似这种三位八进制数来设定文件授权,如上边两个例子,就也可以写为:
#chmod 755 *.pl
#chmod -R 770 /www/site1
是不是很简洁?关键在于你能根据你需要设定的权限正确的选择八进制数(利用八进制数的二进制表示可以非常轻易的做到这一点)。

8 读、写、执行的权限说明
w(Write,写入)所谓写的权限,也就是对文件修改和删除的权限。如果目录的写权限也对你开放了,则可以创建、删除或修改该目录下的任何文件或自目录——即使该文件和子目录并不属于你。
R(Read,读取)对目录有只读许可的用户,不能用cd命令进入该目录;还必须同时有执行许可才可以进入该目录。
必须同时拥有读和执行权限才可以使用ls这样的程序列出目录内容清单。
x(eXecute)只对目录有执行权限的用户,想访问该目录下的文件有读权限的文件,必须知道该文件名才可以访问。 对文件而言,该用户具有执行文件的权限

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: