权限管理

1. 权限简介

文件的权限主要针对三类对象进行定义:
owner:属主,u
group:属组,g
other:其它,o

1.1 权限对文件的作用

r :读取文件内容(cat、more、head、tail)
w:编辑、新增、修改文件内容(vi、echo),但不包含删除文件 
x:可执行 
对文件来讲:最高权限是执行权限(x),所以文件要少赋予执行权限。

1.2 权限对目录的作用

r:可以查询目录下文件名(ls)。 
w: 具有修改目录结构的权限。如新建文件和目录,删除此目录下文件和目录,重命名此目录下文件和目录,剪切此目录下文件或目录。(touch、rm、mv、cp)。 
x:可以进入目录(cd)。 
对目录来讲:最高权限是写权限(w),所以目录要少赋予写权限。 
注:0没有任何权限,5(rx)可以查看和进入,7(rwx)拥有最高权限;1、4、6权限对目录没有意义

2. 权限管理命令

2.1 修改权限的命令chmod

修改三类用户的权限:

语法:chmod MODE file,...
-R      //递归修改权限
[lw@localhost ~]$ ll 
总用量 8
drwxr-xr-x. 2 lw   lwf 51 11 8 16:39 1
drwxr-xr-x. 2 lw   lwf  6 11 8 16:45 2
-rw-r--r--. 1 lw   lwf  4 11 9 10:58 a
-rw-r--r--. 1 root lwf  3 11 9 10:59 b
drwxr-xr-x. 2 lw   lwf 83 11 8 16:29 family
[lw@localhost ~]$ ll 1
总用量 0
-rw-r--r--. 1 lw lwf 0 11 8 16:38 2.c
-rw-r--r--. 1 lw lwf 0 11 8 16:38 3.c
-rw-r--r--. 1 lw lwf 0 11 8 16:39 4.c
-rw-r--r--. 1 lw lwf 0 11 8 16:39 item
[lw@localhost ~]$ chmod -R 777 1
[lw@localhost ~]$ ll 
总用量 8
drwxrwxrwx. 2 lw   lwf 51 11 8 16:39 1
drwxr-xr-x. 2 lw   lwf  6 11 8 16:45 2
-rw-r--r--. 1 lw   lwf  4 11 9 10:58 a
-rw-r--r--. 1 root lwf  3 11 9 10:59 b
drwxr-xr-x. 2 lw   lwf 83 11 8 16:29 family
[lw@localhost ~]$ ll 1
总用量 0
-rwxrwxrwx. 1 lw lwf 0 11 8 16:38 2.c
-rwxrwxrwx. 1 lw lwf 0 11 8 16:38 3.c
-rwxrwxrwx. 1 lw lwf 0 11 8 16:39 4.c
-rwxrwxrwx. 1 lw lwf 0 11 8 16:39 item

修改某类用户或某些类用户权限:

u,g,o,a(用户类别)
chmod 用户类别=MODE file,.....
chmod 用户类别=MODE,用户类别=MODE file,.....
[lw@localhost 1]$ ll
总用量 0
-rw-r--r--. 1 lw lwf 0 11 8 16:38 2.c
-rw-r--r--. 1 lw lwf 0 11 8 16:38 3.c
-rw-r--r--. 1 lw lwf 0 11 8 16:39 4.c
-rw-r--r--. 1 lw lwf 0 11 8 16:39 item
[lw@localhost 1]$ chmod u=rwx 2.c 
[lw@localhost 1]$ ll
总用量 0
-rwxr--r--. 1 lw lwf 0 11 8 16:38 2.c
-rw-r--r--. 1 lw lwf 0 11 8 16:38 3.c
-rw-r--r--. 1 lw lwf 0 11 8 16:39 4.c
-rw-r--r--. 1 lw lwf 0 11 8 16:39 item

修改某类的用户某位或某些位权限:

u,g,o,a(用户类别)
chmod 用户类别+|-MODE file,.....
chmod 用户类别+|-MODE,用户类别+|-MODE file,.....
chmod +|-MODE file,.....
[lw@localhost 1]$ ll
总用量 0
-rwxr--r--. 1 lw lwf 0 11 8 16:38 2.c
-rw-r--r--. 1 lw lwf 0 11 8 16:38 3.c
-rw-r--r--. 1 lw lwf 0 11 8 16:39 4.c
-rw-r--r--. 1 lw lwf 0 11 8 16:39 item
[lw@localhost 1]$ ll
总用量 0
-rwxr--r--. 1 lw lwf 0 11 8 16:38 2.c
-rw-rwxr--. 1 lw lwf 0 11 8 16:38 3.c
-rw-r--r--. 1 lw lwf 0 11 8 16:39 4.c
-rw-r--r--. 1 lw lwf 0 11 8 16:39 item

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

