玩Linux的人都知道,Linux的安全性要比Windows高很多,而这主要是因为Linux中的安全权限机制,Linux中的用户和文件是组成系统的重点,而Linux的主要哲学思想是一切皆文件。Linux中的用户有用户的权限,分为普通用户和超级用户。文件有文件的权限,分别为读写执行权限。因为Linux中一切皆文件,对文件的操作就可以直接的操作系统,很多Linux高级服务器是没有图形界面的,都是对文件来直接操作来控制服务器,对文件的操作要通过用户来执行,而普通用户和超级用户的执行权限是不同的。
1.普通用户和超级用户权限的不同
超级用户是系统的所有者,可以对系统做任何的操作,甚至是删除系统的根目录。而 普通用户则有很大的限制,例如不能修改系统关键配置文件,想查看其他用户的文件则需要相应的权限
不能安装软件,甚至关机关机指令(shutdown或poweroff)都需要以root身份执行(sudo)。
2.理解“ls -l”
我们来看一看我们的 ls -l 输出,检查一下这个清单的第一栏:
$ ls -l /bin/bash
-rwxr-xr-x 1 root wheel 430540 Dec 23 18:27 /bin/bash
第一个字段 -rwxr-xr-x 包含该特殊文件的权限的符号表示。
该字段中的首字符(-)指定该文件的类型,本例中它是一个常规文件。其它可能的首字符还有:
“d”目录
“l”符号链接
“c”字符专门设备文件
“b”块专门设备文件
“p”先进先出
“s”套接字
3.文件权限rwx
r 表示允许读(查看文件中的数据),w 表示允许写(修改文件以及删除),x 表示允许“执行”(运行程序)。
通过rwx的不同组合实现文件的不同权限,
第一组rwx:文件所有者的权限是读、写和执行
第二组rw-:与文件所有者同一组的用户的权限是读、写但不能执行
第三组r--:不与文件所有者同组的其他用户的权限是读不能写和执行
也可用数字表示为:r=4,w=2,x=1 因此rwx=4+2+1=7
4.umask值
当我们登录系统之后创建一个文件总是有一个默认权限的,那么这个权限是怎么来的呢?这就是umask干的事情。umask设置了用户创建文件的默认 权限,它与chmod的效果刚好相反,umask设置的是权限“补码”,
而chmod设置的是文件权限码。一般可在/etc/profile、/etc/bashrc、$
[HOME]/.bash_profile、 $[HOME]/.profile或$[HOME]/.bashrc中设置umask值。具体取决于
Linux发行版,比如Fedora19下要更改自己的umask值,在$[HOME]/.profile或$[HOME]/.bash_profile
下的增加umask的值覆盖不了/etc/profile中的配置值的,必须在$[HOME]/.bashrc下增加umask值才可以永久定义自己的umask值。
- 如何计算umask值
umask
命令允许你设定文件创建时的缺省模式,对应每一类用户(文件属主、同组用户、其他用户)存在一个相应的umask值中的数字。对于文件来说,这一数字的最
大值分别是6。系统不允许你在创建一个文本文件时就赋予它执行权限,必须在创建后用chmod命令增加这一权限。目录则允许设置执行权限,这样针对目录来
说,umask中各个数字最大可以到7。
例如,对于umask值0 0 2,相应的文件和目录缺省创建权限是什么呢?
第一步,我们首先写下目录具有全部权限的模式,即777 (所有用户都具有读、写和执行权限)。
第二步,在下面一行按照umask值写下相应的位,在本例中是0 0 2。
第三步,在接下来的一行中记下上面两行中没有匹配的位。这就是目录的缺省创建权限。
稍加练习就能够记住这种方法。
第四步,对于文件来说,在创建时不能具有执行权限,只要拿掉相应的执行权限比特即可。
这就是上面的例子, 其中umask值为0 0 2:
1) 文件的最大权限 rwx rwx rwx (777)
2) umask值为0 0 2 --- --- -w-
3) 目录权限 rwx rwx r-x (775) 这就是目录创建缺省权限
4) 文件权限 rw- rw- r-- (664) 这就是文件创建缺省权限
下面是另外一个例子,假设这次u m a s k值为0 2 2:
1) 文件的最大权限 rwx rwx rwx (777)
2 ) u m a s k值为0 2 2 --- -w- -w-
3) 目录权限 rwx r-x r-x (755) 这就是目录创建缺省权限
4) 文件权限 rw- r-- r-- (644) 这就是文件创建缺省权限
5.改文件权限命令chmod
chmod [who] [+ | - | =] [mode] 文件名?
命令中各选项的含义为:
操作对象who可是下述字母中的任一个或他们的组合:
u 表示“用户(user)”,即文件或目录的所有者。
g 表示“同组(group)用户”,即和文件属主有相同组ID的所有用户。
o 表示“其他(others)用户”。
a 表示“所有(all)用户”。他是系统默认值。
操作符号是:
+ 添加某个权限。
- 取消某个权限。
= 赋予给定权限并取消其他所有权限(如果有的话)。
设置mode所表示的权限可用下述字母的任意组合:
r 可读。
w 可写。
x 可执行。
X 只有目标文件对某些用户是可执行的或该目标文件是目录时才追加x 属性。
s 在文件执行时把进程的属主或组ID置为该文件的文件属主。方式“u+s”设置文件的用户ID位,“g+s”设置组ID位。
t 保存程式的文本到交换设备上。
u 和文件属主拥有相同的权限。
g 和和文件属主同组的用户拥有相同的权限。
o 和其他用户拥有相同的权限。
例子:
chmod 755 abc:赋予abc权限rwxr-xr-x
chmod u=rwx,g=rx,o=rx abc:同上u=用户权限,g=组权限,o=不同组其他用户权限
chmod u-x,g+w abc:给abc去除用户执行的权限,增加组写的权限
chmod a+r abc:给所有用户添加读的权限