Linux-权限管理

Linux-权限管理

权限简介

文件的权限主要针对三类对象进行定义:
  • owner:属主,u
  • group:属组,g
  • other:其它,o
每个文件针对每个访问者都定义了三种权限:
权限 对应的操作对象 权限说明
r 文件 可读,可以使用类似cat等命令查看文件内容
w 文件 可写,可以编辑或删除此文件
x 文件 可执行,eXacutable,可以在命令提示符下 当作命令提交给内核运行
r 目录 可以对此目录执行ls以列出内部的所有文件
w 目录 可以在此目录中创建文件,也可删除此目录中的文件
x 目录 可以使用cd切换进此目录,也可以 使用ls -l查看内部文件的详细信息

权限管理命令

chmod 修改权限的命令

u/g/o=r/w/x 只赋予某某权限
[root@localhost ~]# ll
total 4
----------. 1 root root    0 Nov 11 18:41 abc
-rw-------. 1 root root 1188 Nov 11 18:06 anaconda-ks.cfg
[root@localhost ~]# chmod u=rw abc
[root@localhost ~]# ll
total 4
-rw-------. 1 root root    0 Nov 11 18:41 abc
-rw-------. 1 root root 1188 Nov 11 18:06 anaconda-ks.cfg
u/g/o+r/w/x 新加某某权限
[root@localhost ~]# chmod u+x abc
[root@localhost ~]# ll
total 4
-rwx------. 1 root root    0 Nov 11 18:41 abc
-rw-------. 1 root root 1188 Nov 11 18:06 anaconda-ks.cfg
u/g/o-r/w/x 去除某某权限
[root@localhost ~]# chmod u-wx abc
[root@localhost ~]# ll
total 4
-r--------. 1 root root    0 Nov 11 18:41 abc
-rw-------. 1 root root 1188 Nov 11 18:06 anaconda-ks.cfg

权限的二进制与十进制转换:

权限 二进制 十进制
--- 000 0
--x 001 1
-w- 010 2
-wx 011 3
r-- 100 4
r-x 101 5
rw- 110 6
rwx 111 7
[root@localhost ~]# chmod 700 abc
[root@localhost ~]# ll
total 4
-rwx------. 1 root root    0 Nov 11 18:41 abc
-rw-------. 1 root root 1188 Nov 11 18:06 anaconda-ks.cfg
[root@localhost ~]# chmod 777 abc
[root@localhost ~]# ll
total 4
-rwxrwxrwx. 1 root root    0 Nov 11 18:41 abc
-rw-------. 1 root root 1188 Nov 11 18:06 anaconda-ks.cfg

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

chown命令只有管理员可以使用

更该属主

[root@localhost ~]# ll
total 4
-rwx------. 1 root root    0 Nov 11 18:41 abc
-rw-------. 1 root root 1188 Nov 11 18:06 anaconda-ks.cfg
[root@localhost ~]# chown tom abc
[root@localhost ~]# ll
total 4
-rwx------. 1 tom  root    0 Nov 11 18:41 abc
-rw-------. 1 root root 1188 Nov 11 18:06 anaconda-ks.cfg

更改属组(“:”可换成".")

[root@localhost ~]# chown :yqh abc
[root@localhost ~]# ll
total 4
-rwx------. 1 tom  yqh     0 Nov 11 18:41 abc
-rw-------. 1 root root 1188 Nov 11 18:06 anaconda-ks.cfg

更改属主和属组

-R //修改目录及其内部文件的属主

[root@localhost ~]# chown -R yqh.tom abc
[root@localhost ~]# ll
total 4
-rwx------. 1 yqh  tom     0 Nov 11 18:41 abc
-rw-------. 1 root root 1188 Nov 11 18:06 anaconda-ks.cfg

遮罩码

文件创建以后默认权限是644

目录创建以后默认权限是755

是因为这是由遮罩码umask来控制的

[root@localhost ~]# umask
0022

文件的最大权限是666

目录的最大权限是777

所以文件最终的权限为:

  • 666-umask

目录最终的权限为:

  • 777-umask

更改遮罩码

[root@localhost opt]# touch 123
[root@localhost opt]# mkdir abc
[root@localhost opt]# ll
total 0
drwxr-xr-x. 2 root root 6 Nov 13 21:08 123
-rw-r--r--. 1 root root 0 Nov 13 21:08 abc
[root@localhost opt]# rm -f *
[root@localhost opt]# umask 033
[root@localhost opt]# touch 123
[root@localhost opt]# mkdir abc
[root@localhost opt]# ll
total 0
-rw-r--r--. 1 root root 0 Nov 13 21:34 123				//默认权限被改变
drwxr--r--. 2 root root 6 Nov 13 21:34 abc
文件默认是不能具有执行权限的,如果算得的结果有执行权限则将其权限整体加1

