Linux文件系统权限
文件具有个应用权限的用户类别:
- 文件归用户所有,通常是创建文件的用户;
- 文件还归单个组所有,通常是创建该文件的主要用户组所有,但是可以进行更改;
- 可以为所属用户、所属组和系统上的非用户和非所属组成员的其它用户设置不同的权限
权限对文件和目录的影响
- r:可读取文件内容;可列出目录的内容(文件名);
- w:可以更改文件内容;可以创建或删除目录中的任一文件;
-x:可以作为命令执行文件;目录可以称为当前工作目录(可以cd它,但还需要读取权限才能列出里面的文件)。
用户通常对只读目录具有读取和执行权限,因此他们可以列出该目录,并且对其内容具有完整的只读访问权限。如果用户仅对某目录具有读取访问权限,可以列出其中的文件的名称,但是其它信息都不可用,也不可访问。如果用户进队目录具有执行权限,则无法列出目录中的文件名。如果他们知道自己有读取权限的文件的名称,可通过显示指定相对文件名,以便从目录外部访问该文件的内容。
查看文件和目录的权限以及所有权
- 使用ls命令的-l选项可以显示有关权限和所有权限的详细信息:
]$ ls -l
-rwxrwxr-x. 1 user user 18 Mar 18 17:30 aiguo
- 使用-d选项可以显示有关权限和所有权的详细信息
[user@serverb ~]$ ls -ld /home/user/tmp/
drwxrwxr-x. 2 user user 22 Mar 16 13:50 /home/user/tmp/
- 在ls -l长列表的显示下
-- "-"表示常规文件
-- "d"表示目录
-- "l"表示软链接
-- "b"或"c"表示硬件设备
-- "p"或"s"表示特殊用途的文件 - 第一组rwx表示文件所有者权限;第二组rwx表示文件所属组权限;第三组rwx表示其他人对文件的权限
]$ ls -l
total 4
-rwxrwxr-x. 1 user user 18 Mar 18 17:30 aiguo
-rw-r--r--. 1 root root 0 Mar 14 20:39 ak
drwxrwxr-x. 5 user user 170 Mar 15 21:43 glob
drwxrwxr-x. 2 user user 22 Mar 16 13:50 tmp
从命令行更改文件权限
1、使用chmod更改文件和目录权限
- 字母方法
更改格式“chmod whowhatwhich file|directory”
who:表示所有者(u)、所属组(g)、其他人(o)、所有人(a)
what:表示添加(+)、删除(-)、精准设置(=)
which:表示权限(可读)r、(可写)w、(可执行)x、(特殊执行,仅针对目录有效)X
[user@serverb prac]$ touch test
[user@serverb prac]$ ll
total 0
-rw-rw-r--. 1 user user 0 Apr 25 19:17 test
[user@serverb prac]$ chmod u+x test
[user@serverb prac]$ ll
total 0
-rwxrw-r--. 1 user user 0 Apr 25 19:17 test
[user@serverb prac]$ chmod g+x test
[user@serverb prac]$ ll
total 0
-rwxrwxr--. 1 user user 0 Apr 25 19:17 test
[user@serverb prac]$ chmod o+x test
[user@serverb prac]$ ll
total 0
-rwxrwxr-x. 1 user user 0 Apr 25 19:17 test
[user@serverb prac]$ chmod a-x test
[user@serverb prac]$ ll
total 0
-rw-rw-r--. 1 user user 0 Apr 25 19:17 test
[user@serverb prac]$ chmod o=rx test
[user@serverb prac]$ ll
total 0
-rw-rw-r-x. 1 user user 0 Apr 25 19:17 test
- 数字方法
更改格式“chmod ### file|directory”
r=4
w=2
x=1
注:第一个#表示所有者权限;第二个#表示所属组权限;第三个#表示其他人权限
[user@serverb prac]$ ll
total 0
-rw-rw-r-x. 1 user user 0 Apr 25 19:17 test
[user@serverb prac]$ chmod 755 test
[user@serverb prac]$ ll
total 0
-rwxr-xr-x. 1 user user 0 Apr 25 19:17 test
[user@serverb prac]$ chmod 741 test
[user@serverb prac]$ ll
total 0
-rwxr----x. 1 user user 0 Apr 25 19:17 test
[user@serverb prac]$ chmod 532 test
[user@serverb prac]$ ll
total 0
-r-x-wx-w-. 1 user user 0 Apr 25 19:17 test
2、更改文件和目录的用户和组的所有权
- 使用chown课改文件的所有权
[root@serverb prac]# ll
total 0
-r-x-wx-w-. 1 user user 0 Apr 25 19:17 test
[root@serverb prac]# chown root:user test
[root@serverb prac]# ll
total 0
-r-x-wx-w-. 1 root user 0 Apr 25 19:17 test
[root@serverb prac]# chown :root test
[root@serverb prac]# ll
total 0
-r-x-wx-w-. 1 root root 0 Apr 25 19:17 test
[root@serverb prac]# chown user: test
[root@serverb prac]# ll
total 0
-r-x-wx-w-. 1 user user 0 Apr 25 19:17 test
- 使用chgrp命令可以更改文件的所有组
[root@serverb prac]# ll
total 0
-r-x-wx-w-. 1 user user 0 Apr 25 19:17 test
[root@serverb prac]# chgrp root test
[root@serverb prac]# ll
total 0
-r-x-wx-w-. 1 user root 0 Apr 25 19:17 test
[root@serverb prac]# chgrp wheel test
[root@serverb prac]# ll
total 0
-r-x-wx-w-. 1 user wheel 0 Apr 25 19:17 test
管理默认权限和文件访问
- 特殊权限
-- 特殊权限构成了除了基本用户、组和其他类型之外的第四种权限类型
-- 特殊权限对文件和目录的影响
1.u+s(suid):以拥有文件的用户身份,而不是以运行文件的用户身份执行文件;对目录无影响,只作用于可执行的二进制命令
2.g+s(sgid):以拥有文件的组身份执行文件;在目录中最新创建的文件将其组所有者设置成和目录的组的所有者相匹配
3.o+t(sticky):对文件无影响;对目录具有写入访问权限的用户仅可以删除其所拥有的文件,而无法删除或强制保存到其它用户所拥有的文件
#suid权限
]# ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 27856 Apr 1 2020 /usr/bin/passwd
#权限为4755
#sgid权限
]$ ls -ld /run/log/journal/
drwxr-sr-x. 3 root systemd-journal 60 Mar 22 20:06 /run/log/journal/
#权限为2755
#sticky权限
]$ ls -ld /tmp/
drwxrwxrwt. 8 root root 187 Apr 25 03:27 /tmp/
- 默认权限
-- 在创建文件和目录时,会为其分配一个初始权限。有两个因素会影响这些权限。首先是要创建的是常规文件还是目录,其次是当前的umask。
-- bash shell用户的系统默认在/etc/profile和/etc/bashrc中定义,用户也可以在其主目录的/.bashrc和/.bash_profile文件中覆盖系统默认值
~]$ umask
0002
~]$ ls -l
-rw-rw-r--. 1 user user 0 Apr 25 19:08 test
drwxrwxr-x. 2 user user 6 Apr 26 00:52 testdir
#临时修改umask
[user@serverb ~]$ umask
0002
[user@serverb ~]$ umask 0000
[user@serverb ~]$ umask
0000
[user@serverb ~]$ mkdir testdir1
[user@serverb ~]$ ls -ld testdir1
drwxrwxrwx. 2 user user 6 Apr 26 01:27 testdir1
[user@serverb ~]$ touch test1
[user@serverb ~]$ ls -l test1
-rw-rw-rw-. 1 user user 0 Apr 26 01:27 test1