权限设置案例

针对hr部门的访问目录/home/hr设置权限,要求如下:
1.root用户和hr组的员工可以读、写、执行
2.其他用户没有任何权限

  1. [root@bogon ~]# useradd hr1 -G hr
  2. [root@bogon ~]# useradd hr2 -G hr
  3. [root@bogon ~]# id hr1
  4. uid=1007(hr1) gid=1012(hr1) 组=1012(hr1),1001(hr)
  5. [root@bogon ~]# id hr2
  6. uid=1008(hr2) gid=1013(hr2) 组=1013(hr2),1001(hr)
  7. [root@bogon ~]# mkdir /home/hr
  8. [root@bogon ~]# chgrp hr /home/hr
  9. [root@bogon ~]# ll -d /home/hr
  10. drwxr-xr-x. 2 root hr 6 8 14 22:28 /home/hr
  11. [root@bogon ~]#
  12. [root@bogon ~]# chmod 770 /home/hr
  13. [root@bogon ~]# ll -d /home/hr
  14. drwxrwx---. 2 root hr 6 8 14 22:28 /home/hr

rwx 权限对文件的作用

文件,是系统中用来存储数据的,包括普通的文本文件、数据库文件、二进制可执行文件,等等。不同的权限对文件的含义如表 1 所示。

表 1 rwx 权限对文件的作用

rwx 权限 对文件的作用
读权限(r) 表示可读取此文件中的实际内容,例如,可以对文件执行 cat、more、less、head、tail 等文件查看命令。
写权限(w) 表示可以编辑、新增或者修改文件中的内容,例如,可以对文件执行 vim、echo 等修改文件数据的命令。注意,无权限不赋予用户删除文件的权利,除非用户对文件的上级目录拥有写权限才可以。
执行权限(x) 表示该文件具有被系统执行的权限。Window系统中查看一个文件是否为可执行文件,是通过扩展名(.exe、.bat 等),但在 Linux 系统中,文件是否能被执行,是通过看此文件是否具有 x 权限来决定的。也就是说,只要文件拥有 x 权限,则此文件就是可执行文件。但是,文件到底能够正确运行,还要看文件中的代码是否正确。

对于文件来说,执行权限是最高权限。给用户或群组设定权限时,是否赋予执行权限需要慎重考虑,否则会对系统安装造成严重影响。

实战案例1:rwx对文件的影响

[root@bogon ~]# vim /home/file1
date
[root@bogon ~]# ll /home/file1 
-rw-r--r--. 1 root root 5 8月  14 22:33 /home/file1

mel@mel:~$ ssh alice@192.168.0.105
alice@192.168.0.105's password:
Last login: Fri Aug 14 16:09:18 2020 from 192.168.0.108
[alice@bogon ~]$ cat /home/file1 // 测试读 OK
data
[alice@bogon ~]$ /home/file1    //测试执行    NO
-bash: /home/file1: 权限不够
[root@bogon ~]# chmod o+x /home/file1 
[root@bogon ~]# ll /home/file1 
-rw-r--r-x. 1 root root 5 8月  14 22:33 /home/file1

[alice@bogon ~]$ /home/file1
2020年 08月 14日 星期五 22:40:00 CST
[alice@bogon ~]$ vim /home/file1 // 没有写权限不能修改
E45: 已设定选项 'readonly' (请加 ! 强制执行)
[root@bogon ~]# chmod o+w /home/file1
[alice@bogon ~]$ vim /home/file1 // 测试写操作
[alice@bogon ~]$ cat /home/file1
date
ls

rwx 权限对目录的作用

目录,主要用来记录文件名列表,不同的权限对目录的作用如表 2 所示。

表 2 rwx 权限对目录的作用

rwx 权限 对目录的作用
读权限(r) 表示具有读取目录结构列表的权限,也就是说,可以看到目录中有哪些文件和子目录。一旦对目录拥有 r 权限,就可以在此目录下执行 ls 命令,查看目录中的内容。
写权限(w) 对于目录来说,w 权限是最高权限。对目录拥有 w 权限,表示可以对目录做以下操作:
- 在此目录中建立新的文件或子目录;
- 删除已存在的文件和目录(无论子文件或子目录的权限是怎样的);
- 对已存在的文件或目录做更名操作;
- 移动此目录下的文件和目录的位置。
一旦对目录拥有 w 权限,就可以在目录下执行 touch、rm、cp、mv 等命令。
执行权限(x) 目录是不能直接运行的,对目录赋予 x 权限,代表用户可以进入目录,也就是说,赋予 x 权限的用户或群组可以使用 cd 命令。

