2.14-2.17


2.14 文件或目录权限chmod

chmod命令用来变更文件或目录的权限。在UNIX系统家族里,文件或目录权限的控制分别以读取、写入、执行3种一般权限来区分,另有3种特殊权限可供运用。用户可以使用chmod指令去变更文件与目录的权限,设置方式采用文字或数字代号皆可。符号连接的权限无法变更,如果用户对符号连接修改权限,其改变会作用在被连接的原始文件。

PS:所有目录默认一定都是可执行的权限.

ls -l  可以查看到文件和目录的权限

权限范围的表示法如下:

u          User,即文件或目录的拥有者;

g          Group,即文件或目录的所属群组;

o          Other,除了文件或目录拥有者或所属群组之外,其他用户皆属于这个范围;

a          All,即全部的用户,包含拥有者,所属群组以及其他用户;

r           读取权限,数字代号为“4”;

w          写入权限,数字代号为“2”;

x           执行或切换权限,数字代号为“1”;

-           不具任何权限,数字代号为“0”;

s           特殊功能说明:变更文件或目录的权限。

Linux用 户分为:拥有者、组群(Group)、其他(other),Linux系统中,预设的情況下,系统中所有的帐号与一般身份使用者,以及root的相关信 息, 都是记录在/etc/passwd文件中。每个人的密码则是记录在/etc/shadow文件下。 此外,所有的组群名称记录在/etc/group內。

linux文件的用户权限的分析图

user属主 group属组 others其他人(如下图)

例:rwx rw- r--

r=读取属性  //值=4

w=写入属性   //值=2

x=执行属性  //值=1

命令的使用

chmod 语法: chmod [-R] xyz 文件名 (这里的xyz,表示数字)

‘-R’ 选项作用同chown,级联更改。

PS:在linux系统中,默认一个目录的权限为 755,而一个文件的默认权限为644.

如果创建了一个目录,而该目录不想让其他人看到内容,则只需设置成 ‘rwxr—–’ (740) 即可。’chmod’ 还支持使用rwx的方式来设置权限。属性分别是(1)user (2)group (3)others, 可以使用u, g, o 来代表它们三个的属性,此外, a 则代表 all 亦即全部。用法如下:

这样可以把 ‘test/test2’ 文件权限修改为 ‘rwxr-xr-x‘

另外还可以针对u, g, o, a增加或者减少某个权限(读,写,执行),例如:


2.15 更改所有者和所属组chown

chown命令更改所属主

chown命令改变某个文件或目录的所有者和所属的组,该命令可以向某个用户授权,使该用户变成指定文件的所有者或者改变文件所属的组。用户可以是用户或者是用户D,用户组可以是组名或组id。文件名可以使由空格分开的文件列表,在文件名中可以包含通配符。

只有文件主和超级用户才可以便用该命令。

语法

chown [ -R ] 账户名 文件名 chown [ -R ] 账户名:组名 文件名

这里的-R选项只作用于目录,作用是级联更改,即不仅更改当前目录,连目录里的目录或者文件全部更改。

选项

-c或——changes:效果类似“-v”参数,但仅回报更改的部分;

-f或--quite或——silent:不显示错误信息;

-h或--no-dereference:只对符号连接的文件作修改,而不更改其他任何相关文件;

-R或——recursive:递归处理,将指定目录下的所有文件及子目录一并处理;

-v或——version:显示指令执行过程;

--dereference:效果和“-h”参数相同;

--help:在线帮助;

--reference=<参考文件或目录>:把指定文件或目录的拥有者与所属群组全部设成和参考文件或目录的拥有者与所属群组相同;

--version:显示版本信息。

参数

用户:组:指定所有者和所属工作组。当省略“:组”,仅改变文件所有者; 文件:指定要改变所有者和工作组的文件列表。支持多个文件和目标,支持shell通配符。

实例 

[root@localhost ~]# mkdir test // 创建 'test' 目录

