10分钟Linux-文件与用户权限设置

我们已经能够熟练的掌握系统中何时需要创建用户和组,Linux系统是一个典型的多用户操作系统,不同的用户处于不同的地位,为了保护系统的安全性,Linux系统对于不同用户访问同一个文件或目录做了不同的访问权限控制。本文将介绍Linux文件权限的设置和管理。

01

文件的属性

当使用“ls -l”命令来查看一个文件或目录时,它将列出文件的常规属性,例如:查看install.log文件

# ls -l install.log

-rw-r--r--. 1 root root 10731 6月 11 11:34 install.log

每一个字段详细的解释说明如下:

1

文件类型:文件标志的第一个字符是“-”,表示这是一个普通文件

2

文件权限:文件权限是rw-r--r-- ,表示文件属主可读、可写,文件所归属的用户组可读,其它用户可读;

3

硬链接个数:/root/install.log 这个文件没有硬链接;因为数值是1,就是他本身;

4

文件属主:也就是这个文件归哪于哪个用户,它归于root,也就是第一个root;

5

文件属组:也就是说,对于这个文件,它归属于哪个用户组,在这里是root 用户组;

6

文件大小:文件大小是11K;

7

访问可修改时间:6月 17 11:34,这里的时间是最后访问的时间,最后访问和文件被修改或创建的时间,有时并不是一致的;

8

文件名或目录名:就是文件的名称了。

1

文件类型

在Linux和UNIX系统中,文件系统中的任何东西都可以是一个文件。

在使用“ls -l”查看文件或目录时,可以列出文件的常规属性。其中第一列的第一个字符是文件类型的的标志。常见的文件类型如下表:

文件类型

表示方式

应用

常规文件

-

保存数据

目录

d

存放文件

符号链接

l

指向其它文件

字符设备

c

访问设备

块设备

b

访问设备

命名管道函数

p

进程间通信

套接字

s

进程间通信

2

文件权限三种访问级别和权限位

文件权限定义对某个文件或目录的访问限制,实现系统管理员和不同用户共用一个文件或目录时,定义不同的访问限制,从而提升系统的安全性。

Linux系统中每个文件都有如下三种访问级别:

1

用户属主(User):当用户创建一个文件时,这个用户就是这个文件的所有者.

2

用户属组(Group):一般情况下这个用户的主要组也将成为这个文件组的所有者。

3

其它人(Other):不属于以上两者,就是其它人

三种访问级别对应权限位

第一组:适用于文件的属主,图中属主的权限是rwx。用户限制文件或目录的创建者

第二组:适用于文件的属组,图中属组的权限是r-x。用于限制文件或目录所属组的成员。

第三组:使用于其它用户权限位,图中其它用户权限位是r-w。用于限制既不是属主又不是所属组的能访问该文件或目录的其他人员。

当有人试图访问一个文件的时候,Linux系统会按顺序执行如下步骤:

(1)使用者拥有这个文件吗?如果是,启用用户权限。

(2)用户是组所有者成员吗?如果是,启用组权限

(3)如果以上两个都不是,启用其它人权限

(4)三种访问级别都未通过,将拒绝访问此文件。

3

三种基本权限类型

文件权限(File Permission)定义了对某文件或目录的访问限制。 每个文件或目录都有9个基本权限位控制其读、写、执行。基本权限位和另外3个可以影响可执行程序运行的3个特殊权限位一起构成了文件访问模式(File Access Mode)。

下表中详细介绍了读、写和执行的含义:

字符

权限

对文件的含义

对目录的含义

r

意味着我们可以查看阅读

可以列出目录中的文件列表

w

意味着,对文件可以修改或删除

可以在该目录中创建、删除文件

x

执行

如果是文件就可以运行,如二进制文件或脚本。

可以使用cd命令进入该目录

权限除了可是使用rwx 来表示之外,还可以使用八进制数来表示。下表中显示了使用字母和八进制的表示方法的对应关系:

字符

八进制表示法

含义

r

4

w

2

x

1

执行

-

不可读、不可写、不可执行

下表中列出字符串和八进制表示法的说明:

字符串

八进制表示法

说明

-rw-r--r--

644

只有属主才有读取和写入的权限;同组人和其他人只有读取的权限

-rw-------

600

只有属主才有读取和写入的权限。

-rwxrwxrwx

777

每个人都能够读取、写入、和执行。

drwxr--r--

744

只有属主才有读取、写入和执行权限;同组人和其他人只有读取的权限。

drwxrw-r--

764

只有属主才有读取、写入和执行权限;同组人有读取、写入的权限;其他人只有读取的权限

4

硬链接数

链接数就是文件被文件名引用的次数。通常普通文件只有一个文件名,链接数为1。然而,我们会发现情况并非总是这样。

