控制对文件访问
Linux文件权限
权限 | 文件影响 | 目录影响 |
---|---|---|
r | 读取文件内容 | 列出目录内容 |
w | 更改文件内容 | 创建删除目录文件 |
x | 作为命令执行 | 目录可以变成当前工作目录 |
命令行管理文件系统权限
更改文件和目录权限
chmod
chmod WhoWhatWhich file|directory
- Who (u,g,o,a代表用户,组,其他,全部)
- What(+ - = 代表添加,删除,设置)
- Which(r,w,x 代表读写执行)
#对file.txt 中组和其他删除读取权限
[root@servera ~]# ll
total 4
-rw-------. 1 root root 1078 Jul 15 10:29 anaconda-ks.cfg
-rw-r--r--. 1 root root 0 Jul 18 02:51 file.txt
[root@servera ~]# chmod go-r file.txt
[root@servera ~]# ll
total 4
-rw-------. 1 root root 1078 Jul 15 10:29 anaconda-ks.cfg
-rw-------. 1 root root 0 Jul 18 02:51 file.txt
#对file.txt添加执行权限
[root@servera ~]# chmod a+x file.txt
[root@servera ~]# ll
total 4
-rw-------. 1 root root 1078 Jul 15 10:29 anaconda-ks.cfg
-rwx--x--x. 1 root root 0 Jul 18 02:51 file.txt
通过数值更改权限
chmod ### file|dir
'#'字符代表一个数字,每个数字代表一个访问级别的权限:用户,组,其他
权限 | 对应数字 |
---|---|
r | 4 |
w | 2 |
x | 1 |
#对用户设置读写权限,对组设置读取权限,对file其他设置读取权限
[root@servera ~]# chmod 644 file
[root@servera ~]# ll
total 0
-rw-r--r--. 1 root root 0 Jul 18 02:59 file
#对用户设置读写执行权限,对组设置读执行权限,对file其他不设权限
[root@servera ~]# chmod 750 file
[root@servera ~]# ll
total 0
-rwxr-x---. 1 root root 0 Jul 18 02:59 file
更改文件和目录的用户和组的所有权
chown 更改权限
chown -R递归更改整个目录树的所有权
#更改file所有权为usr1
[root@servera ~]# ll
total 0
-rwxr-x---. 1 root root 0 Jul 18 02:59 file
[root@servera ~]# chown usr1 file
[root@servera ~]# ll
total 0
-rwxr-x---. 1 usr1 root 0 Jul 18 02:59 file
#将test_dir所有文件所有权变成usr1
[root@servera ~]# ll test_dir/
total 0
-rw-r--r--. 1 root root 0 Jul 18 03:09 a
-rw-r--r--. 1 root root 0 Jul 18 03:09 b
-rw-r--r--. 1 root root 0 Jul 18 03:09 c
-rw-r--r--. 1 root root 0 Jul 18 03:09 d
[root@servera ~]# chown -R usr1 test_dir/
[root@servera ~]# ll test_dir/
total 0
-rw-r--r--. 1 usr1 root 0 Jul 18 03:09 a
-rw-r--r--. 1 usr1 root 0 Jul 18 03:09 b
-rw-r--r--. 1 usr1 root 0 Jul 18 03:09 c
-rw-r--r--. 1 usr1 root 0 Jul 18 03:09 d
更改组和用户
[root@servera ~]# ll | grep test_dir
drwxr-xr-x. 2 usr1 root 42 Jul 18 03:09 test_dir
[root@servera ~]# chown :admins test_dir
[root@servera ~]# ll | grep test_dir
drwxr-xr-x. 2 usr1 admins 42 Jul 18 03:09 test_dir
[root@servera ~]# chown root:root test_dir
[root@servera ~]# ll | grep test_dir
drwxr-xr-x. 2 root root 42 Jul 18 03:09 test_dir
管理默认权限和文件访问
特殊权限 | 对文件影响 | 对目录影响 | ||
---|---|---|---|---|
u+s | 以拥有文件的用户身份,而不是运行文件的用户身份来执行文件 | 无 | ||
g+s | 以拥有文件的组身份执行文件 | 为目录最新创建的文件将其组匹配所有者设置与目录的组所有者相匹配 | ||
o+t | 无影响 | 对目录具有写入访问权限的用户仅可以删除拥有的文件,无法删除或强制保存到其他用户所拥有的文件 |
[root@servera ~]# ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 33424 Feb 7 2022 /usr/bin/passwd
在长列表里,通过小写s辨别setuid权限,该处通常x,如果所有者不具备执行权限由S取代
[root@servera ~]# ls -ld /run/log/journal
drwxr-sr-x. 3 root systemd-journal 60 Jul 15 10:54 /run/log/journal
对某目录的书权限setgid表示在该目录中创建的文件将继承该目录的组的所有权,而不是继承创建用户
设置特殊权限
setuid=u+s 4
setgid=g+s 2
sticky=o+t 1
#在dir目录添加setgid位
[root@servera ~]# chmod g+s dir/
[root@servera ~]# ll
total 0
drwxr-sr-x. 2 root root 6 Jul 18 05:02 dir
#为dir设置setgid位并为用户和组添加读写执行权限 其他不具备权限
[root@servera ~]# chmod 2770 dir/
[root@servera ~]# ll
total 0
drwxrws---. 2 root root 6 Jul 18 05:02 dir
默认文件权限
创建新目录,系统首先分配八进制权限0777(drwxrwxrwx)
创建常规文件,系统分配八进制权限0666(-rw-rw-rw-)
shell会话还会设置一个umask,以进一步限制初始设置权限,这是一个8位掩码,用于清除由该进程创建的新文件和目录权限。如果在umask设置一个位,则对应文件的权限将被清除。
[root@servera ~]# umask
0022
Bash shell用户系统默认umask值在/etc/profile
/etc/bashrc
[root@servera ~]# umask
0022
[root@servera ~]# touch default.txt
[root@servera ~]# ls -l default.txt
-rw-r--r--. 1 root root 0 Jul 18 05:20 default.txt
[root@servera ~]# mkdir default
[root@servera ~]# ls -ld default
drwxr-xr-x. 2 root root 6 Jul 18 05:20 default
通过将umask值设置为0,其他文件权限将读取改为读写,其他目录权限将从读取和执行改为读取,写入和执行。
[root@servera ~]# umask 0
[root@servera ~]# touch zero.txt
[root@servera ~]# ls -l zero.txt
-rw-rw-rw-. 1 root root 0 Jul 18 05:23 zero.txt
[root@servera ~]# mkdir zero
[root@servera ~]# ls -ld zero
drwxrwxrwx. 2 root root 6 Jul 18 05:23 zero
要屏蔽其他所有文件的目录权限umask设置为007
[root@servera ~]# umask 007
[root@servera ~]# touch seven.txt
[root@servera ~]# ls -l seven.txt
-rw-rw----. 1 root root 0 Jul 18 05:24 seven.txt
[root@servera ~]# mkdir seven
[root@servera ~]# ls -ld seven
drwxrwx---. 2 root root 6 Jul 18 05:25 seven
umask为027可确保新文件的用户具有读写权限,组具有读取权限。新目录的组具有读取和写入权限,而其他则没有访问权限。
[root@servera ~]# umask 027
[root@servera ~]# touch two-seven.txt
[root@servera ~]# ls -l two-seven.txt
-rw-r-----. 1 root root 0 Jul 18 05:33 two-seven.txt
[root@servera ~]# mkdir two-seven
[root@servera ~]# ls -ld two-seven
drwxr-x---. 2 root root 6 Jul 18 05:33 two-seven