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 =
- 用户的用户名
- 组名,使用%引导
- 还可以其它已经定义的用户别名
- User_Alias NETWORKADMIN =
- 主机别名:
- Host_Alias =
- 主机名
- IP地址
- 网络地址
- 其它主机别名
- Host_Alias =
- Runas别名:
- Runas_Alias =
- 用户名
- %组名
- 其它的Runas别名
- Runas_Alias =
- 命令别名:
- Cmnd_Alias =
- 命令路径
- 目录(此目录内的所有命令)
- 其它已定义的命令别名
- 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 //不实际存在的也能取