一、权限的分类
Linux中,文件的权限主要有三类:
r:读权限(read)
w:写权限(write),创建新文件也属于w权限
x:执行权限(excute),如果文件具有x权限,则表示文件可以发起进程;若目录具有x权限,表示目录可以使用ls-l查看,可以使用cd切换至该目录中。
针对具体的文件,权限一共有9位,前三位属主,用u表示(user);中间三位属组,用g表示(group),最后三位属于其他,用o表示(other)。因此所有的权限如下表:
字母表示二进制表示八进制表示描述
---0000无权限
--x0011执行权限
-w-0102写权限
-wx0113写和执行权限
r--1004只读权限
r-x1015读和执行权限
rw-1106读写权限
rwx1117读、写和执行权限
三位2进制数可以表示一个八进制数,因此在实际操作中,我们可以用阿拉伯数字数字来表示三类用户对文件的权限。例如:
777: rwxrwxrwx// 属主u:读、写和执行;属组g:读、写和执行;其他o:读、写和执行
755: rwxr-xr-x// 属主u:读、写和执行;属组g:读和执行;其他o:读和执行
750: rwxr-x---// 属主u:读、写和执行;属组g:读和执行;其他o:无权限
700: rwx------// 属主u:读、写和执行;属组g:无权限;其他o:无权限
644: rw-r--r--// 属主u:读写;属组g:读;其他o:读
640: rw-r-----// 属主u:读写;属组g:读;其他o:无权限
600: rw-------// 属主u:读、写;属组g:无权限;其他o:无权限
440: r--r-----// 属主u:只读;属组g:只读;其他o:无权限
400: r--------// 属主u:只读;属组g:无权限;其他o:无权限
二、改变文件权限(mode):
在Linux中,改变文件权限的常用命令如下所示:
# chmod [option] MODE FILE_NAME
权限定义的方式主要有如下两种:
1.同时修改三类用户的权限:采用8进制数字方式
2.修改某一类或某些类用户的权限:u,g,o, a
采用的形式可以是:
u=rw
u=rwx,g=r--
ug=r---wx
ugo=-w-r----x
a=rwx
如改变文件message的其他权限为只读:
# chmod o=r message
改变文件message的属组权限为读写:
# chmod g=rw message
改变文件message三类用户的权限为只读权限:
# chmod ugo=r message
改变文件message属主属组为读写权限:
# chmod ug=rw message
同时改变三类用户的权限,可以用 a(All)来表示ugo,如改变文件message三类用户为读写权限:
# chmod a=rw message
可以用逗号分隔,来同时改变多类用户的不同权限,如改变文件message的属组为只读权限,其他用户没有任何权限:
# chmod g=r,o=--- message
3.只操作某类用户的某位权限或某些权限
可以使用u,g,o,a和+/-等符号来进行此项操作:
如给message的属组加上写权限:
# chmod g+w message
如给message的所有用户都加上/去掉执行权限,注意a可以省略:
# chmod +x message
# chmod -x message
如去掉message属主用户的读写权限:
# chmod u-rw message
注意以上的权限修改改的是文件本身的权限,如果文件是目录,那么修改的就是目录的权限,而非目录里的文件权限。
如进行以下操作:
# ls /var/log
# cp /etc/inittab /var/log/cups
# cp /var/log/cups ./ -r
# ls -l
# ls -l cups
就会发现目录 cups和cups里的文件各类用户的权限是不一样的
下面我们可以分别对目录cups 和其中的文件进行权限修改:
# chmod o=--- cups/
# ls -l
此时可以看到cups目录的权限已经被修改了,但是输入以下命令:
# ls -l cups
则会发现其中的文件权限没有受到影响
如果想要修改目录权限的同时也修改目录中文件的权限,则可以使用-R选项进行递归修改:
如同时去掉目录cups和其中的文件inittab的全部属组权限,可以进行如下操作:
# chmod -R g=--- cups/
#ls -l
#ls -l cups
改变文件权限时可以使用--reference选项。此选项的使用格式为:
#chmod --reference=[PATH]/FILE_NAME1 FILE_NAME2
它的作用是将 FILE_NAME2的权限改为FILE_NAME1的权限,例如:
# ls -ld /etc // -ld 选项是用来查看目录本身的权限的,这里查看的是目录/etc的权限
# ls -l // 查看当前目录下cups的目录权限,可以发现cups和/etc的权限不一致
# chmod --reference=/etc cups //将cups的权限改为etc的权限
# ls -l // 此时可以看到cups和/etc的权限一致了
-R 和--reference两个选项可以一起使用,但这种情况并不常见,因为多数时候文件的权限并不相同。