Linux-权限管理

基本权限

Linux文件系统的基本权限有四个标识:r(readable)w(writable)x(executable)以及-(none)


# 查看/etc目录的权限
[root@wqh06 ~]# ll -d /etc 
drwxr-xr-x. 76 root root 8192 Apr  4 10:46 /etc

# 分解第一列字符
  d        rwx                r-x                r-x                      .
# 目录     属主权限位(U)       属组权限位(G)       其他用户权限位(O)         与selinux有关
# U,G,O 即 User,Group,Other
# 最后的一个 `.` ,如果selinux开机自启,那么创建的文件都会有此后缀,想消除需要彻底关闭selinux(/etc/selinux/config)

字母 含义 对应八进制(octal)权限
r(read) 读取权限 100(4)
w(write) 写入权限 010(2)
x(execute) 执行权限 001(1)
-(没有权限) 没有权限 000(0)

修改基本权限

基本权限是针对属主、属组、其他用户修改的,修改方式如下。

# ugo方式
chmod   //修改文件目录权限rwx  -R 递归修改

[root@wqh06 ~]# touch file
[root@wqh06 ~]# chmod a=rwx file
[root@wqh06 ~]# chmod a+rwx file
[root@wqh06 ~]# ll file
-rwxrwxrwx 1 root root 0 Mar 20 21:19 file

[root@wqh06 ~]# chmod a=-rwx file
[root@wqh06 ~]# chmod a-rwx file
[root@wqh06 ~]# ll file
---------- 1 root root 0 Mar 20 21:19 file

[root@wqh06 ~]# chmod u+rw,g+r,o+rx file
[root@wqh06 ~]# ll file
-rwxrwxrwx 1 root root 0 Mar 20 21:19 file
[root@wqh06 ~]# chmod u=rwx,g=rw,o=rx file
[root@wqh06 ~]# ll file
-rwxrw-r-x 1 root root 0 Mar 20 21:19 file
# number方式
mkdir dir       //建立目录
touch dir/file  //建立文件

# 用八进制数赋予权限
chmod 777 dir/   //修改dir目录权限为777
chmod u+rwx,g+rwx,o+rwx 
chmod 666 dir/file     //修改file文件权限为666
chmod u+rw,g+rw,o+rw 

# -R递归
chmod -R 766 dir/  //修改目录及子目录权限

rwx权限对文件的影响

r:文件可以读取内容,不能写,不能执行,可以cat,less
w:文件可以写入内容,但是追加只能>>,不能vim,因为不能读取内容,所以不能修改文件内容,只能覆盖
x:啥也不能干,因为没有读权限。所以无法执行文件中的内容(代码逻辑)
rw:可读,可写,不能执行
rx:可读,可执行,不能写
rwx:可读,可写,可执行

注意:文件的rwx权限,只能针对文件内容,如果想要删除,或者移动,那么跟文件所在目录的权限有关
# 可以把目录想成一个文件,不过这个文件存放的是目录内的文件元数据

rwx权限对目录的影响

r:可以查看目录下所有的文件名,但是看不见文件的详细信息(元数据)
rx:加上x权限,就可以看见文件的详细信息(元数据)      # 目录权限中最常见的
wx:可以创建,可以删除,不能查看
rw:可以查看目录下的文件,但是不能删除,不能移动,不能拷贝(和单独的r是一个效果)
rwx:删除文件,创建文件,移动文件,拷贝文件,查看
w:啥也不是,无法添加文件,无法删除文件(因为少了x)
x:啥也不是(但若知道目录下的一个具体文件名,可以cat文件内容)    

修改属主和属组

基本权限的设定,主要是针对属主和属组,然后是其他用户。对于一个文件或者目录拥有什么权限,
取决于你是谁(是这个文件/目录的属主、属组还是其他用户)。

属主属组修改命令chown
chown   # 更改属主以及属组     -R:递归修改

# 修改属主
chown user01 dir/      # 修改所属主为user01
ll -d dir/             # 检查属主
drwxr-xr-x 2 user01 root 4096 MAR 31 00:50 dir/


# 修改属组
chown .adm dir/         # 方法一:修改所属组为adm
chgrp adm dir/          # 方法二:修改所属组为adm
ll -d dir/              # 检查属组
drwxr-xr-x 2 bin adm 4096 MAR 31 00:50 dir/


# 修改属主和属组(一起修改)
chown root.root dir/        # 只修改此目录属主和属组为root
chown -R root.root dir/     # 递归修改目录及目录下的所有文件属主和属组为root

# 对于 -R 递归这个选项,chmod 有,chown 有,chgrp 也有,大家都有,才是真的有

特殊权限

SUID

