linux init 文件权限,linux文件权限

一、简述

顾名思义,文件权限即是用户具有的对文件执行操作的范围和程度。在详解linux的文件权限之前,先来了解一下linux中一个常用的命令ls

二、ls命令及权限详解

ls主要用来显示目录列表及文件属性等信息

用法:ls [选项]... [文件]...

常用选项:

-a:显示目录中所有文件(包括以.开头的隐藏文件)

-l:长格式,显示文件的详细属性信息,ls -l相当于ll

-d:仅显示目录名,而不显示目录下的文件列表

-h/--human-readable

-k:以KB(千字节)为单位显示文件大小

-i:显示文件的节点号(inode)

-r:reverse,逆序显示

-R:recursive, 递归显示,显示子目录中的内容

-S:sort by file size

-t: sort by modification time

-F: 给不同类型的文件末尾加不同的标识符

-p : 给目录末尾加标识(“/”)

--time-style=TYPE:指定时间的显示格式

举例说明:[root@localhost ~]# ls -l /etc

total 1880

drwxr-xr-x.  3 root root   4096 Aug  6 04:54 abrt

drwxr-xr-x.  4 root root   4096 Aug  6 05:05 acpi

-rw-r--r--.  1 root root     49 Aug 19 17:52 adjtime

-rw-r--r--.  1 root root   1512 Jan 12  2010 aliases

c86e6b2dfa054d85226f05c88097f9ba.png

1、第一列代表该文件的类型与权限

a)第一个字符代表文件的类型

d:目录文件

-:普通文件

l:符号链接文件

c:字符设备(如键盘、鼠标)文件 ,如/dev/tty

b:块设备(如硬盘、光驱)文件 ,如/dev/sda1,块设备可随机访问,但字符设备不可以

s:套接字文件,如/var/run/acpid.socket

p:管道

b)接下来的字符中,以三个为一组,有三组,分别代表文件属主的权限、文件属组权限以及既不是属主又不属于群组的其它用户的权限。每组均为rwx三个参数的组合,r代表可读(read),w代表可写(write),x代表可执行(execute)

以drwxr-xr-x为例,表示该文件为目录文件,文件属主可读、可写、可执行,同群组的使用者可读、不可写、可执行,其它用户则也是可读、不可写、可执行

c)第一列末尾如果有【.】,表示selinux的安全标签;如果有【+】,则表示该文件应用了ACL,即访问控制列表。

2、第二列代表有多少文件名连接到此节点(inode)

3、第三、四、五列分别代表文件属主和属组、文件大小(默认为字节)

4、第六列代表文件建立时间或最近修改时间(mtime)

5、第七列即为文件名。注意,文件名以【.】号开头的为隐藏文件,需要指定-a选项显示

三、权限之于文件和目录的意义

1、权限之于文件的意义

r:可读取文件内容

w:可编辑、修改或新增文件内容

x:该文件具有被系统执行的权限

2、权限之于目录的意义

r:表示具有读取目录清单的权限

w:新建或删除已经存在的文件或目录

将已经存在的文件和目录更名

移动该目录内文件、目录位置

x:可进入该目录

注意:使用者若要能够读取、修改或执行某文件,前提是必须能够进入该文件所属目录,也即对文件所属目录具有执行权限,否则不能完成操作,即使使用者拥有该文件的各种权限。示例如下:[tesla@localhost ~]$ ls -ld ./test

drwxrwxr-x 2 tesla tesla 4096 Aug 10 15:07 ./test

[tesla@localhost ~]$ ll ./test/inittab

-rw-r--r-- 1 tesla tesla 884 Aug 10 15:07 ./test/inittab

[tesla@localhost ~]$ cat ./test/inittab

# inittab is only used by upstart for the default runlevel.

#

# ADDING OTHER CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.

...

[tesla@localhost ~]$ chmod 665 ./test

[tesla@localhost ~]$ ls -ld ./test

drw-rw-r-x 2 tesla tesla 4096 Aug 10 15:07 ./test

[tesla@localhost ~]$ cat ./test/inittab

cat: ./test/inittab: Permission denied

四、用户访问文件时的权限匹配模型

1、检查运行此进程的属主是否与其正在访问的文件的属主相同

2、检查运行此进程的属主是否属于此文件的属组

3、以其它用户的身份访问

五、权限的修改

chmod命令用来修改文件或目录的权限

注意:只有文件的属主和root用户才能修改其权限

用法:chmod [OPTION]… MODE[,MODE]… FILE…