chown命令只有管理员可以使用。
chown USERNAME file,...
-R      //修改目录及其内部文件的属主
chown USERNAME:GROUPNAME file,...
chown USERNAME.GROUPNAME file,...
[root@localhost abc]# ll
总用量 8
drwxr-xr-x. 2 lw   lwf 51 11 8 16:39 1
drwxr-xr-x. 2 lw   lwf  6 11 8 16:45 2
drwxr-xr-x. 2 lw   lwf 16 11 9 15:05 3
-rw-r--r--. 1 lw   lwf  4 11 9 10:58 a
-rw-r--r--. 1 root lwf  3 11 9 10:59 b
drwxr-xr-x. 2 lw   lwf 83 11 8 16:29 family
[root@localhost abc]# ll 3
总用量 0
-rw-r--r--. 1 lw lwf 0 11 9 15:05 12
[root@localhost abc]# chown -R root.root 3
[root@localhost abc]# ll
总用量 8
drwxr-xr-x. 2 lw   lwf  51 11 8 16:39 1
drwxr-xr-x. 2 lw   lwf   6 11 8 16:45 2
drwxr-xr-x. 2 root root 16 11 9 15:05 3
-rw-r--r--. 1 lw   lwf   4 11 9 10:58 a
-rw-r--r--. 1 root lwf   3 11 9 10:59 b
drwxr-xr-x. 2 lw   lwf  83 11 8 16:29 family
[root@localhost abc]# ll 3
总用量 0
-rw-r--r--. 1 root root 0 11 9 15:05 12

2.3 修改文件的属组命令chgrp

语法:chgrp [OPTION]... GROUP FILE...
-R      //递归修改
[root@localhost abc]# ll
总用量 8
drwxr-xr-x. 2 lw   lwf  51 11 8 16:39 1
drwxr-xr-x. 2 lw   lwf   6 11 8 16:45 2
drwxr-xr-x. 2 root root 16 11 9 15:05 3
-rw-r--r--. 1 lw   lwf   4 11 9 10:58 a
-rw-r--r--. 1 root lwf   3 11 9 10:59 b
drwxr-xr-x. 2 lw   lwf  83 11 8 16:29 family
[root@localhost abc]# ll 3
总用量 0
-rw-r--r--. 1 root root 0 11 9 15:05 12
[root@localhost abc]# chgrp -R lwf 3
[root@localhost abc]# ll 
总用量 8
drwxr-xr-x. 2 lw   lwf 51 11 8 16:39 1
drwxr-xr-x. 2 lw   lwf  6 11 8 16:45 2
drwxr-xr-x. 2 root lwf 16 11 9 15:05 3
-rw-r--r--. 1 lw   lwf  4 11 9 10:58 a
-rw-r--r--. 1 root lwf  3 11 9 10:59 b
drwxr-xr-x. 2 lw   lwf 83 11 8 16:29 family
[root@localhost abc]# ll 3
总用量 0
-rw-r--r--. 1 root lwf 0 11 9 15:05 12
[root@localhost abc]# 

3. 遮罩码

为什么文件创建以后默认权限是644?
为什么目录创建以后默认权限是755?
这是由遮罩码umask来控制的。
从名字就能看出来,遮罩码umask是用来隐藏一些权限的。举例:如果你不想让人家认出你,你会怎么办?

文件最终的权限为:

  • 666-umask

目录最终的权限为:

  • 777-umask

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

[root@localhost 3]# umask 
0022
[root@localhost 3]# touch 1
[root@localhost 3]# ll
总用量 0
-rw-r--r--. 1 root root 0 11 9 15:10 1
-rw-r--r--. 1 root lwf  0 11 9 15:05 12
[root@localhost 3]# umask 0017
[root@localhost 3]# touch 3
[root@localhost 3]# ll
总用量 0
-rw-r--r--. 1 root root 0 11 9 15:10 1
-rw-r--r--. 1 root lwf  0 11 9 15:05 12
-rw-r--r--. 1 root root 0 11 9 15:10 2
-rw-rw----. 1 root root 0 11 9 15:11 3

