权限管理

权限管理

文章目录

  • 权限管理
    • 权限简介
    • 权限管理命令
        • 修改权限的命令chmod
        • 修改文件属主和属组的命令chown
    • 遮罩码
    • Linux安全上下文与特殊权限
        • Linux安全上下文
        • 特殊权限
    • 文件系通访问控制列表facl
    • sudo
    • 管理命令

权限简介

1.文件的权限主要针对三类对象进行定义:

  • owner:属主,u
  • group:属组,g
  • other:其它,o

我们可以把owner 当成小明,group当成小明他家里人,other当成隔壁老王

2.每个文件针对每个访问者都定义了三种权限:

权限 对应的操作对象 权限说明
r 文件 可读,可以使用类似cat等命令查看文件内容
w 文件 可写,可以编辑或删除此文件
x 文件 可执行,eXacutable,可以在命令提示符下当作命令提交给内核运行
r 目录 可以对此目录执行ls以列出内部的所有文件
w 目录 可以在此目录中创建文件,也可删除此目录中的文件
x 目录 可以使用cd切换进此目录,也可以使用ls -l查看内部文件的详细信息

3.权限的八进制与十进制转换:

|权限|八进制|十进制|
|—|000|0|
|–x|001|1|
|-w-|010|2|
|-wx|011|3|
|r–|100|4|
|r-x|101|5|
|rw-|110|6|
|rwx|111|7|

权限管理命令

修改权限的命令chmod

-R 递归修改权限

[root@MR tmp]# ls
123  abc  qqq  shadow
[root@MR tmp]# ls -l abc
总用量 0
-rw-r--r--. 1 root root 0 3月  27 09:54 123
-rw-r--r--. 1 root root 0 3月  27 09:54 3445
-rw-r--r--. 1 root root 0 3月  27 09:55 efsf
[root@MR tmp]# chmod -R 666 abc
[root@MR tmp]# ls -l abc
总用量 0
-rw-rw-rw-. 1 root root 0 3月  27 09:54 123
-rw-rw-rw-. 1 root root 0 3月  27 09:54 3445
-rw-rw-rw-. 1 root root 0 3月  27 09:55 efsf

修改文件属主和属组的命令chown

-R 修改目录及其内部文件的属主(中间用冒号或者逗号隔开)

[root@MR tmp]# ls -l abc
总用量 0
-rw-rw-rw-. 1 root root 0 3月  27 09:54 123
-rw-rw-rw-. 1 root root 0 3月  27 09:54 3445
-rw-rw-rw-. 1 root root 0 3月  27 09:55 efsf
[root@MR tmp]# chown -R zhou:zhou abc
[root@MR tmp]# ls -l abc
总用量 0
-rw-rw-rw-. 1 zhou zhou 0 3月  27 09:54 123
-rw-rw-rw-. 1 zhou zhou 0 3月  27 09:54 3445
-rw-rw-rw-. 1 zhou zhou 0 3月  27 09:55 efsf

遮罩码

为什么文件创建以后默认权限是644?
为什么目录创建以后默认权限是755?

这是由遮罩码umask来控制的。

[root@MR ~]# cat /usr/bin/umask
#!/bin/sh
builtin umask "$@"

从名字就能看出来,遮罩码umask是用来隐藏一些权限的。举例:如果你不想让人家认出你,你会怎么办?

[root@zhoulijie ~]# umask
0022

文件最终的权限为:

  • 666-umask

目录最终的权限为:

  • 777-umask

文件默认是不能具有执行权限的,如果算得的结果有执行权限则将其权限整体加1

Linux安全上下文与特殊权限

Linux安全上下文

前提:进程有属主和属组;文件有属主和属组

  • 任何一个可执行程序文件能不能启动为进程,取决于发起者对程序文件是否拥有可执行权限;
  • 启动为进程后,其进程的属主为发起者,属组为发起者所属的组
  • 进程访问文件时的权限取决于进程的发起者:
    • 进程的发起者是文件的属主时,则应用文件属主权限
    • 进程的发起者是文件的属组时,则应用文件属组权限
    • 应用文件“其它”权限

特殊权限

linux默认权限是根据linux安全上下文的方式来控制的,而特殊权限的存在打破了linux安全上下文的规则。

SUID(4)     //运行程序时,这个程序启动的进程的属主是程序文件自身的属主,而不是启动者为属主
    chmod u+s file
    chmod u-s file
    //如果file本身原来就有执行权限,则SUID显示为s,否则显示为S
    
SGID(2)     //运行程序时,这个程序启动的进程的属组是程序文件自身的属组,而不是启动者所属的基本组
    //默认情况下,用户创建文件时,其属组为此用户所属的基本组;
    //一旦某目录被设定了SGID,则对此目录有写权限的用户在此目录中创建的文件或目录,其所属的组 \
    //为此设定了SGID的目录的属组
    chmod g+s DIR
    chmod g-s DIR
    //如果file本身原来就有执行权限,则SGID显示为s,否则显示为S
    
Sticky(1)       //在一个公共目录,每个人都能创建文件,删除自己的文件,但是不能删除别人创建的文件
    chmod o+t DIR
    chmod o-t DIR
    //如果DIR本身原来就有执行权限,则Sticky显示为t,否则显示为T
    
4755    //有SUID,文件权限为755
2755    //有SGID,文件权限为755
1755    //有Sticky,文件权限为755
7755    //有SUID、SGID、Sticky,文件权限为755
//这里前面的4、2、1分别表示SUID、SGID、Sticky