实战案例2:**对目录没有w,**对文件有rwx

[root@bogon ~]# mkdir /home/dir
[root@bogon ~]# cd /home/
[root@bogon home]# ll -d dir
drwxr-xr-x. 2 root root 6 8月  15 08:31 dir
[root@bogon home]# touch dir/file1
[root@bogon home]# chmod 777 dir/file1
[root@bogon home]# ll  dir/file1 
-rwxrwxrwx. 1 root root 0 8月  15 08:44 dir/file1
[alice@bogon ~]$ vim /home/dir/file1 
[alice@bogon ~]$ cat /home/dir/file1 
date
[alice@bogon ~]$ rm -rf /home/dir/file1 
rm: 无法删除"/home/dir/file1": 权限不够
[alice@bogon ~]$ mkdir /home/dir/dir1
mkdir: 无法创建目录"/home/dir/dir1": 权限不够

实战案例3:**对目录有w,**对文件没有任何权限

[root@bogon home]# chmod 777 dir/
[root@bogon home]# ls -ald dir/
drwxrwxrwx. 2 root root 19 8月  15 08:44 dir/
[root@bogon home]# chmod 000 dir/file1 
[root@bogon home]# ls -al dir/file1 
----------. 1 root root 5 8月  15 08:46 dir/file1
[alice@bogon ~]$ vim /home/dir/file1 
"/home/dir/file1" [权限不足]
[alice@bogon ~]$ cat /home/dir/file1 
cat: /home/dir/file1: 权限不够
[alice@bogon ~]$ /home/dir/file1 
-bash: /home/dir/file1: 权限不够
[alice@bogon ~]$ rm -rf /home/dir/file1 // 可以删除文件
[alice@bogon ~]$ touch /home/dir/file2  // 可以创建文件
[alice@bogon ~]$ ls -al /home/dir/file2 
-rw-rw-r--. 1 alice alice 0 8月  15 09:05 /home/dir/file2

小结:对目录有w权限,可以在目录中创建新文件,可以删除目录中的文件(和文件的权限无关)
删除(创建)文件相对于目录来说是写权限。

删文件实际删除的是目录的内容,目录中有文件名,删文件相当于将目录中的文件名删除,导致找不到对应的文件,删除的是对文件的索引。一本书的目录,从目录中划掉一个章节,对应的章节在目录中不存在了,找不到位置了,但是章节内容还存在。

目录时连接着文件,删除文件相当于是将目录与文件间的联系删除。

注意事项:
文件:x权限小心给予
目录:w权限小心给予


root

[root@bogon home]# mkdir dir1/dir2/ -p
[root@bogon home]# touch dir1/dir2/file1
[root@bogon home]# touch dir1/fileone
[root@bogon home]# tree dir1
dir1
├── dir2
│   └── file1
└── fileone

1 directory, 2 files
[root@bogon home]# chmod 777 dir1
[root@bogon home]# ll -d dir1
drwxrwxrwx. 3 root root 18 8月  15 09:48 dir1
[root@bogon home]# ll -d dir1/dir2
drwxr-xr-x. 2 root root 19 8月  15 09:48 dir1/dir2

alice

[alice@bogon ~]$ cd /home/dir1/
[alice@bogon dir1]$ ls
dir2  fileone
[alice@bogon dir1]$ touch alice.txt
[alice@bogon dir1]$ rm -rf alice.txt 
[alice@bogon dir1]$ rm -rf fileone 
[alice@bogon dir1]$ rm -rf dir2/ 
rm: 无法删除"dir2/file1": 权限不够

root

[root@bogon home]# mkdir dir1/dir22
[root@bogon home]# tree dir1
dir1
├── dir2
│   └── file1
└── dir22

2 directories, 1 file

alice

[alice@bogon dir1]$ rm -rf dir22 
[alice@bogon dir1]$ cd ..
[alice@bogon home]$ tree dir1
dir1
└── dir2
    └── file1

1 directory, 1 file
[root@bogon home]# chmod 777 dir1/dir2
[root@bogon home]# tree dir1
dir1
└── dir2
    └── file1

1 directory, 1 file

alice

[alice@bogon dir1]$ rm -rf dir2/ 
[alice@bogon dir1]$ tree ../dir1
../dir1

0 directories, 0 files

当有多级目录时,权限仅限与当前目录层,不能影响下一层目录,只有当下一层目录为空时,可对下一层目录进行删除操作。