linux安全上下文与特殊权限

linux安全上下文

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

  • 任何一个可执行程序文件能不能启动为进程,取决于发起者对程序文件是否拥有可执行权限;
Tom账户:
[tom@localhost ~]$ cp /usr/bin/vi .
[tom@localhost ~]$ ls
vi
[tom@localhost ~]$ ll
total 1384
-rwxr-xr-x. 1 tom tom 1416744 Nov 14 13:03 vi
Root账户:
[root@localhost ~]# chown root.root /home/tom/vi 
[root@localhost ~]# chmod o-x /home/tom/vi
Tom账户:
[tom@localhost ~]$ ll
total 1384
-rwxr-xr--. 1 root root 1416744 Nov 14 13:03 vi
[tom@localhost ~]$ ./vi abc
-bash: ./vi: Permission denied
  • 启动为进程后,其进程的属主为发起者,属组为发起者所属的组

    ①:
    [root@localhost ~]# vi root
    ②:
    [tom@localhost ~]# vi tom
    ③:
    [root@localhost ~]# ps -ef |grep vi
    root        1018       1  0 12:47 ?        00:00:00 /usr/bin/VGAuthService -s
    tom         1775    1752  0 12:54 pts/2    00:00:00 vi tom
    root        1776    1707  0 12:54 pts/1    00:00:00 vi root
    root        1778    1664  0 12:54 pts/0    00:00:00 grep --color=auto vi
    
    //谁打开的就属于谁
  • 进程访问文件时的权限取决于进程的发起者:

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

特殊权限

linux默认权限是根据linux安全上下文的方式来控制的,而特殊权限的存在打破了linux安全上下文的规则,三种特殊权限应用的对象功能都不一样,SUID只能对程序文件进行设置,SGID和Sticky针对目录。

SUID:

默认情况是:程序文件的所有者是root,被tom启动后,是属于tom的。

设置了SUID后,无论是谁启动的,都是属于程序文件的所有者。

[root@localhost ~]# ll /usr/bin/vi
-rwxr-xr-x. 1 root root 1416744 Jul 23  2019 /usr/bin/vi
[root@localhost ~]# chmod 4755 /usr/bin/vi				//4代表SUID
[root@localhost ~]# ll /usr/bin/vi
-rwsr-xr-x. 1 root root 1416744 Jul 23  2019 /usr/bin/vi
[root@localhost ~]# chmod u-x /usr/bin/vi				//没有执行权限后是大写的S
[root@localhost ~]# ll /usr/bin/vi
-rwSr-xr-x. 1 root root 1416744 Jul 23  2019 /usr/bin/vi

SGID:

默认情况是:用户创建文件时,文件的基本组属于目录自身的基本组。

设置了SGID后,无论是谁创建的,基本组都是属于目录的所有者。

①:
[tom@localhost ~]$ mkdir abc
[tom@localhost ~]$ ll
total 1384
drwxrwxr-x. 2 tom  tom        6 Nov 14 14:20 abc
②:
[root@localhost ~]# cd /home/tom/abc/
[root@localhost abc]# touch 123
[root@localhost abc]# ll
total 0
-rw-r--r--. 1 root root 0 Nov 14 14:20 123
[root@localhost abc]# chmod g+s /home/tom/abc/		//也可以用2755,2表示SGID
[tom@localhost ~]$ ll /home/tom/					
total 1384
drwxrwsr-x. 2 tom  tom       28 Nov 14 14:21 abc
[root@localhost abc]# touch 123
[root@localhost abc]# ll
total 0
-rw-r--r--. 1 root root 0 Nov 14 14:21 123
[root@localhost abc]# touch 456
[root@localhost abc]# ll
total 0
-rw-r--r--. 1 root root 0 Nov 14 14:21 123
-rw-r--r--. 1 root tom  0 Nov 14 14:21 456			//设置SGID后基本组变成了tom

[root@localhost ~]# chmod g-x /home/tom/abc/			
[tom@localhost ~]$ ll /home/tom/					
total 1384
drwxrwSr-x. 2 tom  tom       28 Nov 14 14:21 abc	//没有执行权限后是大写的S

Sticky:

在一个公共目录,每个人都能创建文件,删除自己的文件,但是不能删除别人创建的文件(只针对普通用户,管理员无效)