4. linux安全上下文与特殊权限

4.1 linux安全上下文

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

任何一个可执行程序文件能不能启动为进程,取决于发起者对程序文件是否拥有可执行权限;

启动为进程后,其进程的属主为发起者,属组为发起者所属的组

进程访问文件时的权限取决于进程的发起者:

  • 进程的发起者是文件的属主时,则应用文件属主权限
  • 进程的发起者是文件的属组时,则应用文件属组权限
  • 应用文件“其它”权限

4.2 特殊权限

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

SUID(4)     //运行程序时,这个程序启动的进程的属主是程序文件自身的属主,而不是启动者为属主
chmod u+s file
chmod u-s file
//如果file本身原来就有执行权限,则SUID显示为s,否则显示为S
[lw@localhost ~]$ vim a
[lw@localhost ~]$ ll
总用量 4
drwxr-xr-x. 2 lw   lwf 51 11 8 16:39 1
drwxr-xr-x. 2 root lwf 43 11 9 15:11 3
-rw-r--r--. 1 lw   lwf  4 11 9 15:21 a
drwxr-xr-x. 2 lw   lwf 83 11 8 16:29 family

[root@localhost 3]# ll /usr/bin/vim
-rwxr-xr-x. 1 root root 2294256 4 11 2018 /usr/bin/vim
[root@localhost 3]# chmod u+s /usr/bin/vim
[root@localhost 3]# ll /usr/bin/vim
-rwsr-xr-x. 1 root root 2294256 4 11 2018 /usr/bin/vim

[lw@localhost ~]$ vim b
[lw@localhost ~]$ ll
总用量 8
drwxr-xr-x. 2 lw   lwf 51 11 8 16:39 1
drwxr-xr-x. 2 root lwf 43 11 9 15:11 3
-rw-r--r--. 1 lw   lwf  4 11 9 15:21 a
-rw-r--r--. 1 root lwf  8 11 9 15:23 b
drwxr-xr-x. 2 lw   lwf 83 11 8 16:29 family

[root@localhost 3]# ps -ef |grep /home/abc/b
root       4247   1493  0 15:24 pts/0    00:00:00 grep --color=auto /home/abc/b
SGID(2)     //运行程序时,这个程序启动的进程的属组是程序文件自身的属组,而不是启动者所属的基本组默认情况下,用户创建文件时,其属组为此用户所属的基本组;一旦某目录被设定了SGID,则对此目录有写权限的用户在此目录中创建的文件或目录,其所属的组,为此设定了SGID的目录的属组
chmod g+s DIR
chmod g-s DIR
//如果file本身原来就有执行权限,则SGID显示为s,否则显示为S
[root@localhost abc]# chmod g+sx 2
[root@localhost abc]# chmod o+rwx 2
[root@localhost abc]# ll
总用量 0
drwxr-xr-x. 2 lw   lwf  51 11 8 16:39 1
drwxrwsrwx. 2 root root  6 11 9 15:31 2
drwxr-xr-x. 2 lw   lwf  83 11 8 16:29 family

[lw@localhost 2]$ touch 111
[lw@localhost 2]$ ll
总用量 0
-rw-r--r--. 1 lw root 0 11 9 15:33 111

[root@localhost abc]# chmod g-s 2
[root@localhost abc]# ll
总用量 0
drwxr-xr-x. 2 lw   lwf  51 11 8 16:39 1
drwxrwxrwx. 2 root root 17 11 9 15:33 2
drwxr-xr-x. 2 lw   lwf  83 11 8 16:29 family

[lw@localhost 2]$ touch 3
[lw@localhost 2]$ ll
总用量 0
-rw-r--r--. 1 lw root 0 11 9 15:33 111
-rw-r--r--. 1 lw lwf  0 11 9 15:35 3
Sticky(1)       //在一个公共目录,每个人都能创建文件,删除自己的文件,但是不能删除别人创建的文件
chmod o+t DIR
chmod o-t DIR
//如果DIR本身原来就有执行权限,则Sticky显示为t,否则显示为T
[root@localhost opt]# mkdir abc
[root@localhost opt]# ll
总用量 0
drwxrw----. 2 root root 6 11 9 15:40 abc
[root@localhost opt]# chmod 777 abc/
[root@localhost opt]# ll
总用量 0
drwxrwxrwx. 2 root root 6 11 9 15:40 abc
[root@localhost opt]# touch abc/a
[root@localhost opt]# touch 1

