Linux中的主要权限有: R(读), W(写), X(执行)

两大文件类型目录和文件, 分别对应上面的三种权限,

目录:

R: 可以用ls -l命令查看目录自己的元数据

W:可以在此目录中创建或者删除文件, 前提是一定要有执行权限

X: 可以cd到目录中,执行相关操作

文件:

R: 可以用ls -l命令查看文件的元数据

W: 可以修改文件

X: 可以执行文件(启动成进程,并且提给进程), 默认文件没有执行权限, 为了避免权限过高的人误运行脚本文件.

下面说下文件或目录权限修改的命令的几种格式

1.八进制权限修改模式

chmod [OPTION]... OCTAL-MODE FILE...

用八进制码来表示权限

每个文件都有属主, 属组, 和其他关系, 且分别对应RWX, 所有当我们ls -l查看某个文件时可以看到所有的权限

下图, a的属主,属组为root, 分别对应读写和只读, 其他对应的权限是只读

[root@CentOS02 ~]# ls -l a

-rw-r--r-- 1 root root 22 Sep 11 01:33 a

所以这里一共有这八种组合

权限表示

对应的八进制格式

---

0

--x

1

-w-

2

-wx

3

r--

4

r-x

5

rw-

6

rwx

7

[root@CentOS02 ~]# chmod 774 a

[root@CentOS02 ~]# ls -l a

-rwxrwxr-- 1 root root 22 Sep 11 01:33 a

2. 直接指定使用者的权限

chmod [OPTION]... MODE[,MODE]... FILE...

前提:只有文件的属主或root才能修改权限

直接用u或者g或者o后边=r,w,x来指定权限, 什么都不加等于---

可以多选项指定uo=r

[root@CentOS02 ~]# chmod u= a

[root@CentOS02 ~]# ls -l a

----rwxr-- 1 root root 22 Sep 11 01:33 a

[root@CentOS02 ~]# chmod g=rw a

[root@CentOS02 ~]# ls -l a

----rw-r-- 1 root root 22 Sep 11 01:33 a

[root@CentOS02 ~]# chmod uo=w a

[root@CentOS02 ~]# ls -l a

--w--wx-w- 1 root root 22 Sep 11 01:33 a

或者直接用+rwx 或-rwx来设定说有三个的权限, 注意:如果有w在,只修改属主的

也可以分别只配置三个选项中的任意 go+x

[root@CentOS02 ~]# chmod -rwx a

chmod: a: new permissions are ----w----, not ---------

[root@CentOS02 ~]# ls -l a

-----w---- 1 root root 22 Sep 11 01:33 a

[root@CentOS02 ~]# chmod go+x a

[root@CentOS02 ~]# ls -l a

-----wx--x 1 root root 22 Sep 11 01:33 a

3. 参考文件权限

chmod [OPTION]... --reference=RFILE FILE...

[root@CentOS02 ~]# ls -l {a,b}

--w--wx-w- 1 root root 22 Sep 11 01:33 a

-rw-r--r-- 1 root root  0 Sep 11 02:21 b

[root@CentOS02 ~]# chmod --reference a b

[root@CentOS02 ~]# ls -l {a,b}

--w--wx-w- 1 root root 22 Sep 11 01:33 a

--w--wx-w- 1 root root  0 Sep 11 02:21 b

4, 修改目录和目录里所有文件的属性

加选项-R

[root@CentOS02 ~]# ls -ld test/

drwxr-xr-x 2 root root 4096 Sep 11 02:28 test/

[root@CentOS02 ~]# ls -l test/

total 0

-rw-r--r-- 1 root root 0 Sep 11 02:28 a

-rw-r--r-- 1 root root 0 Sep 11 02:28 b

[root@CentOS02 ~]# chmod -R 777 test/

[root@CentOS02 ~]# ls -l test/

total 0

-rwxrwxrwx 1 root root 0 Sep 11 02:28 a

-rwxrwxrwx 1 root root 0 Sep 11 02:28 b

[root@CentOS02 ~]# ls -ld test/