①
[root@localhost opt]# mkdir abc
[root@localhost opt]# chmod 1777 abc				//1表示Sticky
[root@localhost opt]# ll
total 0
drwxrwxrwt. 2 root root 6 Nov 14 14:39 abc
[root@localhost opt]# cd abc/
[root@localhost abc]# touch 123
[root@localhost abc]# ll
total 0
-rw-r--r--. 1 root root 0 Nov 14 14:41 123
②
[tom@localhost ~]$ cd /opt/abc/
[tom@localhost abc]$ ll
total 0
-rw-r--r--. 1 root root 0 Nov 14 14:41 123
[tom@localhost abc]$ rm -rf 123
rm: cannot remove '123': Operation not permitted
[tom@localhost abc]$ touch 456
[tom@localhost abc]$ ll
total 0
-rw-r--r--. 1 root root 0 Nov 14 14:41 123
-rw-rw-r--. 1 tom  tom  0 Nov 14 14:42 456
[tom@localhost abc]$ rm -f 456
[tom@localhost abc]$ ll
total 0
-rw-r--r--. 1 root root 0 Nov 14 14:41 123

[root@localhost opt]# chmod o-x abc
[root@localhost opt]# ll
total 0
drwxrwxrwT. 2 root root 17 Nov 14 14:46 abc			//没有执行权限后是大写的T

文件系统访问控制列表facl

setfact

-m //设定(用户是用u,组是用g)
①:
[tom@localhost opt]$ ll
total 0
-rw-r--r--. 1 root root 0 Nov 14 14:54 root
[tom@localhost opt]$ echo 'I am Tom' >> root
-bash: root: Permission denied
[tom@localhost opt]$ cat root
hello world
②:
[root@localhost opt]# setfacl -m u:tom:rw root 	//指定用户tom文件root权限是可读可写
[root@localhost opt]# getfacl root			//getfacl查询文件权限
# file: root
# owner: root
# group: root
user::rw-
user:tom:rw-
group::r--
mask::rw-
other::r--
①:
[tom@localhost opt]$ echo 'I am Tom' >> root
[tom@localhost opt]$ cat root 
hello world
I am Tom
-x //取消
[root@localhost opt]# setfacl -x u:tom root
[root@localhost opt]# getfacl root
# file: root
# owner: root
# group: root
user::rw-
group::r--
mask::r--
other::r--
-b //清空
[root@localhost opt]# setfacl -m u:tom:rw root 
[root@localhost opt]# setfacl -m u:jerry:wx root 
[root@localhost opt]# getfacl root
# file: root
# owner: root
# group: root
user::rw-
user:tom:rw-
user:jerry:-wx
group::r--
mask::rwx
other::r--
[root@localhost opt]# setfacl -b root
[root@localhost opt]# getfacl root
# file: root
# owner: root
# group: root
user::rw-
group::r--
other::r--

权限委派,给用户一个指定权限

sudo //目录在/etc/sudoers

visudo

①
[tom@localhost ~]$ useradd zhangsan
useradd: Permission denied.
②
[root@localhost ~]# visudo
## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
tom     ALL=(ALL)       /usr/sbin/useradd	//tom账户在本机以任何人的身份执行useradd
:wq!
①
[tom@localhost ~]$ sudo useradd zhangsan

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 tom: 
[tom@localhost ~]$ id zhangsan
uid=1002(zhangsan) gid=1002(zhangsan) groups=1002(zhangsan)
②
[root@localhost ~]# visudo
## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
tom     ALL=(ALL)       /usr/sbin/useradd, /usr/sbin/userdel
:wq!
①
[tom@localhost ~]$ sudo userdel -r zhangsan
[tom@localhost ~]$ id zhangsan
id: ‘zhangsan’: no such user

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

别名分类:

  • 用户别名:
    • User_Alias NETWORKADMIN =
      • 用户的用户名
      • 组名,使用%引导
      • 还可以其它已经定义的用户别名
  • 主机别名:
    • Host_Alias =
      • 主机名
      • IP地址
      • 网络地址
      • 其它主机别名
  • Runas别名:
    • Runas_Alias =
      • 用户名
      • %组名
      • 其它的Runas别名
  • 命令别名:
    • Cmnd_Alias =
      • 命令路径
      • 目录(此目录内的所有命令)
      • 其它已定义的命令别名

管理命令

w

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

①
[C:~]$ ssh tom@192.168.21.129


Connecting to 192.168.21.129:22...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.

WARNING! The remote SSH server rejected X11 forwarding request.
Last login: Sat Nov 14 12:54:12 2020
[tom@localhost ~]$ vi abc
②
[root@localhost ~]# w
 15:21:13 up  2:33,  4 users,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     tty1     -                12:48    2:33m  0.01s  0.01s -bash
root     pts/0    192.168.21.1     12:48    2:21m  0.04s  0.04s -bash
root     pts/1    192.168.21.1     12:53    0.00s  0.34s  0.01s w
tom      pts/2    192.168.21.1     15:20    6.00s  0.00s  0.03s sshd: tom

