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

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(创建目录的默认权限)

posted @ 2019-04-02 14:28  Ajunyu  阅读(662)  评论(0编辑  收藏  举报