常用选项:

--reference=指定文件或目录:以指定的文件或目录的权限为参照设定文件的权限

-R:递归处理,连同目录内部所有文件和子目录一并修改

1、操作三类用户的权限,使用八进制来表示,如rwxr-xr-x可用755表示

例:chmod 640 file,chmod  5 file (相当于chmod 005 file)

2、操作指定类别的权限

u:属主   g:属组   o:其它    a:all

例如:chmod u=rw  fatab,chmod ug=rw fatab

3、操作指定类别使用者的指定权限位

如chmod g+w,o-r fatab[root@localhost ~]# ls -l /home/tesla/inittab

-rw-r--r-- 1 tesla tesla 884 Aug 20 21:13 /home/tesla/inittab

[root@localhost ~]# chmod 666 /home/tesla/inittab

[root@localhost ~]# ls -l /home/tesla/inittab

-rw-rw-rw- 1 tesla tesla 884 Aug 20 21:13 /home/tesla/inittab

[root@localhost ~]# chmod u=rwx /home/tesla/inittab

[root@localhost ~]# ls -l /home/tesla/inittab

-rwxrw-rw- 1 tesla tesla 884 Aug 20 21:13 /home/tesla/inittab

[root@localhost ~]# chmod g-w /home/tesla/inittab

[root@localhost ~]# ls -l /home/tesla/inittab

-rwxr--rw- 1 tesla tesla 884 Aug 20 21:13 /home/tesla/inittab

[root@localhost ~]# chmod --reference=/etc/passwd /home/tesla/inittab

[root@localhost ~]# ls -l /home/tesla/inittab

-rw-r--r-- 1 tesla tesla 884 Aug 20 21:13 /home/tesla/inittab

六、特殊文件权限

1、SUID

当s这个标志出现在文件属主的x权限位上时,如“-rwsr-xr-x.”,此时就被称为Set UID,简称为SUID。几点说明:

1)SUID权限仅对二进制程序有效

2)执行者对于该程序需要具有x的可执行权限

3)本权限仅在执行该程序的过程中有效(run-time)

4)执行者将具有该程序属主的权限

以passwd为例,我们知道,要修改密码,需要将密码以加密的方式写入/etc/shadow文件中,该文件的权限为----------,普通用户没有任何权限,但是所有的权限设置对于管理员root都是无效的。/usr/bin/passwd的权限为-rwsr-xr-x,当用户运行此命令为一个进程时,此进程的有效身份不再是发起者,而是文件的属主,也即root用户,而root用户对/etc/shadow是可写的,这就是为何普通用户也能修改密码的原因

设置方法:chmod u+s FILE...

添加SUID后使用ls -l查看时,s字符可能显示为大写或小写两种形式之一,属主原本具有执行权限时,显示为小写,否则为大写[root@localhost ~]# ls -l /usr/bin/passwd

-rwsr-xr-x. 1 root root 30768 Feb 22  2012 /usr/bin/passwd

[root@localhost ~]# chmod u-x /usr/bin/passwd

[root@localhost ~]# ls -l /usr/bin/passwd

-rwSr-xr-x. 1 root root 30768 Feb 22  2012 /usr/bin/passwd

2、SGID

类似于SUID,只是SGID是获得该文件属组的权限。

主要用于目录,如果使用者对该目录具有写权限,将目录的属组设置SGID之后,使用者在此目录中创建的文件属组不再是使用者的基本组,而是目录的属组

对二进制程序也有效,执行者需要具备x的可执行权限,执行者将获得该程序属组的权限

设置方法:chmod g+s FILE...[root@localhost ~]# ls -ld /home/tesla/genius

drwxrwxr-x 2 tesla tesla 4096 Aug 21 02:44 /home/tesla/genius

[root@localhost ~]# chmod g+s /home/tesla/genius

[root@localhost ~]# touch /home/tesla/genius/sb

[root@localhost ~]# ls -l /home/tesla/genius

total 0

-rw-r--r-- 1 root tesla 0 Aug 21 02:51 sb

3、Sticky(SBIT)

是针对other设置的,仅对目录有效,作用是:当用户在此目录中创建文件或目录时,只有自己和root用户能够删除

设置方法:chmod o+tFILE...

七、facl(文件访问控制列表)

facl能够让普通用户透过文件的扩展属性,为其添加额外的用户访问授权机制,而无需改变其属主、属组,也不用更改other的权限。