drwxrwxrwx 2 root root 4096 Sep 11 02:28 test/

[root@CentOS02 ~]#

修改属主属组命令

chown [OPTION]... [OWNER][:[GROUP]] FILE...

前提: 只有root才能修改属主属组.

1. 引号两边加要修改的属主属组, joice:jerry

2. 如果只修改属主就不加引号 joice

3 .如果属主属组都修改成相同的 joice: 或者joice:joice

4. 只修改属组  :joice

[root@CentOS02 ~]# ls -l a

--w--wx-w- 1 root root 22 Sep 11 01:33 a

[root@CentOS02 ~]# chown joice:jerry a

[root@CentOS02 ~]# ls -l a

--w--wx-w- 1 joice jerry 22 Sep 11 01:33 a

chown [OPTION]... --reference=RFILE FILE... 上chmod一样, 也可以用引用修改

[root@CentOS02 ~]# ls -l a

--w--wx-w- 1 joice jerry 22 Sep 11 01:33 a

[root@CentOS02 ~]# ls -l {a,b}

--w--wx-w- 1 joice jerry 22 Sep 11 01:33 a

--w--wx-w- 1 root  root   0 Sep 11 02:21 b

[root@CentOS02 ~]# chown --reference a b

[root@CentOS02 ~]# ls -l {a,b}

--w--wx-w- 1 joice jerry 22 Sep 11 01:33 a

--w--wx-w- 1 joice jerry  0 Sep 11 02:21 b

-R修改目录和文件的属主属组

[root@CentOS02 ~]# chown -R :jerry test/

[root@CentOS02 ~]# ls -l test/

total 0

-rwxrwxrwx 1 root jerry 0 Sep 11 02:28 a

-rwxrwxrwx 1 root jerry 0 Sep 11 02:28 b

[root@CentOS02 ~]# ls -ld test/

drwxrwxrwx 2 root jerry 4096 Sep 11 02:28 test/21

只修改属组命令

chgrp [OPTION]... GROUP FILE...  和上面命令类似, 但只修改属组

[root@CentOS02 test]# chgrp joice a

[root@CentOS02 test]# ls -l a

-rwxrwxrwx 1 root joice 0 Sep 11 02:28 a

chgrp [OPTION]... --reference=RFILE FILE... 和上面命令类似, 但只引用属组

[root@CentOS02 test]# ll

total 0

-rwxrwxrwx 1 tom tom   0 Sep 11 02:28 a

-rwxrwxrwx 1 tom jerry 0 Sep 11 02:28 b

[root@CentOS02 test]# chgrp --reference a b

[root@CentOS02 test]# ls -l

total 0

-rwxrwxrwx 1 tom tom 0 Sep 11 02:28 a

-rwxrwxrwx 1 tom tom 0 Sep 11 02:28 b

文件的特殊权

先来说说, 命令也是文件的一种, 它们的权限一般是775, 也就是说对所有人都有执行权限

[root@centos test]# ll `which grep`

-rwxr-xr-x. 1 root root 111680 Jun  4  2014 /bin/grep

[root@centos test]# ll `which find`

-rwxr-xr-x. 1 root root 238976 Nov 11  2010 /bin/find

如果运行cat命令也就是用户通过cat发起一个进程, 这个进程的权限就是用户本身, 如果用cat打开一个文件,也就是以用户的权限来打开文件. 而文件时候允许执行, 就需要一次查看文件属主属组和其他的属性有无匹配.

权限匹配模型的顺序

进程的发起者与被访问文件的属主有为相同

进程的发起者与在不在被访问文件的属组里

也other的访问权限

特殊权限1: suid:Set UID

前提: 文件为可执行文件或脚本

功效:任何用户运行此文件文一个进程时, 进程的权限不是用本身, 而是命令文件的属主

查询: 属主的执行位为s, 如果本身有执行权限位小写s, 没有为大写S

设置: chmod u+s 文件

[root@centos test]# ll `which passwd`

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

[root@centos test]# chmod u+s a

