linux命令详解(16)linux系统文件/目录权限操作 chmod、umask、chown、chgrp命令详解

2014-12-9 13:11:53     6 人阅读    

 设定文件/目录权限
用户、用户组和其他用户等权限设置可以限定使用者能否访问文件、运行命令和进入目录。在Linux中列出文件和目录的详细信息(ls -l)时,显示的开头10个字符指示具体类型(文件、目录、块设备等)及其是否可读、可写和/或可执行。

实践本节示例时,需要新建一个/tmp/test目录和/tmp/test/hello.txt文件。随后列出两者的详细信息,如下所示:

$ mkdir /tmp/test
$ echo "some text" > /tmp/test/hello.txt
$ ls -ld /tmp/test/ /tmp/test/hello.txt
drwxrwxr-x  2 francois sales 4096 Mar 21 13:11 /tmp/test
-rw-rw-r--  2 francois sales   10 Mar 21 13:11 /tmp/test/hello.txt


创建上述目录和文件后,列出的详细信息首字符表明/tmp/test为目录(d),hello.txt为文件(-)。Linux中其他文件类型对应的首字符,包括字符设备(c)、块设备(b)、符号链接(l)、命名管道(p)和套接字(s)。
后9个字符表示对文件和目录所设定的权限。前3个字符rwx指示属主(francois)对该目录拥有读、写和执行权限。用户组sales也拥有相同权限(rwx)。其他用户则只有读和执行权限(r-x),短划线指示其他用户无写权限。对于hello.txt文件,用户和用户组拥有读写权限(rw-),其他用户只有读权限(r--)。
着手更改权限时,注意各种权限可以用八进制数字(读为4,写为2,执行为1)或字母(rwx)表示。一般来说,读权限允许查看目录内容,写权限允许修改(添加或更改)目录的内容,可执行权限则允许进入(即访问)该目录。
使用chmod命令可以修改所属文件或目录的权限。
4.2.1 用chmod更改权限
使用chmod命令可以更改文件和目录的访问权限。表4-1列举了几个chmod命令行,并解释如何理解目录或文件权限更改前后的变化。
表4-1 更改目录和文件访问权限

表4-1 更改目录和文件访问权限

chmod命令
(八进制或字母)

更改前权限

更改后权限

说  明

chmod 0700

任意

drwx------

目录属主不仅能进入该目录,还能读或写该目录下的文件。所有其他用户(root除外)无法访问

chmod 0711

任意

drwx--x--x

目录属主的权限与上同。所有其他用户都能进入该目录,但无法查看或修改目录下的文件。对于增强服务器安全很有用,可以防止其他人列出目录内容,但如果有人知悉某个文件位于该目录,就能访问这个文件

(续)

chmod命令
(八进制或字母)

更改前权限

更改后权限

说  明

chmod go+r

drwx------

drwxr--r--

增加目录的读权限不会取得预想的结果。若无可执行权限,其他用户无法查看该目录下任意文件的内容

chmod 0777

chmod a=rwx

任意

drwxrwxrwx

开放所有权限

chmod 0000

chmod a-rwx

任意

d---------

关闭所有权限。若要保护目录以防误改,这倒是不错的做法。不过,root除外的用户运行备份程序时,可能无法备份该目录的内容

chmod 666

任意

-rw-rw-rw-

完全开放文件的读/写权限

chmod go-rw

-rw-rw-rw-

-rw-------

不允许文件属主之外的用户查看、修改或删除该文件

chmod 644

任意

-rw-r--r--

只有文件属主才能修改或删除该文件,不过所有人都能查看文件

 


警告 切勿将SUID用于shell脚本。下面是Linux Security HOWTO中的一段警告:“SUID shell脚本的安全风险非同小可,鉴于此,内核不允许这么做。不论你认为shell脚本多安全,它都有可能被骇客利用,从而进入根shell。”


对于设置了粘滞位的目录,若其不属于某用户所有,则该用户无法删除或重命名该目录里(例如/tmp)的文件。不过,只要设定适当的权限,用户就能修改位于设置了粘滞位的目录下其他用户的文件内容。粘滞目录的最后一个权限字符为t而非x。设置粘滞位的命令即使不运行也会常驻内存,这是早期Unix的特性,Linux并不支持。
chmod命令有个非常实用的选项-R,加上该选项就能递归更改文件系统某个目录下所有文件和目录的权限,示例如下:

# chmod -R 700 /tmp/test         仅向属主开放/tmp/test及其内容的权限
# chmod -R 000 /tmp/test         关闭/tmp/test及其内容的全部权限
# chmod -R a+rwx /tmp/test       向所有用户开放/tmp/test及其内容的全部权限

注意,-R选项对命令行里指定的目录同样有效,因此上面例子会更改/tmp/test目录下的文件和目录及该目录本身的权限。
4.2.2 设定umask
文件或目录的权限会在创建时指定,至于权限如何设定,则视用户当前的umask值而定。使用umask命令,可以设定文件和目录创建时的权限。

$ umask 0066  目录权限为drwx--x--x,文件权限为-rw-------
$ umask 0077  目录权限为drwx------,文件权限为-rw-------
$ umask 0022  目录权限为drwxr-xr-x,文件权限为-rw-r--r--
$ umask 0777  目录权限为d---------,文件权限为----------
4.2.3 修改所有权
创建文件或目录时,系统会给文件或目录分配用户账户和主用户组。root用户可以使用chown和chgrp命令将最初指定文件的所有权(用户)和用户组改成另一个用户和/或用户组,示例如下:

# chown chris test/         将属主改为chris
# chown chris:market test/  将属主改为chris,用户组改为market
# chgrp market test/        将用户组改成market
# chown -R chris test/      将test/下所有文件的属主改为chris

chown的递归选项(-R)在修改整个目录结构的所有权时很有用。和chmod一样,使用chown -R将递归更改对指定目录及其内容的所有权。员工离开公司或停止使用Web服务时,就可能要递归使用chown。使用chown -R可以将用户的整个/home目录重新分配给另一个用户。
更改用户组分配和密码相关的命令包括newgrp和gpasswd,另外还涉及/etc/gshadow文件。
本文是作者在读取《linux命令详解手册》之后的随手笔记,如果大家喜欢这本书,可以去购买


原文地址:http://www.itmmd.com/201412/285.html
该文章由 萌萌的IT人 整理发布,转载须标明出处。

linux命令详解(17)文件系统遍历 cd、pwd、ls命令详解   上一篇
下一篇  产品经理学习笔记(8)-如何找到真实的需求

精彩回复
发表评论
姓名:       

《程序员app》专门为程序员量身定做!