使用ls -l命令列出文件时,第二列显示的就是文件的链接数。

5

所有者的身份权限

1

文件属主:对于这个文件属于哪个用户,使用ls -l命令列出文件时,第三列显示的就是文件属主

2

文件属组:对于这个文件属于哪个组,使用ls -l命令列出文件时,第四列显示的就是文件属组

6

文件的长度和大小

文件的长度(即文件数据的实际字节数)和大小(即所占用的磁盘空间量)。

提示

由于文件在磁盘上保存的底层信息不同,两种度量有所不同。一般来说,文件的大小每次字节块(通常是4千字节)为单位增加,而文件数据增加时,其长度以单个字节为单位递增。

使用ls –l命令时,文件长度(字节数)在第5列里显示。

当使用ls –s命令时,第5列里显示的则是文件大小(千字节数)。

7

时间信息

每个i-节点保存与文件关联的三种信息,通常叫做atime、ctime和mtime。这些时间分别记录着一个文件最后一次被访问(读取)、改变或修改时间。

缩写

命令

目的

atime

访问时间

文件数据每次被阅读后的更新

ctime

改变时间

文件的i-节点信息每次被改变后都更新

mtime

修改时间

文件数据每次被改变后的更新

使用ls -l命令列出文件时,第六列显示的就是改变和修改时间。

02

Linux系统权限设置命令

2.1

修改文件权限:chmod

chmod 是用来改变文件或目录权限的命令,但只有文件的属主和超级权限用户root 才有这种权限。通过chmod 来改变文件或目录的权限有两种方法,一种是通过八进制的语法,另一种是通过助记语法。但是无论使用哪种方法修改但是chmod这个命令的基本语法可以总结为:

各项含义如下:

缩写

含义

u

User(用户)

g

Group (组)

o

Other(其它)

a

All(所有)

+

Add(加)

-

Remove(减去)

=

Set (设置)

r

Read (可读)

w

Write (可写)

x

Execute (执行)

举个例子-助记法修改范例

使用 u(user),g(group),o(other),a(all)来表示要要设置权限的位置,用“+”来表示添加权限,用“-”表示减少权限,当然使用r、w、x来表示权限。在使用的时候,可以组合使用。

# touch jinlong.file #创建空文件

# chmod u+x vfaexist.file # 给文件的拥有者添加执行权限

# chmod go-r jinlong.file # 给文件的属组和其它用户减去读取权限

# chmod a-rwx jinlong.file # 所有人都拒绝访问

# chmod a+rw jinlong.file # 所有人都具有读写权限

每修改一次,别忘了使用ls -l 命令查看权限的变化。其它的权限设置,请自己组合使用。

举个例子-八进制数

权限除了可是使用rwx 来表示之外,还可以使用八进制数来表示。各个权限对应的数值是:r(4)、w(2)、x(1)、-(0)

前面已经说过,Linux 文件的权限标志位共九个,分为3 组,分别代表文件拥有者的权限,文件所属用户组的权限和其它用户的权限。例如:/root/install.log 的文件权限是:

rw-r--r—

如果用八进制数来表示,那么:

1

属主的权限用数字表达:属主的那三个权限位的数字加起来的总和。比如上面的例子中属主的权限是rw- ,也就是4+2+0 ,应该是6;

2

属组的权限用数字表达:属组的那个权限位数字的相加的总和。比如上面的例子中的r-- ,也就是4+0+0 ,应该是4;

3

其它用户的权限数字表达:其它用户权限位的数字相加的总和。比如上面例子中是 r-- ,也就是4+0+0,应该是4;

也就是说,如果使用八进制数来表示该文件的权限,应该是644。

因 此 , 在 使用chmod 来修改文件的权限时, 可以使用数值。例如, 要将/root/install.log 文件的权限修改为:rwxr-xr-x,可以进行如下操作:

# chmod 755 /root/install.log

2.2

修改文件权属:chown和chgrp

1.使用chown命令改变文件的属主

在少数情况下,管理员需要改变文件的用户所有者。这可以使用chown命令来完成。

命令语法

chown [-R] user file

将file的属主替换为user。

第一个参数表明文件的新的属主,第二参数是要修改的文件。只要root用户可以使用chmod命令。

如果任何用户都能改变文件的所有者,那访问权限就没有任何意义了。

2.使用chgrp命令改变文件属组

我们学习了如何修改文件的权限,以及如何将文件私有化;也就是只有文件的属主才可以阅读这个文件,其他人都不行。如果你希望和一组人,但不是所有人分享这个文件?如果你希望所有人都可以阅读某个文件,但只有一部分人可以修改这个文件呢?在这种情况下。你可以利用文件的属主和组权限。

