权限管理
文章目录
权限简介
- 文件的权限主要针对三类对象进行定义:
- owner:属主,u
- group:属组,g
- other:其它,o
每个文件针对每个访问者都定义了三种权限:
权限 | 对应的操作对象 | 权限说明 |
---|---|---|
r | 文件 | 可读,可以使用类似cat等命令查看内容 |
w | 文件 | 可写,可以编辑或删除此文件 |
x | 文件 | 可执行,eXacutable,可以在命令提示符下当作命令提交给内核运行 |
r | 目录 | 可以对此目录执行ls以列出内部的所有文件 |
w | 目录 | 可以在此目录中创建文件,也可以删除此目录中的文件 |
x | 目录 | 可以使用cd命令切换进此目录,也可以使用ls-l查看内部文件详细信息 |
权限二进制与十进制转换:
权限 | 二进制 | 十进制 |
---|---|---|
— | 000 | 0 |
–x | 001 | 1 |
-w- | 010 | 2 |
-wx | 011 | 3 |
r– | 100 | 4 |
r-x | 101 | 5 |
rw- | 110 | 6 |
rwx | 111 | 7 |
2. 权限管理命令
2.1 chmod 修改权限的命令
- -R 递归修改,修改此目录下所有文件的权限
- u:用户 g:组 o:其他 a:用户/组/其他 所有用户
- 语法:chmod 用户类别+/-MODE,用户类别+/-MODE file… //修改同一文件或目录不同用户类别的权限
- 语法:chmod 用户类别=MODE,用户类别=MODE file…//修改同一文件或目录不同用户类别的权限,之前权限覆盖
[root@localhost 123]# ll
总用量 0
-rw-r----x. 1 root root 0 9月 20 14:47 123
d----w----. 2 root root 6 9月 20 14:52 321
[root@localhost 123]# cd
[root@localhost ~]# chmod -R a=--- 123
[root@localhost ~]# cd 123
[root@localhost 123]# ll
总用量 0
----------. 1 root root 0 9月 20 14:47 123
d---------. 2 root root 6 9月 20 14:52 321
[root@localhost 123]# chmod g+w 123
[root@localhost 123]# ll
总用量 0
-----w----. 1 root root 0 9月 20 14:47 123
d---------. 2 root root 6 9月 20 14:52 321
[root@localhost 123]# chmod g=r 123
[root@localhost 123]# ll
总用量 0
----r-----. 1 root root 0 9月 20 14:47 123
d---------. 2 root root 6 9月 20 14:52 321
[root@localhost 123]# chmod u+r,g+w,o+rwx 321
[root@localhost 123]# ll
总用量 0
----r-----. 1 root root 0 9月 20 14:47 123
dr---w-rwx. 2 root root 6 9月 20 14:52 321
chown 作用:修改文件属主和属组命令
- chown命令只有管理员可以使用
- chown username file //修改文件的属主
- chown username.username file //修改文件的属主和属组
- -R //修改目录及目录文件的属主或属组,也可以一起修改
[root@localhost ~]# ll
总用量 4
d---------. 3 root root 28 9月 20 14:52 123
-rw-------. 1 root root 1451 9月 15 03:02 anaconda-ks.cfg
[root@localhost ~]# cd 123
[root@localhost 123]# ll
总用量 0
----r-----. 1 root root 0 9月 20 14:47 123
dr---w-rwx. 2 root root 6 9月 20 14:52 321
[root@localhost 123]# cd
[root@localhost ~]# chown -R wangzhe 123
[root@localhost ~]# ll
总用量 4
d---------. 3 wangzhe root 28 9月 20 14:52 123
-rw-------. 1 root root 1451 9月 15 03:02 anaconda-ks.cfg
[root@localhost ~]# cd 123
[root@localhost 123]# ll
总用量 0
----r-----. 1 wangzhe root 0 9月 20 14:47 123
dr---w-rwx. 2 wangzhe root 6 9月 20 14:52 321
[root@localhost 123]# cd
[root@localhost ~]# chown -R wangzhe.wangzhe 123
[root@localhost ~]# ll
总用量 4
d---------. 3 wangzhe wangzhe 28 9月 20 14:52 123
-rw-------. 1 root root 1451 9月 15 03:02 anaconda-ks.cfg
[root@localhost ~]# cd 123
[root@localhost 123]# ll
总用量 0
----r-----. 1 wangzhe wangzhe 0 9月 20 14:47 123
dr---w-rwx. 2 wangzhe wangzhe 6 9月 20 14:52 321
chgrp 作用:修改文件的属组
- 语法:chgrp groupname file
-R //修改目录及目录文件属组
[root@localhost ~]# ll
总用量 4
d---------. 3 wangzhe wangzhe 28 9月 20 14:52 123
-rw-------. 1 root root 1451 9月 15 03:02 anaconda-ks.cfg
[root@localhost ~]# cd 123
[root@localhost 123]# ll
总用量 0
----r-----. 1 wangzhe wangzhe 0 9月 20 14:47 123
dr---w-rwx. 2 wangzhe wangzhe 6 9月 20 14:52 321
[root@localhost 123]# cd
[root@localhost ~]# chgrp -R root 123
[root@localhost ~]# ll
总用量 4
d---------. 3 wangzhe root 28 9月 20 14:52 123
-rw-------. 1 root root 1451 9月 15 03:02 anaconda-ks.cfg
[root@localhost ~]# cd 123
[root@localhost 123]# ll
总用量 0
----r-----. 1 wangzhe root 0 9月 20 14:47 123
dr---w-rwx. 2 wangzhe root 6 9月 20 14:52 321
umask 遮罩码
- 文件创建后默认权限是644(文件最终权限是666)
- 目录创建后默认权限是755(目录最终权限是755)
- 文件默认是不能具有执行权限的,如果算得的结果有执行权限则将其权限整体加1。
[root@localhost 123]# umask
0022
[root@localhost 123]# touch 1234
[root@localhost 123]# ll
总用量 0
----r-----. 1 wangzhe root 0 9月 20 14:47 123
-rw-r--r--. 1 root root 0 9月 20 16:51 1234
dr---w-rwx. 2 wangzhe root 6 9月 20 14:52 321
[root@localhost 123]# umask 000
[root@localhost 123]# umask
0000
[root@localhost 123]# touch 123456
[root@localhost 123]# ll
总用量 0
----r-----. 1 wangzhe root 0 9月 20 14:47 123
-rw-r--r--. 1 root root 0 9月 20 16:51 1234
-rw-rw-rw-. 1 root root 0 9月 20 16:53 123456
dr---w-rwx. 2 wangzhe root 6 9月 20 14:52 321
Liunx安全上下文与特殊权限
Liunx安全上下文
前提:进程有属主和属组;文件有属主和属组
- 任何一个可执行程序文件能不能启动为进程,取决于发起者对程序文件是否拥有可执行权限;
- 启动为进程后,其进程的属主为发起者,属组为发起者所属的组
- 进程访问文件时的权限取决于进程的发起者:
- 进程的发起者是文件的属主时,则应用文件属主权限
- 进程的发起者是文件的属组时,则应用文件属组权限
- 应用文件“其它”权限
特殊权限
SUID //运行程序时,这个程序启动的进程的属主是程序文件自身的属主,而不是启动者为属主
chmod u+s file
chmod u-s file
// 如果file本身原来就有执行权限,则SUID显示为s,否则显示为S
chmod u+s file //针对程序文件使用
Xshell 1
[root@localhost ~]# type vi //此处查询vi命令在哪里应该使用which查询
vi 是 /usr/bin/vi
[root@localhost ~]# ll /usr/bin/vi
-rwxr-xr-x. 1 root root 910088 1月 20 2017 /usr/bin/vi
[root@localhost ~]# chmod u+s /usr/bin/vi
[root@localhost ~]# ll /usr/bin/vi
-rwsr-xr-x. 1 root root 910088 1月 20 2017 /usr/bin/vi
Xshell 2
[wangzhe@localhost 123]$ ls
123
[wangzhe@localhost 123]$ vi 123
Xshell 1
[root@localhost ~]# ps -ef|grep vi
root 741 1 0 13:25 ? 00:00:00 /usr/bin/VGAuthService -s
root 1771 1565 0 15:09 pts/1 00:00:00 vi 123
root 1773 1429 0 15:09 pts/0 00:00:00 grep --color=auto vi
chmod U-s file //针对程序文件使用
Xshell 1
[root@localhost ~]# type vi //此处查询vi命令在哪里应该使用which查询
vi 是 /usr/bin/vi
[root@localhost ~]# chmod u-s /usr/bin/vi
[root@localhost ~]# ll /usr/bin/vi
-rwxr-xr-x. 1 root root 910088 1月 20 2017 /usr/bin/vi
Xshell 2
[wangzhe@localhost 123]$ ls
123
[wangzhe@localhost 123]$ vi 123
Xshell 1
[root@localhost ~]# ps -ef|grep vi
root 741 1 0 13:25 ? 00:00:00 /usr/bin/VGAuthService -s
root 1771 1565 0 15:09 pts/1 00:00:00 vi 123
wangzhe 1812 1565 0 15:18 pts/1 00:00:00 vi 123
root 1814 1429 0 15:18 pts/0 00:00:00 grep --color=auto vi
// 查询vi命令在哪里应该使用which查询,不是使用type
SGID
//运行程序时,这个程序启动的进程的属组是程序文件自身的属组,而不是启动者所属的基本组
//默认情况下,用户创建文件时,其属组为此用户所属的基本组;
//一旦某目录被设定了SGID,则对此目录有写权限的用户在此目录中创建的文件或目录,其所属的组
//为此设定了SGID的目录的属组
chmod g+s file //针对目录使用
//此条命令做不出效果
chmod g-s file //针对目录使用
//此条命令做不出效果
Sticky //在一个公共目录,每个人都能创建文件,删除自己的文件,但是不能删除别人创建的文件
chmod o+t DIR
chmod o-t DIR
//如果DIR本身原来就有执行权限,则Sticky显示为t,否则显示为T
4755 //有SUID,文件权限为755b
2755 //有SGID,文件权限为755
1755 //有Sticky,文件权限为755b
7755 //有SUID、SGID、Sticky,文件权限为755
//这里前面的4、2、1分别表示SUID、SGID、Sticky
chmod o+t file //在一个公共目录,每个人都能创建文件,删除自己的文件,但是不能删除别人创建的文件
//由root用户创建一个公共目录
Xshell 1
[root@localhost 666]# ll
总用量 0
drwxr-xr--. 2 root root 6 9月 21 16:11 123
[root@localhost 666]# chmod o=rwx 123
[root@localhost 666]# chmod o+t 123
[root@localhost 666]# ll
总用量 0
drwxr-xrwt. 2 root root 6 9月 21 16:11 123
//由wangzhe用户在公共目录中创建一个文件
Xshell 2
[wangzhe@localhost 666]$ cd 123
[wangzhe@localhost 123]$ touch 123
[wangzhe@localhost 123]$ ls
123
//由zhesir用户删除wangzhe用户创建的文件,发现删除不了
Xshell 3
[zhesir@localhost 666]$ cd 123
[zhesir@localhost 123]$ ls
123
[zhesir@localhost 123]$ rm -fr 123
rm: 无法删除"123": 不允许的操作
chmod o-t file //取消Stick权限
//由root用户取消公共目录的Sticky的权限
Xshell 1
[root@localhost 666]# ll
总用量 0
drwxr-xrwt. 2 root root 17 9月 21 16:14 123
[root@localhost 666]# chmod o-t 123
[root@localhost 666]# ll
总用量 0
drwxr-xrwx. 2 root root 17 9月 21 16:14 123
//由wangzhe用户创建一个789文件
Xshell 2
[wangzhe@localhost 123]$ touch 789
[wangzhe@localhost 123]$
//由zhesir用户来进行删除,发现可以删除了
Xshell 3
[zhesir@localhost 123]$ ls
789
[zhesir@localhost 123]$ rm -fr 789
[zhesir@localhost 123]$ ls
4755 //有SUID,文件权限为755
2755 //有SGID,文件权限为755
1755 //有Sticky,文件权限为755
7755 //有SUID、SGID、Sticky,文件权限为755
//这里前面的4、2、1分别表示SUID、SGID、Sticky
facl 文件系统访问控制列表(给指定用户或组对某个文件或目录的指定权限)
- facl(Filesystem Access Control List),利用文件扩展保存额外的访问控制权限。
语法://setfacl -m u:test:rw file
//setfacl -m g:test:rw file
setfacl -m u:username:rwx file
//由root用户建一个文件夹并且对指定用户wangzhe设定权限
Xshell 1
[root@localhost 666]# ls
789
[root@localhost 666]# ll
总用量 0
drwxr-xr-x. 2 root root 17 9月 21 17:31 789
[root@localhost 666]# setfacl -m u:wangzhe:rwx 789
[root@localhost 666]# getfacl 789
# file: 789
# owner: root
# group: root
user::rwx
user:wangzhe:rwx
group::r-x
mask::rwx
other::r-x
//由wangzhe(已经给wangzhe用户指定权限)用户在此文件中创建文件,看是否有权限创建
Xshell 2
[wangzhe@localhost 789]$ touch 123
[wangzhe@localhost 789]$ ls
123
//由zhesir用户(未给权限)在此文件创建文件,看是否有权限
[zhesir@localhost 666]$ cd 789
[zhesir@localhost 789]$ touch 567
touch: 无法创建"567": 权限不够
//给组用户指定权限时同理
setfacl -x u:username file
//由root用户把wangzhe用户指定的权限删除
Xshell 1
[root@localhost 666]# setfacl -x u:wangzhe 789
[root@localhost 666]# ll
总用量 0
drwxr-xr-x+ 2 root root 17 9月 21 17:31 789
[root@localhost 666]# getfacl 789
# file: 789
# owner: root
# group: root
user::rwx
group::r-x
mask::r-x
other::r-x
//在wangzhe用户中再次测试还可不可以创建文件
[wangzhe@localhost 789]$ ls
123
[wangzhe@localhost 789]$ touch 98765
touch: 无法创建"98765": 权限不够
//给组用户取消指定权限同理
setfacl -b file //清空这个file所有指定用户的指定权限
[root@localhost 666]# setfacl -b 789
[root@localhost 666]# getfacl 789
# file: 789
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
[root@localhost 666]# ll
总用量 0
drwxr-xr-x. 2 root root 17 9月 21 17:31 789
getfacl file //查看这个file有哪些指定用户指定权限
[root@localhost 666]# getfacl 789
# file: 789
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
//文件权限应用次序:
//默认情况下:
Owner --> Group --> Other
//有设置facl的情况下:
Owner --> facl,user --> Group --> facl,group --> Other
sudo //可以实现某个用户能够以另外哪一个用户的身份通过哪些主机执行什么命令
管理命令
w //显示当前登录到系统的用户有哪些,以及其正在做什么
[root@localhost ~]# w
19:23:30 up 5:58, 3 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.26.1 13:26 2.00s 0.43s 0.02s w
root pts/1 192.168.26.1 14:08 2:58 0.18s 0.15s -bash
root pts/2 192.168.26.1 16:09 1:51m 0.04s 0.02s -bash
sleep //停止x秒后执行命令
//睡眠,写脚本为防止上一个命令没执行完下一命令就开始执行时可以加上sleep # \
//表示停顿#秒后再执行后面的命令
[root@localhost ~]# id wjq
uid=1005(wjq) gid=1008(wjq) 组=1008(wjq)
[root@localhost ~]# sleep 1m;userdel wjq //一分钟删除wjq这个账户
[root@localhost ~]# id wjq
id: wjq: no such user //已经删除成功
last //显示/var/log/wtmp文件,显示用户登录历史及系统重启历史
[root@localhost ~]# last
root pts/3 192.168.26.1 Sat Sep 21 16:23 - 16:24 (00:00)
root pts/3 192.168.26.1 Sat Sep 21 16:10 - 16:10 (00:00)
root pts/2 192.168.26.1 Sat Sep 21 16:09 still logged in
...
... //太多已经删除了部分
...
reboot system boot 3.10.0-693.el7.x Sun Sep 15 03:04 - 14:56 (4+11:51)
wtmp begins Sun Sep 15 03:04:37 2019
last -n //显示最近n次的相关信息
[zhesir@localhost 789]$ last -n 3
root pts/3 192.168.26.1 Sat Sep 21 16:23 - 16:24 (00:00)
root pts/3 192.168.26.1 Sat Sep 21 16:10 - 16:10 (00:00)
root pts/2 192.168.26.1 Sat Sep 21 16:09 still logged in
wtmp begins Sun Sep 15 03:04:37 2019
lastb //显示/var/log/btmp文件,显示用户错误的登录尝试
[root@localhost ~]# lastb
wangzhe pts/0 Thu Sep 19 16:05 - 16:05 (00:00)
(unknown tty1 Sun Sep 15 22:58 - 22:58 (00:00)
(unknown tty1 Sun Sep 15 22:58 - 22:58 (00:00)
btmp begins Sun Sep 15 22:58:54 2019
lastb -n //显示最近n次的相关信息
btmp begins Sun Sep 15 22:58:54 2019
[root@localhost ~]# lastb -n 1
wangzhe pts/0 Thu Sep 19 16:05 - 16:05 (00:00)
btmp begins Sun Sep 15 22:58:54 2019
lastlog //显示每个用户最近一次成功登录信息
[root@localhost ~]# lastlog
用户名 端口 来自 最后登陆时间
root pts/3 192.168.26.1 六 9月 21 16:23:57 +0800 2019
bin **从未登录过**
daemon **从未登录过**
adm **从未登录过**
lp **从未登录过**
sync **从未登录过**
shutdown **从未登录过**
halt **从未登录过**
mail **从未登录过**
operator **从未登录过**
games **从未登录过**
ftp **从未登录过**
nobody **从未登录过**
systemd-network **从未登录过**
dbus **从未登录过**
polkitd **从未登录过**
postfix **从未登录过**
chrony **从未登录过**
sshd **从未登录过**
wangzhe pts/1 六 9月 21 14:08:50 +0800 2019
zhesir pts/2 六 9月 21 16:10:02 +0800 2019
lastlog -u username //显示特定用户最近的登录信息
[root@localhost ~]# lastlog -u wangzhe
用户名 端口 来自 最后登陆时间
wangzhe pts/1 六 9月 21 14:08:50 +0800 2019
basename //显示路径基名
[root@localhost ~]# basename /123/321/456/654
654
dirname
[root@localhost ~]# dirname /123/321/456/654
/123/321/456