sleep 睡眠

[root@localhost ~]# sleep 600s			//睡眠600秒
^C
[root@localhost ~]# sleep 600m			//睡眠600分
^C
[root@localhost ~]# sleep 600h			//睡眠600小时
^C
[root@localhost ~]# sleep 600d			//睡眠600天
^C
[root@localhost ~]# ls
abc  anaconda-ks.cfg
[root@localhost ~]# sleep 5 && rm -f abc	//在5秒后删除abc

5秒后

[root@localhost ~]# ls
anaconda-ks.cfg

last

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

[root@localhost ~]# last
tom      pts/2        192.168.21.1     Sat Nov 14 15:20   still logged in
root     pts/2        192.168.21.1     Sat Nov 14 12:53 - 15:20  (02:26)
root     pts/1        192.168.21.1     Sat Nov 14 12:53   still logged in
root     pts/0        192.168.21.1     Sat Nov 14 12:48   still logged in
root     tty1                          Sat Nov 14 12:48   still logged in
reboot   system boot  4.18.0-193.el8.x Sat Nov 14 12:47   still running
root     pts/1        192.168.21.1     Fri Nov 13 22:03 - crash  (14:43)
root     pts/0        192.168.21.1     Fri Nov 13 20:49 - crash  (15:58)
root     tty1                          Fri Nov 13 20:48 - crash  (15:58)
reboot   system boot  4.18.0-193.el8.x Fri Nov 13 20:48   still running

wtmp begins Fri Nov 13 20:48:11 2020
-n 显示最近#次的相关信息
[root@localhost ~]# last -3
tom      pts/2        192.168.21.1     Sat Nov 14 15:29   still logged in
tom      pts/2        192.168.21.1     Sat Nov 14 15:20 - 15:28  (00:08)
root     pts/2        192.168.21.1     Sat Nov 14 12:53 - 15:20  (02:26)

wtmp begins Fri Nov 13 20:48:11 2020

lastb

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

在输错tom用户密码3次后
[root@localhost ~]# lastb
tom      ssh:notty    192.168.21.1     Sat Nov 14 15:29 - 15:29  (00:00)
tom      ssh:notty    192.168.21.1     Sat Nov 14 15:28 - 15:28  (00:00)
tom      ssh:notty    192.168.21.1     Sat Nov 14 15:28 - 15:28  (00:00)

btmp begins Sat Nov 14 15:28:53 2020

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

[root@localhost ~]# lastb -2
tom      ssh:notty    192.168.21.1     Sat Nov 14 15:29 - 15:29  (00:00)
tom      ssh:notty    192.168.21.1     Sat Nov 14 15:28 - 15:28  (00:00)

btmp begins Sat Nov 14 15:28:53 2020

lastlog

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

[root@localhost ~]# lastlog
Username         Port     From             Latest
root             pts/2    192.168.21.1     Sat Nov 14 12:53:41 +0800 2020
bin                                        **Never logged in**
daemon                                     **Never logged in**
adm                                        **Never logged in**
lp                                         **Never logged in**
sync                                       **Never logged in**
shutdown                                   **Never logged in**
halt                                       **Never logged in**
mail                                       **Never logged in**
operator                                   **Never logged in**
games                                      **Never logged in**
ftp                                        **Never logged in**
nobody                                     **Never logged in**
dbus                                       **Never logged in**
systemd-coredump                           **Never logged in**
systemd-resolve                            **Never logged in**
tss                                        **Never logged in**
polkitd                                    **Never logged in**
unbound                                    **Never logged in**
sssd                                       **Never logged in**
sshd                                       **Never logged in**
rngd                                       **Never logged in**
tom              pts/2    192.168.21.1     Sat Nov 14 15:29:04 +0800 2020
jerry                                      **Never logged in**
-u 显示特定用户最近的登录信息
[root@localhost ~]# lastlog -u tom
Username         Port     From             Latest
tom              pts/2    192.168.21.1     Sat Nov 14 15:29:04 +0800 2020

basename 显示路径基名

[root@localhost ~]# basename /etc/sysconfig/network-scripts/ifcfg-ens160 
ifcfg-ens160								//取出文件名
[root@localhost ~]# basename /a/b/c/d/e/f
f											//不实际存在的也能取

dirname 显示路径

[root@localhost ~]# basename /etc/sysconfig/network-scripts/ifcfg-ens160 
/etc/sysconfig/network-scripts				//取出路径
[root@localhost ~]# dirname /a/b/c/d/e/f
/a/b/c/d/e									//不实际存在的也能取
原文地址:https://www.cnblogs.com/yuqinghao/p/14021346.html