文件系通访问控制列表facl

//语法:setfacl [-bkndRLP] { -m|-M|-x|-X ... } file ...
    -m      //设定
        u:UID:perm
        g:GID:perm
    //setfacl -m u:test:rw file
    //setfacl -m g:test:rw file
    //如果要为某个目录设定默认的访问控制列表,只需要设定时在u或g前面加上d即可。 如:\
    //setfacl -m du:test:rw file,此时在此目录中创建的文件均继承此访问控制列表所设置的权限
    -x      //取消
        u:UID
        g:GID
    //setfacl -x u:test file
    //setfacl -x g:test file
    -b      //Remove all
        
//语法:getfacl [-aceEsRLPtpndvh] file ...
//getfacl file


//文件权限应用次序:
//默认情况下:
    Owner --> Group --> Other
//有设置facl的情况下:
    Owner --> facl,user --> Group --> facl,group --> Other

sudo

sudo可以实现某个用户能够以另外哪一个用户的身份通过哪些主机执行什么命令

sudo的配置文件:/etc/sudoers

使用visudo命令进行sudo的配置,每一行就是一个sudo条目,条目格式如下:

  • who which_hosts=(runas) command
    • who:User_Alias,表示运行命令者的身份
    • which_hosts:Host_Alias,通过哪些主机
    • runas:Runas_Alias,以哪个用户的身份
    • command:Cmnd_Alias,运行哪些命令

别名必须全部而且只能使用大写英文字母的组合,可以使用感叹号取反

别名分类:

  • 用户别名:

    • User_Alias NETWORKADMIN =
      • 用户的用户名
      • 组名,使用%引导
      • 还可以其它已经定义的用户别名
  • 主机别名:

    • Host_Alias =
      • 主机名
      • IP地址
      • 网络地址
      • 其它主机别名
  • Runas别名:

    • Runas_Alias =
      • 用户名
      • %组名
      • 其它的Runas别名
  • 命令别名:

    • Cmnd_Alias =
      • 命令路径
      • 目录(此目录内的所有命令)
      • 其它已定义的命令别名
sudo命令语法:sudo [options] COMMAND
    -V      //显示版本编号
    -h      //会显示版本编号及指令的使用方式说明
    -l      //列出当前用户可以使用的所有sudo类命令
    -v      //因为sudo在第一次执行时或是在N分钟内没有执行(N默认为5)会问密码,这个参数 \
            //是重新做一次确认,如果超过N分钟,也会问密码
    -k      //让认证信息失效,如果不指定-k,默认认证信息在5分钟后失效
    -b      //将要执行的指令放在后台执行
    -u USERNAME     //以指定的用户名执行命令,默认为root

管理命令

w 显示当前登录到系统的用户有哪些,以及其正在做什么

[zhou@zhoulijie ~]$ w
 20:36:03 up 18 min,  2 users,  load average: 0.00, 0.01, 0.05
USER     TTY        LOGIN@   IDLE   JCPU   PCPU WHAT
root     tty1      20:18   17:47   0.02s  0.02s -bash
root     pts/0     20:18    3.00s  0.13s  0.04s w

sleep //睡眠

s:秒,默认
m:分
h:小时
d:天

last 显示/var/log/wtmp文件,显示用户登录历史及系统重启历史

[zhou@zhoulijie ~]$ last
root     pts/0        192.168.83.1     Mon Apr  8 20:18   still logged in
root     tty1                          Mon Apr  8 20:18   still logged in
reboot   system boot  3.10.0-123.el7.x Mon Apr  8 20:17 - 20:37  (00:19)
............................以下省略............................

​ -n # 显示最近#次的相关信息

[zhou@zhoulijie ~]$ last -n 2
root     pts/0        192.168.83.1     Mon Apr  8 20:18   still logged in
root     tty1                          Mon Apr  8 20:18   still logged in

wtmp begins Wed Mar  6 16:48:05 2019

lastb 显示/var/log/btmp文件,显示用户错误的登录尝试

[root@zhoulijie ~]# lastb
root     ssh:notty    192.168.83.1     Wed Mar 27 09:48 - 09:48  (00:00)
root     pts/0                         Wed Mar  6 17:16 - 17:16  (00:00)
root     tty1                          Wed Mar  6 16:48 - 16:48  (00:00)

btmp begins Wed Mar  6 16:48:38 2019

​ -n # 显示最近#次的相关信息

[root@zhoulijie ~]# lastb -n 2
root     ssh:notty    192.168.83.1     Wed Mar 27 09:48 - 09:48  (00:00)
root     pts/0                         Wed Mar  6 17:16 - 17:16  (00:00)

btmp begins Wed Mar  6 16:48:38 2019

lastlog 显示每个用户最近一次成功登录信息

[root@zhoulijie ~]# lastlog
用户名           端口     来自             最后登陆时间
root             pts/0                     一 4月  8 20:42:13 +0800 2019
bin                                        **从未登录过**
daemon                                     **从未登录过**
adm                                        **从未登录过**
lp                                         **从未登录过**
sync                                       **从未登录过**
shutdown                                   **从未登录过**
............................以下省略............................

-u username //显示特定用户最近的登录信息

[root@zhoulijie ~]# lastlog -u zhou
用户名           端口     来自             最后登陆时间
zhou             pts/0                     一 4月  8 20:28:24 +0800 2019

你可能感兴趣的:(Linux)