引入一个例子,当我们在普通用户登录Linux系统的情况下修改自己的密码时,系统命令passwd做了什么?经过了什么流程?
我们知道所有用户信息、密码信息都保存在/etc/passwd/etc/shadow文件中,也就是普通用户使用passwd命令变更自身密码时,
要修改/etc/passwd/etc/shadow文件。
然而对于普通用户而言,我们是没有权限修改这两个文件的(属于其他用户,观察其他用户权限位):

那我们是怎么修改了自身的密码?并将信息更新到上面的两个文件中的呢?

我们再看看我们使用的passwd命令,找到原因:

观察这个文件的属主权限位!居然有一个s!
这就是特殊权限之一的s(SetUID),顾名思义,它出现在属主权限位, 一般对应的是可执行文件。
如果一个可执行文件在属主权限位上的x位有s(SetUID)权限
,那么任何用户(root不受影响)执行这个文件时,都会以该文件的属主的身份去执行。

# SUID授权
# chmod ugo方式
[root@wqh06 ~]# chmod u+s 文件或目录

# chmod number方式 4000
[root@wqh06 ~]# chmod 4755 abc
[root@wqh06 ~]# chmod 4000 abc

注意:当授权文件,原本属主位上有x权限时,是小写s,原本属主位上没有x权限时,是大写S

SGID

将目录权限位设置成SGID后,在其目录下继续创建文件时,其所属组(只有所属组)与该目录保持一致。
使用sgid可以使得多个用户之间共享一个目录的所有文件变得简单。主要目的即共享目录

# SGID授权
# chmod ugo方式
[root@wqh06 ~]# chmod g+s /tmp/test/

# chmod number方式 2000
[root@wqh06 ~]# chmod 2755 /tmp/test/
注意:当授权目录,原本属组位上有x权限时,是s,原本属组位上没有x权限时,是S

SBIT(Sticky Bit)

SBIT(Sticky Bit)翻译为粘滞位,目前只对目录有效。上面的SUID/SGID都是针对属主权限位、属组权限位的。
SBIT可想而知,是针对与其他用户权限位设置的。其他用户权限位的x位,变成了t,就是粘滞位。

设置粘滞位的目的是什么?
一句话,为了各个普通用户在此目录下,可以随意创建、修改、删除属于自己的文件,但不能够删除其他用户的文件。

一个目录其他用户权限位最常见的属性是r-x,如果我们想让其他用户(或者所有用户)都可以在这个目录下随意创建、修改、删除自己的文件(公共站点),
那么就需要将它的权限位设置成rwx,此时会出现一个问题,如果是rwx,那么任意一个普通用户都可以修改和删除其他人在这个目录(公共站点)的文件。
加了t后,除了root以外,其他每个普通用户只能在这个目录下创建、修改、删除自己的文件,不能删除其他用户(只针对用户,不针对组)的文件。

注意:如果在/tmp目录下,普通用户user01的文件,其他用户权限位是rwx,那么换一个普通用户user02还是可以任意修改的。

# SBIT授权
# chmod ugo方式
[root@wqh06 ~]# chmod o+t /opt

# chmod number方式 2000
[root@wqh06 ~]# chmod 1755 /opt
注意:当授权目录,原本其他用户权限位上有x权限时,是t,原本其他用户权限位上没有x权限时,是T

权限掩码umask

我们在创建一个文件/目录时,没有指定过它们的具体权限位,那系统是怎么分配权限位的呢?
由此引出权限掩码umask,在root用户下查看umask值为0022。

一般情况下,目录用0777减去它,文件用0666减去它,就能得到默认的目录/文件权限。
二般情况下,umask的值不是0022,是0023呢?
目录用0777减去它,权限位:0754
文件用0666减去它,权限位理应是0643,但文件的八进制权限位(后三位)不能有奇数,有奇数要+1,所以是0644

# umask为0022时
[root@wqh06 ~]# umask
0022

mkdir dir	 // 目录权限的计算
0777
0022
----
0755

touch file 	 // 文件权限的计算
0666
0022
----
0644

# umask为0033时
[root@wqh06 ~]# umask 0033
mkdir dir	 // 目录权限的计算 
0777
0033
----
0744
touch file 	 // 文件权限的计算
0666
0033
----
0644

# umask为0045时
[root@wqh06 ~]# umask 0045
mkdir dir	 // 目录权限的计算 
0777
0045
----
0732

mkdir dir	 // 文件权限的计算 
0666
0045
----
0622

# umask计算,当umask中出现奇数时:目录计算方式不变,但是奇数位的结果要+1

权限掩码umask的设置

实际上,umask的默认值并不一直是0022,这个umask的值是从/etc/profile中设置加载的。
如图所示,如果用户UID大于199,并且用户名组名相同,那么权限掩码是0002,否则是0022

验证:

posted @ 2020-04-04 12:43  拨云见日z  阅读(251)  评论(0编辑  收藏  举报