1、getfacl命令用来获取文件访问控制列表

用法:getfacl [option]... FILE...

2、setfacl命令用来设定文件访问控制列表

用法:setfacl [option]... 目标:MODE  FILE...

常用选项:

-m:更改文件的访问控制列表

-x:取消文件访问控制列表条目

-R:递归处理

例:setfacl -m u:docker:rw- a.os   使用户docker对a.os具有读写权限[root@localhost ~]# getfacl /home/tesla/inittab

getfacl: Removing leading '/' from absolute path names

# file: home/tesla/inittab

# owner: tesla

# group: tesla

user::rw-

group::r--

mask::r--

other::r--

[root@localhost ~]# setfacl -m u:wittgenstein:rw- /home/tesla/inittab

[root@localhost ~]# getfacl /home/tesla/inittab

getfacl: Removing leading '/' from absolute path names

# file: home/tesla/inittab

# owner: tesla

# group: tesla

user::rw-

user:wittgenstein:rw-

group::r--

mask::rw-

other::r--

3、启用facl之后权限的应用模型:

属主—用户级别的facl—属组—组级别的facl—其它

八、umask

umask命令用来设置新文件权限的掩码,从而控制新建文件的默认权限。

新建文件的默认权限为666-umask,新建文件默认没有可执行权限;新建目录的默认权限为777-umask。

umask值实际有4位数字,后三位为属主、属组、其它用户的权限,第一位是特殊权限位,其对应的数字为:SUID-4,SGID-2,SBIT-1。第一位用得不多,现只取后三位说明。

root用户umask的默认值为022(普通用户为002),可通过umask命令查看并修改

用法:umask [option]... [新的权限值(以八进制表示)]

默认权限的计算示例:

1)若umask值为022,则文件权限起始值为666-022=644(rw- r-- r--),目录权限起始值为777-022=755(rwx r-x r-x)

2)若umask值为045,666-045=621(rw--w---x),由于通常要求新建文件默认不具有可执行权限,由此在对应的x位上加1,新建文件默认权限为622[root@localhost ~]# umask

0022

[root@localhost ~]# umask 045

[root@localhost ~]# umask

0045

[root@localhost ~]# mkdir /home/jack

[root@localhost ~]# ls -ld /home/jack

drwx-wx-w- 2 root root 4096 Aug 21 03:54 /home/jack

[root@localhost ~]# touch /home/jack/rose

[root@localhost ~]# ls -l /home/jack/rose

-rw--w--w- 1 root root 0 Aug 21 03:56 /home/jack/rose

通过umask命令修改的umaks值只是临时有效,若想长期有效,应修改或写入bash配置文件,如/etc/profile,~/.bash_profile等

附:特殊权限使用示例:

1、让普通用户能使用/tmp/cat去查看/etc/shadow文件;[root@localhost ~]# cp `which cat` /tmp

[root@localhost ~]# ll /tmp/cat

-rwxr-xr-x 1 root root 48568 Oct  6 11:51 /tmp/cat

[root@localhost ~]# chmod u+s /tmp/cat

[root@localhost ~]# ll /tmp/cat

-rwsr-xr-x 1 root root 48568 Oct  6 11:51 /tmp/cat

[root@localhost ~]# su - tesla

[tesla@localhost ~]$ /tmp/cat /etc/shadow

...

davinci:!!:16714:0:99999:7:::

kubrick:!!:16714:0:99999:7:::

2、创建目录/test/data,让某组内普通用户对其有写权限,且创建的所有文件的属组为目录所属的组;此外,每个用户仅能删除自己的文件;[root@localhost ~]# mkdir -p -m 757 /test/data

[root@localhost ~]# chmod g+s,o+t /test/data

[root@localhost ~]# ls -ld /test/data

drwxr-srwt 2 root root 4096 Oct  6 12:08 /test/data

[root@localhost ~]# su - tesla

[tesla@localhost ~]$ touch /test/data/a

[tesla@localhost ~]$ ll !$

ll /test/data/a

-rw-rw-r-- 1 tesla root 0 Oct  6 12:11 /test/data/a

[tesla@localhost ~]$ su - davinci

Password:

[davinci@localhost ~]$ touch /test/data/b

[davinci@localhost ~]$ ll !$

ll /test/data/b

-rw-rw-r-- 1 davinci root 0 Oct  6 12:13 /test/data/b

[davinci@localhost ~]$ rm -f /test/data/a

rm: cannot remove `/test/data/a': Operation not permitted

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值