[root@localhost ~]# useradd user1 // 创建用户 user1 [root@localhost ~]# touch test/test2 // 在test目录下创建test2文件 [root@localhost ~]# chown user1 test [root@localhost ~]# ls -l test 总用量 0 -rw-r--r-- 1 root root 0 5月  10 09:00 test2 [root@localhost ~]# ls -ld test   // test目录所属主已经由 'root' 改为 'user1 drwxr-xr-x 2 user1 root 4096 5月  10 09:00 test [root@localhost ~]# ls -l test  // 但是test目录下的test2文件所属主依旧是 'root'. 总用量 0 -rw-r--r-- 1 root root 0 5月  10 09:00 test2 [root@localhost ~]# chown -R user1 :testgroup test [root@localhost ~]# ls -l test 总用量 0 -rw-r--r-- 1 user1 testgroup 0 5月  10 09:00 test2


chgrp命令更改所属组(这个命令的作用可以用chown代替,不常用)

chgrp命令用来改变文件或目录所属的用户组。该命令用来改变指定文件所属的用户组。其中,组名可以是用户组的id,也可以是用户组的组名。文件名可以 是由空格分开的要改变属组的文件列表,也可以是由通配符描述的文件集合。如果用户不是该文件的文件主或超级用户(root),则不能改变该文件的组。

语法

chgrp  [组名]  [文件名]


2.16 umask

UMASK

umask,在默认情况下创建一个新的文件或目录,umask规定了目录权限值为755.普通文件权限值为644.

直接敲 umask命令可以得出当前umask值

umask语法:umask xxx

注:在默认情况无umask干预下,建立普通文件为666,目录为777


2.17 隐藏权限lsattr_chattr

       有时候你发现用root权限都不能修改某个文件,大部分原因是曾经用chattr命令锁定该文件了。chattr命令的作用很大,其中一些功能是由Linux内核版本来支持的,不过现在生产绝大部分跑的linux系统都是2.6以上内核了。通过chattr命令修改属性能够提高系统的安全性,但是它并不适合所有的目录。chattr命令不能保护/、/dev、/tmp、/var目录。lsattr命令是显示chattr命令设置的文件属性。

语法:

chattr 【+-=】【ASaci】【文件/目录】:设置文件隐藏属性

lsattr 【-aR】【文件/目录】:读取文件或目录的隐藏属性,非root用户不能设定该属性

下表为常用用法:

chattr

文件的特殊属性 - 使用 “+” 设置权限,使用 “-” 用于取消 

chattr +a file1 只允许以追加方式读写文件 

chattr +i file1 设置成不可变的文件,不能被删除、修改、重命名或者链接 、连创建时间都不能更改,很严谨

chattr +c file1 允许这个文件能被内核自动压缩/解压 

chattr +d file1 在进行文件系统备份时,dump程序将忽略这个文件 

chattr +s file1 允许一个文件被安全地删除 

chattr +S file1 一旦应用程序对这个文件执行了写操作,使系统立刻把修改的结果写到磁盘 

chattr +u file1 若文件被删除,系统会允许你在以后恢复这个被删除的文件 

chattr -R 递归修改

PS:权限只是针对于目录和文件本身,如果给一个目录设置不可修改等权限,但是目录内已存在的文件是可以进行修改的。

lsattr

lsattr 查看的是目录下面的子目录和文件的特殊属性

lsattr +d 查看目录本身的特殊属性

lsattr +R 递归查看

举例:

应用举例:

1、用chattr命令防止系统中某个关键文件被修改:

# chattr +i /etc/resolv.conf

然后用mv /etc/resolv.conf等命令操作于该文件,都是得到Operation not permitted 的结果。vim编辑该文件时会提示W10: Warning: Changing a readonly file错误。要想修改此文件就要把i属性去掉: chattr -i /etc/resolv.conf

# lsattr  /etc/resolv.conf

会显示如下属性

----i-------- /etc/resolv.conf

2、让某个文件只能往里面追加数据,但不能删除,适用于各种日志文件:

# chattr +a /var/log/messages