我们知道文件新建立时,他的组所有者是建立人的主要组。在红帽企业版Linux中,这通常是建立者的私有组(private group)。因为你是这个组的唯一成员,所以私有组不能用来与其它人合作。如果要和其他人共享文件,你必须改变文件的组所有者。这个改变可以通过chgrp命令来实现。

命令语法

chgrp GROUP FILE …

将FILE的组所有者变为GROUP。

第一个参数表示文件的新组所有者,跟着的参数是要修改的文件。只有文件的属主才能改变文件的组所有着,而且这个用户必须是新组所有者的成员。

举个例子

在下边的例子中。用户ventura是组wrestle(摔跤)和组governer(总督)和(其它的私有组ventura)的成员。他要写一个税收计划,让其它governer组的成员可以阅读但不能修改,其它任何人都不能访问。需要做一下步骤:

(1)建立文件

(2)使用chgrp命令将文件的组所有者替换成组governer。

(3)使用chmod命令将文件的权限从默认的rw-rw-r--变成rw-r-----。

$ id

uid=502(ventura) gid=502(ventura)

groups=502(ventura),503 (wrestle),505(governer)

$ echo "welcome to here" >taxplan.txt

$ ls -l taxplan.txt

-rw-rw-r-- 1 ventura ventura 16 Nov 2 21:22 taxplan.txt

$ chgrp governor taxplan.txt

$ ls -l taxplan.txt

-rw-rw-r-- 1 ventura governor 16 Nov 2 21:22 taxplan.txt

$ chmod g-w taxplan.txt

$ chmod o-r taxplan.txt

$ ls -l taxplan.txt

-rw-r----- 1 ventura governor 16 Nov 2 21:22 taxplan.txt

$

03

控制默认权限umask

我们使用touch或mkdir创建文件或目录,创建一个文件或目录的时候,细心的同学一定发现总是有一个默认的权限。那么这个权限到底是如何产生的呢?通过本节的写学习可以了解这些到底是为什么?

3.1

到底是谁控制了文件的默认权限

每一个新的文件产生的时候,都有一个默认的权限,是通过一个称为umask的标准UNIX概念来改变。每个进程,包括系统shell,(红帽企业版linux默认使用bash shell)都有一个三位的八进制数“遮盖”新建文件的某些权限。这个八进制数我们称为进程的“umask(遮罩)”。

umask的结构和文件权限的八进制表示法相同,但是意义确是相反。回顾一下八进制表示法,每个访问级别(属主、属组、其它人)都是使用一个数字来表示,“百位”是用户(user);“十位”是组(group);“个位”是其他人(other)。每种权限都是使用一个值来表示:可读(4);可写(2);可执行(1)。使用

八进制表示去给文件设置权限的时候是文件“要“什么样的权限而去定义。而umask命令是由“不需要的”权限组成。

3.2

文件的默认权限

Linux内核使用通用默认模式666(rw-rw-rw-)生成文件。然后内核为生成文件的进程赋予一个umask。umask的值被默认权限值666中“减去”。

举个例子

举例来说,如果使用的umask是002,那么生成的默认权限就是664;

Kernel default: 666 --- rw-rw-rw-

Umask: 002 --- -------w-

Default permissions: 664 --- rw-rw-r--

另一个例子。如果umask是077,那么得到的默认权限就是600:

Kernel default: 666 --- rw-rw-rw-

Umask: 077 --- ---rwxrwx

Default permissions: 600 --- rw-------

在判断默认权限时,任何设置为umask的权限都会被从内核模式“遮盖”。

3.3

目录的默认权限

目录的默认权限以同样的方式生成,不同的是,内核生成目录的默认模式是777(rwxrwxrwx)。也就是值为002的umask值得到的默认目录权限是755:

Kernel default: 777---rwxrwxrwx

Umask: 002 ----------w-

Default permissions: 775---rwxrwxr-x

另一个例子,值为077的umask得到的默认目录权限是700:

Kernel default: 777---rwxrwxrwx

Umask: 077------rwxrwx

Default permissions: 700---rwx------

在以上的例子中,值为002的umask的文件和目录的权限是一样的:任何人都可以读取,只有所有者可以修改。同样,值为077的umask的文件和目录的权限是一样的:用户属主可以读取和修改,其他人不能访问。

3.4

修改umask值

可以通过umask命令查看和修改bash shell的umask,默认情况下,不带任何参数的情况下,umask会显示当前shell的umask值。如果添加一个八进制umask作为参数,将指定一个值给shell。

$ umask

0002

$ umask 077

$ umask

0077

关注我们

云运维联盟

专注Linux云平台运维

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180625G1M6QZ00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券