[lw@localhost ~]$ cd /opt
[lw@localhost opt]$ cd abc/
[lw@localhost abc]$ touch b
[lw@localhost abc]$ ll
总用量 0
-rw-rw----. 1 root root 0 11 9 15:41 a
-rw-r--r--. 1 lw   lwf  0 11 9 15:41 b
[lw@localhost abc]$ touch 2

[root@localhost abc]# ll
总用量 0
-rw-rw----. 1 root root 0 11 9 15:42 1
-rw-r--r--. 1 lw   lwf  0 11 9 15:41 2
-rw-rw----. 1 root root 0 11 9 15:41 a
-rw-r--r--. 1 lw   lwf  0 11 9 15:41 b
[root@localhost abc]# su - lww
[lww@localhost ~]$ cd /opt/abc/
[lww@localhost abc]$ touch c 3
[lww@localhost abc]$ ll
总用量 0
-rw-rw----. 1 root root 0 11 9 15:42 1
-rw-r--r--. 1 lw   lwf  0 11 9 15:41 2
-rw-rw-r--. 1 lww  lww  0 11 9 15:42 3
-rw-rw----. 1 root root 0 11 9 15:41 a
-rw-r--r--. 1 lw   lwf  0 11 9 15:41 b
-rw-rw-r--. 1 lww  lww  0 11 9 15:42 c
[lww@localhost abc]$ rm -f 1 2 3
[lww@localhost abc]$ ll
总用量 0
-rw-rw----. 1 root root 0 11 9 15:41 a
-rw-r--r--. 1 lw   lwf  0 11 9 15:41 b
-rw-rw-r--. 1 lww  lww  0 11 9 15:42 c

[root@localhost abc]# chmod o+t /opt/abc/
[root@localhost abc]# ll /opt/
总用量 0
-rw-rw----. 1 root root  0 11 9 15:41 1
drwxrwxrwt. 2 root root 33 11 9 15:45 abc

[lw@localhost abc]$ ll
总用量 0
-rw-rw----. 1 root root 0 11 9 15:41 a
-rw-r--r--. 1 lw   lwf  0 11 9 15:41 b
-rw-rw-r--. 1 lww  lww  0 11 9 15:42 c
[lw@localhost abc]$ rm -rf a b c 
rm: 无法删除"a": 不允许的操作
rm: 无法删除"c": 不允许的操作
[lw@localhost abc]$ ll
总用量 0
-rw-rw----. 1 root root 0 11 9 15:41 a
-rw-rw-r--. 1 lww  lww  0 11 9 15:42 c


5. 文件系统访问控制列表facl

facl(Filesystem Access Control List),利用文件扩展保存额外的访问控制权限。
语法:setfacl [-bkndRLP] { -m|-M|-x|-X ... } file ...
-m      //设定
    u:UID:perm
    g:GID:perm
//如果要为某个目录设定默认的访问控制列表,只需要设定时在u或g前面加上d即可。
[lw@localhost opt]$ cd abc/
-bash: cd: abc/: 权限不够

[root@localhost opt]# setfacl -m u:lw:rx /opt/abc/
[root@localhost opt]# getfacl /opt/abc/
getfacl: Removing leading '/' from absolute path names
# file: opt/abc/
# owner: root
# group: root
user::rwx
user:lw:r-x
group::---
mask::r-x
other::---

[lw@localhost opt]$ ll
总用量 0
-rw-rw----. 1 root root  0 119 15:41 1
drwxr-x---+ 2 root root 24 119 15:47 abc
[lw@localhost opt]$ cd abc/
[lw@localhost abc]$ ll
总用量 0
-rw-rw----. 1 root root 0 119 15:41 a
-rw-rw-r--. 1 lww  lww  0 119 15:42 c
-x      //取消
    u:UID
    g:GID
[root@localhost opt]# setfacl -x u:lw /opt/abc/
[root@localhost opt]# getfacl /opt/abc/
getfacl: Removing leading '/' from absolute path names
# file: opt/abc/
# owner: root
# group: root
user::rwx
group::---
mask::---
other::---

[lw@localhost opt]$ cd abc/
-bash: cd: abc/: 权限不够
-b      //Remove all
    
