Linux权限管理
1. linux权限概述
1.1
linux系统一般将文件可存/取访问的身份分为3个类别:owner(拥有者)、group(和所有者同组的用户)、others(其他人,除了所有者,除了同组的用户以及除了超级管理员),且3种身份各有read(读)、write(写)、execute(执行)等权限。
owner:文件所有者,默认为文档的创建者;
group: 与文件按所有者同组的用户;
root用户:超级用户。
1.2 权限介绍
读权限(read):
对于目录来说,读权限影响用户是否能够列出目录结构
对于文件来说,读权限影响用户是否可以查看文件内容
写权限(write):
对目录来说,写权限影响用户是否可以在文件夹下“创建/删除/复制到/移动到”文档
对于文件来说,写权限影响用户是否可以编辑文件内容
执行权限(execute):
对于目录来说:执行权限影响用户是否可以执行cd操作
对于文件来说,特别脚本文件,执行权限影响文件是否可以运行。
文档权限属性:
标红部分为文档权限属性信息,权限均有r(read)、w(write0)、x(execute)
第一位:
- |
普通文件 |
l |
软连接 |
s |
套接字 |
c |
字符设备 |
b |
块状设备 |
d |
目录 |
第2-4位:woner;
第5-7位:group;
第8-10位:other。
1.3 权限设置
格式:chmod opion 权限 文档。
opion :常用 -R,文件夹或目录,递归设置权限;
权限 :
文档 :文档/文件夹/相对路径/绝对路径;
权限形式:
所有者 |
u |
owner(user) |
g |
group |
|
o |
other |
|
a |
all,默认为all |
|
权限字符 |
r |
读 |
w |
写 |
|
x |
执行 |
|
- |
没有权限 |
|
权限分配方式 |
+ |
给具体的用户新增权限 |
- |
删除用户的权限 |
|
= |
将权限设置为具体的值(赋值 |
|
数字形式 |
4 |
r |
2 |
w |
|
1 |
x |
|
0 |
- |
例子:
创建一个新用户zxj,并在zxj下创建test用作实验
[root@localhost ~]# useradd zxj [root@localhost ~]# su - zxj [zxj@localhost ~]$ touch test [zxj@localhost ~]$ ls test [zxj@localhost ~]$ ll total 0 -rw-rw-r--. 1 zxj zxj 0 apr 18 19:06 test
更改test的权限:
[zxj@localhost ~]$ chmod 777 test [zxj@localhost ~]$ ll total 0 -rwxrwxrwx. 1 zxj zxj 0 apr 18 19:06 test [zxj@localhost ~]$ chmod u-w,g-x test [zxj@localhost ~]$ ll total 0 -r-xrw-rwx. 1 zxj zxj 0 apr 18 19:06 test
若有多个,中间用逗号(,)隔开。
没有读权限,无法进行ls;没有执行权限,无法进行cd目录切换。
1.4 属主与属组
属主:文档所有者;
属组:所属的用户组。
红框内前面的root为属主,后面的root为属组;
属主、属组设置(更改属主属组)
chown命令:
格式:
chown 选项 属主:属组 filename
chown -R 属主: filename(把属主和属组都改了)
chown -R :属组 filename(只更改了属组)
chown -R 属主:属组 filename(把属主和属组都改了)
chown -R 属主 filename(只更改属主)
如:
[zxj@localhost ~]$ su Password: [root@localhost zxj]# ll total 0 -rwxrwxrwx. 1 zxj zxj 0 apr 18 19:06 test [root@localhost zxj]# chown root: test [root@localhost zxj]# ll total 0 -rwxrwxrwx. 1 root root 0 apr 18 19:06 test
几种形式:
三个用户 root zxj wrl
原属主属组 root zxj
wrl:root= wrl root
zxj =zxj test
wrl: =wrl wrl
:root=wrl root
1.5 文件的特殊权限
1) SUID(set uid):只能设置在二进制可执行程序上面(ls、cat、mkdir等)。对目录设置无效。
功能:程序运行时的权限从执行者变更成程序所有者的权限,如以下例子。
#在root用户下cat可以查看密码文件, 但是在普通用户下cat没有查看密码的权限,给cat赋予特殊权限,使其在普通用户下也能查看密码文件 [root@localhost ~]# cat /etc/shadow root:$6$grdW9yfalVHa0cgT$TjaPVp2ltzH8gs8cagoGCiNNb7nG0twlScxDZFvHZ9aKCMOl9e3h.aMGgRtgsgzg3Tp0U1wj59cgqV5kbSuQm0::0:99999:7::: ………… [root@localhost ~]# su zxj [zxj@localhost root]$ cat /etc/shadow cat: /etc/shadow: Permission denied [zxj@localhost root]$ su Password: [root@localhost ~]# chmod u+s `which cat #cat的owner相当于root [root@localhost ~]# ls -ld `which cat` -rwsr-xr-x. 1 root root 54080 Nov 6 2016 /usr/bin/cat [root@localhost ~]# su zxj [zxj@localhost root]$ cat /etc/shadow root:$6$grdW9yfalVHa0cgT$TjaPVp2ltzH8gs8cagoGCiNNb7nG0twlScxDZFvHZ9aKCMOl9e3h.aMGgRtgsgzg3Tp0U1wj59cgqV5kbSuQm0::0:99999:7::: ………..
2) SGID(set groupid):即可给二进制可执行程序设置(属组里面的用户),也可以给目录设置。
功能:在设置了SGID权限的目录下建立软件时,新创建的为文件的所属组会继承上级目录的权限。
[root@localhost ~]# mkdir /test1 #创建目录/test1做实验 [root@localhost ~]# ls -ld /test1 drwxr-xr-x. 2 root root 6 apr 17 05:26 /test1 [root@localhost ~]# chmod g+s /test1 [root@localhost ~]# chmod g+s /test1 #给特殊权限 [root@localhost ~]# ls -ld /test1 drwxr-sr-x. 2 root root 6 apr 17 05:26 /test1 [root@localhost ~]# chown :zxj /test1 #更改属组 [root@localhost ~]# ls -ld /test1 drwxr-sr-x. 2 root zxj 6 apr 17 05:26 /test1 [root@localhost ~]# touch /test1/1 #在/test1下创建文件1 [root@localhost ~]# ls -ld /test1/1 -rw-r--r--. 1 root zxj 0 apr 17 05:33 /test1/1 #文件1继承了/test1的权限
3)SBID:对于sbid权限的文件,用户只能删除自己创建的文件,无法删除其他用户的文件。
[root@zxj ~]# chmod o+t /tmp #给/tmp添加SBiD权限 [root@zxj ~]# useradd t1 [root@zxj ~]# useradd t2 [root@zxj ~]# su - t1 last login: Thu Mar 14 14:04:37 CST 2019 on pts/1 [t1@zxj ~]$ touch /tmp/t1 #用户t1在/tmp下创建文件1 [t1@zxj ~]$ exit logout [root@zxj ~]# su - t2 last login: Thu Mar 14 14:03:59 CST 2019 on pts/1 [t2@zxj ~]$ touch /tmp/t2 [t2@zxj ~]$ rm -rf /tmp/t1 #用户t2无法删除t1创建的文件 rm: cannot remove ‘/tmp/t1’: Operation not permitted
1.6 文件扩展权限ACL
ACL:access control list
setfacl:设置权限
getfacl:扩展权限
设置用户zxj对文件a.txt拥有的rwx权限 ,zxj不属于a.txt的所属主和组,zxj是other 设置扩展权限setfacl [root@zxj ~]# setfacl -m u :zxj:rwx a.txt #-m表示设置的意思 查看扩展权限getfacl [root@zxj ~]# getfacl a.txt # file: a.txt # owner: root # group: root user::rw- user:zxj:rwx group::r-- mask::rwx other::r— 去除权限 [root@zxj ~]# setfacl -R -m u:ken:rw- testdirectory/ #-R一定要在-m前面,表示目录下所有文件 [root@zxj ~]# setfacl -x u:ken /tmp/a.txt # 去掉单个权限 [root@zxj ~]# setfacl -b /tmp/a.txt # 去掉所有acl权限
1.7 sudo
就是让某些用户拥有某些命令的最高权限
格式:
visudo
zxj all=(all) all
用户 地址 root 命令
问题:reboot、shutdown、init、halt、user管理,在普通用户身份上都是操作不了,但是有些特殊的情况下又需要有执行权限。又不可能让root用户把自己的密码告诉普通用户,这个问题该怎么解决?
该问题是可以被解决的,可以使用sudo(switch user do)命令来进行权限设置。Sudo可以让管理员(root)事先定义某些特殊命令谁可以执行。
默认sudo中是没有除root之外用户的规则,要想使用则先配置sudo。
Sudo配置文件:/etc/sudoers
该文件默认只读,不允许修改,因此不能直接修改。
a. 配置sudo文件请使用“#visudo”,打开之后其使用方法和vim一致
b. 配置普通用户的权限
Root表示用户名,如果是用户组,则可以写成“%组名”
ALL:表示允许登录的主机(地址白名单)
(ALL):表示以谁的身份执行,all表示root身份
ALL:表示当前用户可以执行的命令,多个命令可以使用“,”分割
案例:创建zxj用户,zxj用户本身不能添加用户,要求使用sudo配置,将其设置为可以添加用户 root@zxj ~]# su - zxj last login: Wed Feb 27 22:34:04 CST 2019 on pts/0 [zxj@zxj ~]$ useradd test -bash: /usr/sbin/useradd: Permission denied 修改sudo文件
注意是绝对路径 在添加好对应的规则之后就可以切换用户,切换到普通用户zxj,再去执行: #sudo 需要执行的指令 [root@zxj ~]# su - zxj last login: Wed Feb 27 22:51:26 CST 2019 on pts/0 [zxj@zxj ~]$ useradd test #需要加上sudo -bash: /usr/sbin/useradd: Permission denied [zxj@zxj ~]$ sudo useradd test1
We trust you have received the usual lecture from the local System administrator. it usually boils down to these three things: #1) Respect the privacy of others. #2) Think before you type. #3) With great power comes great responsibility. [sudo] password for zxj:
在输入sudo指令之后需要输入当前的用户密码进行确认的操作(不是root用户密码),输入之后在接下来5分钟内再次执行sudo指令不需要密码。 |
1.8 UMASK:022
创建文本666-022=644(创建文本的默认权限)
创建目录777-022=755(创建目录的默认权限)