2.14 文件和目录权限chmod
chmod命令用来变更文件或目录的权限。在UNIX系统家族里,文件或目录权限的控制分别以读取、写入、执行3种一般权限来区分,另有3种特殊权限可供运用。用户可以使用chmod指令去变更文件与目录的权限,设置方式采用文字或数字代号皆可。符号连接的权限无法变更,如果用户对符号连接修改权限,其改变会作用在被连接的原始文件。
权限范围的表示法如下:
u User,即文件或目录的拥有者;
g Group,即文件或目录的所属群组;
o Other,除了文件或目录拥有者或所属群组之外,其他用户皆属于这个范围;
a All,即全部的用户,包含拥有者,所属群组以及其他用户;
r 读取权限,数字代号为“4”;
w 写入权限,数字代号为“2”;
x 执行或切换权限,数字代号为“1”;
- 不具任何权限,数字代号为“0”;
s 特殊功能说明:变更文件或目录的权限。
选项:
-f 不显示错误信息
-R 递归处理,将指令目录下的所有文件以及子目录一并处理
-v 显示指令执行过程
<权限范围>+<权限设置>:开启权限范围的文件或目录的该选项权限设置;
chmod a/u/g/o +r/w/x
<权限范围>-<权限设置>:关闭权限范围的文件或目录的该选项权限设置;
chmod a/u/g/o - r/w/x
<权限范围>=<权限设置>:指定权限范围的文件或目录的该选项权限设置;
chmod a/u/g/o=rwx/rw/rx/r/...
参数:
权限模式:指定文件的权限模式;
文件:要改变权限的文件。
知识扩展和实例
Linux用 户分为:拥有者、组群(Group)、其他(other),Linux系统中,预设的情況下,系统中所有的帐号与一般身份使用者,以及root的相关信 息, 都是记录在/etc/passwd文件中。每个人的密码则是记录在/etc/shadow文件下。 此外,所有的组群名称记录在/etc/group內!
linux文件的用户权限的分析图:
例:rwx rw- r--
r=读取属性 //值=4
w=写入属性 //值=2
x=执行属性 //值=1
chmod u+x,g+w f01 //为文件f01设置自己可以执行,组员可以写入的权限
chmod u=rwx,g=rw,o=r f01
chmod 764 f01
chmod a+x f01 //对文件f01的u,g,o都设置可执行属性
文件的权限根据用户分为:所有者,属组,其他。ls -l查看文件的详细信息时,第一列第一个字符表示文件类型,后面9个字符每三位一组表示权限。最后的.(点)表示受制于selinux,selinux开启时所有创建的文件都会有.在/etc/selinux/config中关闭selinux重启后创建的文件不会有.(点)
rwxrwxrwx 777
rwxr-xr-x 755
rw-r--r-- 644
chmod 777 =chmod u=rwx,g=rwx,o=rwx =chmod a=rwx
chmod 755 = chmod u=rwx,g=rx,o=rx
chmod 644 = chmod u=rw,g=r,o=r
chmod操作只针对文件或目录本身,chmod -R 目录下的文件以及子目录批量更改此权限
2.15 更改所有者和所属组chown
chown修改文件或目录的所有者,属组。用户可以是用户名或用户id;属组可以是组名或组id;目标文件是以空格分开的要改变权限的文件列表,支持通配符。系统管理员经常使用chown命令,在将文件拷贝到另一个用户的目录下之后,让用户拥有使用该文件的权限。普通用户不能将自己的文件改变成其他的所有者,其操作权限一般为管理员。
1.命令格式:
chown [选项]... [所有者][:[组]] 文件...
2.选项:
-R 目录下的文件以及子目录都修改
-v 显示详细的处理信息
--reference=<目录或文件> 按指定的目录或文件作为参考,把目标目录或文件的所有者,属组设置成和参考
文件或目录相同。
--from=<当前用户:当前群组> 只有当前用户和群组跟指定的用户和群组相同时才进行改变
3.使用实例:
1.更改/tmp/file文件的所有者为gavin
[root@localhost ~]# ll /tmp/file
-rw-r--r--. 1 root root 0 6月 27 19:01 /tmp/file
[root@localhost ~]# chown gavin /tmp/file
[root@localhost ~]# ll /tmp/file
-rw-r--r--. 1 gavin root 0 6月 27 19:01 /tmp/file
2.更改/tmp/file文件的属组为gavin
chown :gavin /tmp/file
3.更改/tmp/gavin目录的所有者,属组为gavin
chown gavin:gavin /tmp/gavin
4.更改/tmp/gavin目录的所有者,属组与/tmp/zhang目录相同
chown --reference=/tmp/zhang /tmp/gavin
[root@localhost ~]# ll -d /tmp/zhang /tmp/gavin
drwxr-xr-x. 2 root root 6 6月 27 19:09 /tmp/gavin
drwxr-xr-x. 3 zhang zhang 43 6月 21 16:44 /tmp/zhang
[root@localhost ~]# chown --reference=/tmp/zhang /tmp/gavin
[root@localhost ~]# ll -d /tmp/zhang /tmp/gavin
drwxr-xr-x. 2 zhang zhang 6 6月 27 19:09 /tmp/gavin
drwxr-xr-x. 3 zhang zhang 43 6月 21 16:44 /tmp/zhang
5.更改/tmp/gavin目录的所有者,属组都为gavin,并且目录下的子文件,子目录也修改
chown -R gavin:gavin /tmp/gavin
6.当所有者和属组为gavin:gavin时才会修改
chown --from=gavin:gavin root:root /tmp/zhang /tmp/gavin
[root@localhost ~]# ll -d /tmp/zhang /tmp/gavin
drwxr-xr-x. 3 gavin gavin 29 6月 27 19:12 /tmp/gavin
drwxr-xr-x. 3 zhang zhang 43 6月 21 16:44 /tmp/zhang
[root@localhost ~]# chown --from=gavin:gavin root:root /tmp/zhang /tmp/gavin
[root@localhost ~]# ll -d /tmp/zhang /tmp/gavin
drwxr-xr-x. 3 root root 29 6月 27 19:12 /tmp/gavin
drwxr-xr-x. 3 zhang zhang 43 6月 21 16:44 /tmp/zhang
chgrp命令修改文件或目录的属组:
chgrp gavin /tmp/gavin 把/tmp/gavin的属组改成gavin
chgrp -R gavin /tmp/gavin 把/tmp/gavin目录以及下面的文件,子目录的属组都改成gavin
2.16 umask
umask一般是用在初始创建一个目录或者文件的时候赋予他们的权限。
这里要说明两点:
1、针对目录来说x权限代表可以进入该目录,所以说对于这个权限初始赋值是没什么问题的;
2、针对文件的x的权限代表执行,这个风险太高,所以一般权限初始赋值必须去掉x的;
查看当前umask值:
[root@localhost ~]# umask
0022
上面四个数字代表是赋值初始化准备丢弃的权限。(相对应文件来说,x权限就算没说明出来丢弃一样必须默认丢弃)
目录:rwxrwxrwx 减相对应的值
文件:rw-rw-rw- 减相对应的值,(-减r或w或x仍然是-)
第一个0代表suid 丢弃的权限;
第二个0代表本文件/目录拥有者什么权限都没丢弃(如果是文件,x权限除外,为什么看看上面解释);
第三个2代表本文件/目录的用户组丢弃了w权限(如果是文件那么它的x权限也丢弃);
第三个2代表本文件/目录的其他用户能使用的权限只有有r和x(文件除外)。
综合上面所说如果你新创建一个文件那么它的权限是:-wr-w--w-- 即是:644
如果你新创建一个目录的话那么它的权限是:dwrxw-xw-x 即是:755
注:不要用目录777或者文件666减对应的umask值,因为当umask=0003时,666-003=663这样是不对的,应该是rw-rw-rw- 减 -------wx 等于rw-rw-r-- =664
如果你要修改unask的值直接:
[root@www ~]# umask 002 >>>只在当前终端下生效
2.17 隐藏权限lsattr_chattr
有时候你发现用root权限都不能修改某个文件,大部分原因是曾经用chattr命令锁定该文件了。chattr命令的作用很大,其中一些功能是由Linux内核版本来支持的,lsattr命令是显示chattr命令设置的文件属性。
lsattr常用选项:
lsattr -R 查看目录以及目录下文件是否存在隐藏权限
lsattr -d 查看目录本身
lsattr -a 查看全部文件或目录包括隐藏的。
chattr常用选项:
chattr +i >>>增加隐藏i权限
chattr -i >>>取消隐藏i权限
chattr +a >>>增加隐藏a权限
chattr -a >>>取消隐藏a权限
i权限:
作用在文件:文件不能删除,不能移动,不能重命名,不能touch修改时间属性,不能修改内容。不能设定
硬链接,可以创建软链接。
作用在目录:不能(删除,移动,重命名,touch修改时间)此目录,可以给此目录创建软链接。目录下的子文
件,子目录不能删除,不能移动,不能重命名,可以touch修改时间属性,可以修改已存在文件
的内容,可以给文件创建软链接和硬链接。
a权限:
作用在文件:文件不能移动,不能删除,不能重命名,不能vim直接编辑修改,不能创建硬链接;可以touch
修改时间属性,可以>>追加内容,可以创建软链接。
作用在目录:目录本身不能删除移动重命名,可以创建软链接,可以touch修改目录时间;目录下的文件以及
子目录不能移动删除重命名,可以创建目录与文件,可以修改文件内容,可以touch,可以创
建软链接和硬链接