[root@centos test]# ll

total 48

-r-Sr--r--. 1 root  root 23617 Sep 16 23:35 a

-rw-r--r--. 1 user1 root 23057 Sep 16 23:36 b

-rw-rw-r--. 1   502 root     0 Sep 16 23:14 c

[root@centos test]#

特殊权限2: sgid: Set GID

前提:作用于目录

功效: 在此文件夹内创建的文件都属于目录的组, 也就是说所有用户可以修改对方的文件, 如果umask002

查询: 属组的执行位为s, 如果本身有执行权限位小写s, 没有为大写S

设置: chmod g+s 目录

[root@centos test]# chmod g+s test01/

[root@centos test]# ll -d test01/

drwxr-sr-x. 2 root root 4096 Sep 17 14:11 test01/

[root@centos test]# chgrp user1 test01/

[root@centos test]# ll -d test01/

drwxr-sr-x. 2 root user1 4096 Sep 17 14:11 test01/

#修改sgid, 并制定user1为属组

[root@centos test]# touch test01/a

[root@centos test]# ll test01/

total 0

-rw-r--r--. 1 root user1 0 Sep 17 14:15 a

特殊权限3: sticky

前提: 作用于目录

功效: 在此文件的

[user2@centos test]$ id user1

uid=500(user1) gid=500(user1) groups=500(user1)

[user2@centos test]$ id user2

uid=501(user2) gid=501(user2) groups=501(user2),500(user1)

[root@centos test]# chmod o+t test01/

[root@centos test]# ll -d test01/

drwxrwsr-t. 3 root user1 4096 Sep 17 15:13 test01/

#修改文件t权限

[user2@centos test]$ touch test01/d

[user2@centos test]$ ll test01/

total 4

-rw-r--r--. 1 root  user1    0 Sep 17 14:15 a

-rw-r--r--. 1 root  user1    0 Sep 17 14:17 b

-rw-r--r--. 1 root  user1    0 Sep 17 14:51 c

-rw-rw-r--. 1 user2 user1    0 Sep 17 15:13 d

drwxr-sr-x. 2 root  user1 4096 Sep 17 14:16 folder01

[user2@centos test]$ rm test01/a

rm: remove write-protected regular empty file `test01/a'? y

rm: cannot remove `test01/a': Operation not permitted

#目录对组user1有写权限, 而user1, 和user2 都属于user1的组,user2不能删除user1创建的文件

特殊权限的八进制权限位

suid

sgid

sticky

0

0

0

0

0

0

1

1

0

1

0

2

0

1

1

3

1

0

0

4

1

0

1

5

1

1

0

6

1

1

1

7

在一般的3为权限前多出一位表示特殊权限

chmond 2700 /tmp/test/a , a文件的guid设置为有效和 chmond g+s /etc/test/a相同.

补充: 一般文件不能随便修改属主属组, 我们又不能随便给o写权限, 所有就引入了facl的概念

FACL: File Access Control List

前提: 必须是root用户执行

例子

[root@centos test]# setfacl -m u:user2:rw b

[root@centos test]# getfacl b

# file: b

# owner: user1

# group: user1

user::rwx

user:user2:rw-

group::rwx

mask::rwx

other::rwx

#给user2读写权限, 也可以设置组权限

[root@centos test]# setfacl -m g:user2:rw b

[root@centos test]# getfacl b

# file: b

# owner: user1

# group: user1

user::rwx

user:user2:rw-

group::rwx

group:user2:rw-

mask::rwx

other::rwx

#或删除user2的权限

[root@centos test]# setfacl -x u:user2 b

[root@centos test]# getfacl b

# file: b

# owner: user1

# group: user1

user::rwx

group::rwx

group:user2:rw-

mask::rwx

other::rwx

-R 选项和chmond相同可以,改变目录里的所有文件.

facl和普通权限的访问模型

用户访问这个文件时候

1. 先检查原有属主. 2. facl的属主. 3. 原有的属组. 4. facl的属组. 5原有的其他

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