Linux下的权限管理
Linux下的权限管理
1.如何查看及读取权限信息
【1】ls
ls -l file | 进入到指定目录中 |
---|---|
ls -d dir | 查看目录本身 |
ls -a dir | 所有文件包含隐藏的 |
ls -S dir | 查看并且按照大小排序 |
ls -s dir | 查看文件大小 |
此部分内容在linux命令行操作与文件管理中也出现过,要掌握更多命令及其作用,可以看下之前的博客linux命令行操作与文件管理
下面会使用到ll,所以我查询了以下资料:ll会列出该文件下的所有文件信息,包括隐藏文件 而ls -l 只会列出显示文件,并且ll 命令列出的信息更加详细,有时间,是否可读写等信息
【2】查看文件属性
//文件属性的查看方式
[root@workstation Desktop]# ls -l /etc/shadow
----------. 1 root root 1338 Jan 10 02:48 /etc/shadow
//目录属性的查看方式
[root@workstation Desktop]# ls -ld /etc/
drwxr-xr-x. 139 root root 8192 Jan 10 04:08 /etc/
注意此处需要记牢【1】中ls个参数对应的作用
【3】对于属性各字段的理解
- 理解文件属性的字段
字段 | 属性 |
---|---|
1 | 类型 |
2 | 文件权限 |
3 | SELinux Context |
4 | 文件硬链接个数 |
5 | 文件拥有者 |
6 | 文件拥有组 |
7 | 文件大小 |
8 | 文件最后一次被修改的时间 |
9 | 文件名称 |
- 理解目录属性的字段
字段 | 属性 |
---|---|
1 | 类型 |
2 | 目录权限 |
3 | SELinux Context |
4 | 目录中子目录的个数 |
5 | 文件拥有者 |
6 | 文件拥有组 |
7 | 目录中自文件或子目录元数据大小 |
8 | 目录最后一次被修改的时间 |
9 | 目录名称 |
-
字段1,是特殊表示格。
-表示目录或连结文件等等,d表示目录,例如drwx------。 l表示连结文件,如lrwxrwxrwx;如果是以一横“-”表示,则表示这是文件。 -
字段2,表示文件的属性。
– Linux的文件基本上分为三个属性:可读(r),可写(w),可执行(x)。该部分的格子以每3格为一个单位。因为Linux是多用户多任务系统,所以一个文件可能同时被许多人使用,所以我们一定要设好每个文件的权限,其文件的权限位置排列顺序是(以-rwxr-xr-x为例): rwx(Owner)r-x(Group)r-x(Other)
–这个例子表示的权限是:使用者自己可读,可写,可执行;同一组的用户可读,不可写,可执行;其它用户可读,不可写,可执行。
– 另外,有一些程序属性的执行部分不是X,而是S,这表示执行这个程序的使用者,临时可以有和拥有者一样权力的身份来执行该程序。一般出现在系统管理之类的指令或程序,让使用者执行时,拥有root身份。 -
字段4,表示文件个数。
–如果是文件的话,那这个数目自然是1了,如果是目录的话,那它的数目就是该目录中的文件个数了。以下部分的代码为例,解释下当为目录的时候数目是多少。
(注意:在下述例子中,可以看出我们并未在目录“westos”下创建新文件与子目录,但此时却显示数目为2,这是因为包含包含有隐藏目录 " . " 和 ” … ",所以此时显示为2。)
[root@workstation Desktop]# mkdir westos
[root@workstation Desktop]# ls -l /mnt/
total 0
drwx------. 2 1001 linux 6 Jan 10 01:26 westos
- 字段5,表示该文件或目录的拥有者。
–若使用者目前处于自己的Home,那这一栏大概都是它的账号名称。
-
字段6,表示所属的组(group)。
–每一个使用者都可以拥有一个以上的组,不过大部分的使用者应该都只属于一个组,只有当系统管理员希望给予某使用者特殊权限时,才可能会给他另一个组。 -
字段7,表示文件大小。
–文件大小用byte来表示,而空目录一般都是1024byte,你当然可以用其它参数使文件显示的单位不同,如使用ls
–k就是用kb莱显示一个文件的大小单位,不过一般我们还是以byte为主。
注意: 以下部分的代码为例,解释下当是目录的时候所装文件大小是多少。新建立一个目录“westos”,此时并未在“westos”里面创建新的文件或目录,但字段3表示的数目已经是6了。原因如下:原始是6个 ,因为包含【" . "[3个] 和 " … "[3个]】一共6个,所以6表示原始拥有的 . 与…(3+3)】
[root@workstation Desktop]# mkdir westos
[root@workstation Desktop]# ls -l /mnt/
total 0
drwx------. 2 1001 linux 6 Jan 10 01:26 westos
-
字段8,表示创建日期。
–以“月,日,时间”的格式表示,如Jan 10 01:26表示1月10日早上1:26分。 -
字段9,表示文件名。
–我们可以用ls –a显示隐藏的文件名。
【3】练习
为什么是63(举例)
[root@workstation mnt]# ls -Rl /mnt/
/mnt/:
total 0
drwxr-xr-x. 2 root root 63 Jan 8 22:41 westos
/mnt/westos:
total 0
-rw-r–r--. 1 root root 0 Jan 8 22:41 file
-rw-r–r--. 1 root root 0 Jan 8 22:11 redhat1
-rw-r–r--. 1 root root 0 Jan 8 22:11 redhat2
-rw-r–r--. 1 root root 0 Jan 8 22:11 redhat3
63=8(名称前面的8位)*4行+4(file)+21(redhat{1…3})+6(.和…)
2. 设定文件的拥有者及拥有组
【1】划分身份
- 因为Linux是多用户多任务系统,所以一个文件可能同时被许多人使用,为了考虑每个人的隐私权以及每个人喜好的工作环境 , 对用户进行分类。(以-rwxr-xr-x为例): rwx(Owner)r-x(Group)r-x(Other)
这个例子表示的权限是:使用者自己可读,可写,可执行;同一组的用户可读,不可写,可执行;其它用户可读,不可写,可执行。 - 文件拥有者及拥有组只有超级用户root可以修改
【2】更改方式练习
[root@workstation ~]# chown haha /mnt/file1 【用户】
[root@workstation ~]# chown student:haha /mnt/file2 【用户】
[root@workstation ~]# chown haha.student /mnt/file3 【用户】
[root@workstation ~]# chgrp student /mnt/westos 【组】
[root@workstation ~]# chown .student /mnt/file1 【组】
[root@workstation ~]# chown :student /mnt/file2 【组】
/mnt:
total 0
-rw-r--r--. 1 haha student 0 Jan 8 20:40 file1
-rw-r--r--. 1 student student 0 Jan 8 20:40 file2
-rw-r--r--. 1 haha student 0 Jan 8 20:40 file3
drwxr-xr-x. 2 root student 51 Jan 8 20:40 westos 【2是因为有隐藏目录 . 和..】
3. 理解各种权限类型对于文件的影响
【1】文件权限读取
- Linux的文件基本上分为三个属性:可读(r),可写(w),可执行(x)。该部分的格子以每3格为一个单位。因为Linux是多用户多任务系统,所以一个文件可能同时被许多人使用,所以我们一定要设好每个文件的权限,其文件的权限位置排列顺序是(以-rwxr-xr-x为例):
rwx(Owner)r-x(Group)r-x(Other)
–这个例子表示的权限是:使用者自己可读,可写,可执行;同一组的用户可读,不可写,可执行;其它用户可读,不可写,可执行。 - – 另外,有一些程序属性的执行部分不是X,而是S,这表示执行这个程序的使用者,临时可以有和拥有者一样权力的身份来执行该程序。一般出现在系统管理之类的指令或程序,让使用者执行时,拥有root身份。
【权限类型】
- “-” 权限关闭:此位权限未开启
- “r”(readable 查看权限) :
对于文件可查看文件中的内容;
对于目录可列出目录中的文件名称。 - “w”(writeable 可写权限):
对于文件可更改文件记录的内容;
在新目录中建立新文件或目录,删除已存在的文件和目录(无论子文件或子目录的权限是怎样的),对以存在的文件或目录可以修改名称,可以移动此目录下的文件和目录的位置。 - “x”(excutable 执行权权限):
表示用户可切换路径到当前目录
4.熟练设定权限
【1】字符方式设定文件权限
chmod <u / g / o / a><+ / - /= ><r / w / x > 目标
练习
chmod u+x /mnt/file
chmod g-w /mnt/file1
chmod uo-x /mnt/file2
chmod g-x,o-w /mnt/file3
chmod o=rw- /mnt/file4
【2】数字方式设定文件权限
练习
chmod 777 /mnt/file 【此时权限为 rwxrwxrwx】
chmod 645 /mnt/file1 【此时权限是 rw-r--r-x】
【3】权限复制
chmod --reference=属性源文件 TAG
chmod --reference=/mnt/file westos
与之前学过的命令cp相对比,会发现cp -p会将权限和源文件内容都复制过去,会覆盖目标文件内容,chmod --reference 只复制了权限
5.权限预留阀值umask
【1】临时更改
- 系统中使用umask来预留权限
- 在shell中可以使用umask来查看并设定预留权限阈值【即: umask 预留阈值】
- sudo下放权力(可以简单理解为:给普通用户赋予一定的权力,如在用户管理部分举的例子“ haha workstation.lab.example.com=(root) NOPASSWD: /user/sbin/useradd ”表示为 在创建新用户方面,将超级用户root的权力赋予给了给普通用户haha)。 但umask修改的是权限,即修改的是文件拥有者,文件组织者和其他人对于文件的权限。
简单言之:sudo就是下放权力后,我们能做什么。umask就是修改权限后,ugo能对文件或目录做什么。
练习
[root@workstation Desktop]# umask 【查看预留权限阈值】
0022
[root@workstation Desktop]# umask 077 【设置预留权限阈值】
[root@workstation Desktop]# umask
0077
【2】永久改变
- shell配置文件 /etc/bashrc
- 系统环境配置文件 /etc/profile
- 修改步骤
[root@workstation Desktop]# vim /etc/bashrc 【进入图1所示的环境,/umask 后,修改022为077】
[root@workstation Desktop]# vim /etc/profile
[root@workstation Desktop]# source /etc/profile 【source命令通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录。】
[root@workstation Desktop]# umask
0077
6.系统中的特殊权限
【1】.sticky(粘制位)
- 作用
只针对目录生效,当一个目录上有sticky权限时,在这个目录中的文件只能被文件的所有者删除 - 设定方式(特殊权限 o+t 效果等同于1原文件)
chmod o+t dir
chmod 1xxx dir
【命令】
watch -n 1 ls -l /mnt/ 【监控命令】
[root@workstation mnt]# cd /mnt/
[root@workstation mnt]# ls
westos
[root@workstation mnt]# chmod 777 /mnt/westos 【给满权限,第一遍操作试一下A用户可不可以删除B用户建立的文件,此时的结果是满权限下可以删除】
[root@workstation mnt]# chmod 1777 /mnt/westos/ 【o+t限制权限,操作验证A用户不可以删除B用户建立的文件】
[root@workstation mnt]# su student 【没加 - 就没有变环境】
(process:20759): dconf-CRITICAL **: 00:48:36.215: unable to create directory '/run/user/0/dconf': Permission denied. dconf will not work properly.
(process:20759): dconf-CRITICAL **: 00:48:36.215: unable to create directory '/run/user/0/dconf': Permission denied. dconf will not work properly.
(process:20759): dconf-WARNING **: 00:48:36.221: failed to commit changes to dconf: Could not connect: Permission denied
[student@workstation Desktop]$ exit
exit
[root@workstation mnt]# su - student 【切换成student用户】
[student@workstation mnt]$ cd westos
[student@workstation westos]$ touch studentfile 【student用户建立了一个文件】
[student@workstation westos]$ exit
exit
[root@workstation mnt]# su - westos 【切换到weatos用户,此时还不存在此用户】
su: user westos does not exist
[root@workstation mnt]# useradd westos 【创建westos用户】
[root@workstation mnt]# su - westos 【切换到westos用户】
[westos@workstation ~]$ cd /mnt/westos
[westos@workstation westos]$ touch westosfile 【建立文件】
[westos@workstation westos]$ rm -fr westosfile 【可删除自己建立的文件】
[westos@workstation westos]$ rm -fr studentfile
rm: cannot remove 'studentfile': Operation not permitted 【westos用户可删除自己建立的文件,但是在chmod 1777 westos下不可以删除student用户建立的文件】>>>【验证了设置权限下,A用户不可以删除B用户建立的文件,在这个目录中的文件只能被文件的所有者删除】
【2】sgid(强制位)
- 作用
对文件而言:只针对于二进制可执行文件,当文件上有sgid时任何人执行此文件产成的进程都属于文件的组
对目录而言:当目录上有sgid权限时,任何人在此目录中建立的文件都属于目录的所有组
简而言之:我做出来的东西应该是属于小米公司的,当我创建文件或者目录时此时文件拥有者和拥有组都是我,但是此时必须将组的身份换为公司,才符合实际。因此需要对其进行设置来把新创建的文件的组变成原来目录所在组 - 设定方式(g+s 与2777作用相同)
chmod g+s file|dir
chmod 2xxx file|dir
g+s 与2777相同
【命令】
[root@workstation mnt]# chmod 2777 westos 【设置特色工业权限】
[root@workstation mnt]# su - student
Last login: Thu Jan 9 01:38:01 EST 2020 on pts/2
[student@workstation ~]$ cd /mnt/westos
[student@workstation westos]$ touch file1
[student@workstation westos]$ cd ..
[student@workstation mnt]$ mkdir haha
[student@workstation mnt]$ cd haha
[student@workstation haha]$ touch redhat1
[student@workstation haha]$ chmod 2777 /mnt/haha
[student@workstation haha]$ exit
logout
[root@workstation mnt]# touch redhat5 /mnt/haha
[root@workstation mnt]# rm -f redhat5
[root@workstation mnt]# su - westos
Last login: Thu Jan 9 00:51:44 EST 2020 on pts/2
[westos@workstation ~]$ cd /mnt/haha
[westos@workstation haha]$ touch file5
【监测命令】
watch -n 1 ls -Rl /mnt
/mnt:
total 0
drwxrwsrwx. 2 student student 34 Jan 9 01:48 haha
drwxrwsrwx. 2 root root 50 Jan 9 01:40 westos
/mnt/haha:
total 0
-rw-rw-r--. 1 westos student 0 Jan 9 01:48 file5 【又做了一个,student下设置权限,让westos所建立的用户属于haha目录的原组student】
-rw-rw-r--. 1 student student 0 Jan 9 01:46 redhat1
/mnt/westos:
total 0
-rw-rw-r--. 1 student student 0 Jan 9 01:38 file
-rw-rw-r--. 1 student root 0 Jan 9 01:40 file1 【student创建的文件,但是在特殊权限设置下继承了root的组】
-rw-rw-r--. 1 student student 0 Jan 9 00:49 studentfile
【3】suid(冒险位)
-
作用
只针对与2进制可执行文件。当文件上有suid时,任何人执行这个文件中记的程序所产生的进程都属于文件的所有人 -
设定方式
chmod u+s file
chmod 4xxx file
【命令】
[root@workstation mnt]# ls -l /bin/cat
-rwxr-xr-x. 1 root root 51856 Jan 11 2019 /bin/cat
[root@workstation mnt]# cat
^C
[root@workstation mnt]# chmod 2777 /bin/cat
[root@workstation mnt]# su - student
Last login: Thu Jan 9 01:39:24 EST 2020 on pts/2
[student@workstation ~]$ cat
^C
[student@workstation ~]$ exit
logout
[root@workstation mnt]# chmod u+s /bin/cat
[root@workstation mnt]# su - student
Last login: Thu Jan 9 02:05:19 EST 2020 on pts/1
[student@workstation ~]$ cat
^C
[student@workstation ~]$ exit
logout
[root@workstation mnt]# chmod 777 /bin/cat
[root@workstation mnt]# su - student
Last login: Thu Jan 9 02:06:23 EST 2020 on pts/1
[student@workstation ~]$ cat
7.ACL权限列表
【1】facl 概述及注意事项
- 传统的权限仅有三种身份 (owner,group,othe)搭配三种权限 (r,w,x),
并没有办法单纯的针对某一个使用者或某一个群组来设置特定的权限需求 , 此时就得要使用 ACL( 文件访问控制列表 ,Access
Control List) 这个机制。 - ==注意:==因此目前 ACL 几乎已经默认加入在所有常见的 Linux 文件系统的挂载参数中ext2/ext3/ext4/xfs 等等 ), 但 rhel6.0以及之前的版本默认不支持 acl 的功能。
【2】acl列表查看
getfacl file | 查看acl开启的文件的权限 |
---|---|
# file: file | 文件名称 |
# owner: root | 文件拥有者 |
# group: root | 文件拥有组 |
user::rw- | 文件拥有人的权限 |
user:kiosk:rwx | 指定用户的权限 |
group::r– | 文件拥有组的权力 |
mask::rwx | 能赋予用户的最大权力伐值 |
other::r– | 其他人的权限 |
【3】acl列表的管理
getfacl file
setfacl -m u:username:rwx file | 设定username对file拥有rwx权限 |
---|---|
setfacl -m g:group:rwx file | 设定group组成员对file拥有rwx权限 |
setfacl -x u:username file | 从acl列表中删除usernam |
setfacl -b file | 关闭file上的acl列表 |
来源:CSDN
作者:ly_qiu
链接:https://blog.csdn.net/ly_qiu/article/details/103943055