语法:getfacl [-aceEsRLPtpndvh] file ...

文件权限应用次序:

默认情况下:
Owner --> Group --> Other
有设置facl的情况下:
Owner --> facl,user --> Group --> facl,group --> Other

6. 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,运行哪些命令

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

 lw ALL=(root) NOPASSWD:/usr/sbin/useradd,PASSWD:/usr/sbin/userdel

[lw@localhost opt]$ sudo useradd first
[lw@localhost opt]$ id first
uid=1001(first) gid=1002(first) 组=1002(first)
[lw@localhost opt]$ sudo userdel -r first
[sudo] lw 的密码:

别名分类:

  1. 用户别名:

    User_Alias NETWORKADMIN =

  • 用户的用户名
  • 组名,使用%引导
  • 还可以其它已经定义的用户别名
  1. 主机别名:
  • Host_Alias =
  • 主机名
  • IP地址
  • 网络地址
  • 其它主机别名
  1. Runas别名

Runas_Alias =

  • 用户名
  • %组名
  • 其它的Runas别名
  1. 命令别名:

Cmnd_Alias =

  • 命令路径
  • 目录(此目录内的所有命令)
  • 其它已定义的命令别名

sudo命令语法:sudo [options] COMMAND

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

7. 管理命令

w   //显示当前登录到系统的用户有哪些,以及其正在做什么
[lw@localhost opt]$ w
 16:52:20 up 16:43,  3 users,  load average: 0.00, 0.01, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     tty1                      五08    8:19m  0.03s  0.03s -bash
root     pts/0    192.168.111.1    14:36    1:08   1.30s  1.30s -bash
lw       pts/1    192.168.111.1    14:36    4.00s  0.34s  0.02s w
sleep   //睡眠,写脚本为防止上一个命令没执行完下一命令就开始执行时可以加上sleep #,表示停顿#秒后再执行后面的命令 
sleep NUMBER[SUFFIX]...
    SUFFIX:
        s:秒,默认
        m:分
        h:小时
        d:天
[root@localhost opt]# sleep 20;touch b;ll
总用量 4
-rw-r--r--. 1 root root 4003 11 12 16:44 \
-rw-rw----. 1 root root    0 11 9 15:41 1
-rw-r--r--. 1 root root    0 11 12 16:54 a
drwx------+ 2 root root   24 11 9 15:47 abc
-rw-r--r--. 1 root root    0 11 12 16:55 b
last    //显示/var/log/wtmp文件,显示用户登录历史及系统重启历史                
-n #        //显示最近#次的相关信息
[root@localhost opt]# last -5
lw       pts/1        192.168.111.1    Mon Nov 12 14:36   still logged in   
root     pts/0        192.168.111.1    Mon Nov 12 14:36   still logged in   
lw       pts/1        192.168.111.1    Mon Nov 12 08:35 - 13:49  (05:13)    
root     pts/0        192.168.111.1    Mon Nov 12 08:34 - 13:49  (05:14)    
root     pts/0        192.168.111.1    Fri Nov  9 16:17 - 17:15  (00:58)    

wtmp begins Thu Nov  8 18:12:14 2018
lastb   //显示/var/log/btmp文件,显示用户错误的登录尝试                
-n #        //显示最近#次的相关信息
[root@localhost opt]# lastb -5
root     tty1                          Fri Nov  9 08:28 - 08:28  (00:00)    
root     tty1                          Thu Nov  8 11:05 - 11:05  (00:00)    
root     tty1                          Thu Nov  8 11:00 - 11:00  (00:00)    
root     tty1                          Thu Nov  8 10:55 - 10:55  (00:00)    
root     tty1                          Thu Nov  8 10:54 - 10:54  (00:00)    

btmp begins Thu Nov  8 18:13:48 2018
lastlog //显示每个用户最近一次成功登录信息    
-u username     //显示特定用户最近的登录信息
[root@localhost opt]# lastlog -u lw
用户名           端口     来自             最后登陆时间
lw               pts/1    192.168.111.1    1112 14:36:57 +0800 2018
basename    
//显示路径基名
[root@localhost opt]# basename /home/abc/1/2.c 
2.c
dirname         
//显示路径过程
[root@localhost opt]# dirname /home/abc/1/2.c 
/home/abc/1
posted on 2018-11-13 09:08  囧架架  阅读(200)  评论(0)    收藏  举报