Lupinus

Re:从零开始的go学习生活(`・ω・´)

0%

[权限管理]

权限管理

权限中rwx的含义

字母 含义 二进制 八进制权限表示法
r– 读取权限 100 4
-w- 写入权限 010 2
–x 执行权限 001 1
没有权限 000 0

权限和属主属组的关系

15614304341170

替换命令tr

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[root@localhost ~]# ll | tr 'rwx-' '4210'
0420000000. 1 4oot 4oot 1635 Ma4 24 16:44 anaconda0ks.cfg
0420400400 1 4oot 4oot 52 Ap4 5 17:17 del_use4.t1t
0420400400 1 4oot 4oot 10 Ap4 9 14:22 test.t1t

#使用命令,获取文件的数字权限
[root@localhost ~]# ll|tr 'rwx-' '4210'|sed -n '2p'|awk -F '' '{print $2+$3+$4""$5+$6+$7""$8+$9+$10}'
600
[root@localhost ~]# ll | tr 'rwx-' '4210'| awk -F '' 'NR==2{print$2+$3+$4""$5+$6+$7""$8+$9+$10}'
600

#stat命令获取权限
[root@localhost ~]# stat test.txt | awk -F '[(/]' 'NR==4{print $2}'
0644
[root@localhost ~]# stat test.txt | awk -F '(' 'NR==4{print $2}' | awk -F '/' '{print $1}'
0644

#正规取出文件数字权限的命令
[root@localhost ~]# stat -c %a test.txt
644
[root@localhost ~]# stat -c %a /etc/sysconfig/network-scripts/ifcfg-eth0
644

ugo权限位

  • 属主权限位:u-user

  • 属组权限位:g-group

  • 其他用户权限位:o-other

授权命令chmod

授权方式

  • 数字方式
1
2
3
4
5
[root@localhost ~]# chmod 744 test.txt
[root@localhost ~]# ll
-rwxr--r-- 1 root root 10 Apr 9 14:22 test.txt
[root@localhost ~]# stat -c %a test.txt
744
  • ugo方式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#格式
u:user用户权限
g:group用户组权限
o:other其他用户权限
a:all所有权限位

+:加上后面指定的权限
-:减去后面指定的权限
=:等于后面指定的权限

[root@localhost ~]# chmod u-r,g-r test.txt
[root@localhost ~]# ll
--wx---r-- 1 root root 10 Apr 9 14:22 test.txt
[root@localhost ~]# stat -c %a test.txt
304

#a的使用
[root@localhost ~]# chmod a=rwx test.txt
[root@localhost ~]# ll
-rwxrwxrwx 1 root root 10 Apr 9 14:22 test.txt

#a可以省略
[root@localhost ~]# chmod a+x a.sh
[root@localhost ~]# chmod +x a.sh

权限对文件的影响

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
r:文件只能读取 
w:任何编辑命令都可以写入内容,但是vim读取不出来,就会覆盖原文件内容
x:对于普通用户来说,还是什么都做不了,必须配合r权限才可以执行

rw:可读,可写,正常的使用vim编辑,但是不能执行
rx:可读,可执行,但是不能编辑
wx:可写,不可读,不可执行
rwx:可读,可写,可执行

#执行文件方式,必须有执行权限
./相对路径
. 文件名
sh 文件名
bash 文件名
source 文件名

权限对目录的影响

1
2
3
4
5
6
7
8
9
10
r:能看见目录下的文件,但是看不见文件的详细属性 
w:什么都做不了
x:什么都做不了

rx:才能查看目录下的文件
wx:读取不了目录里的文件,但是创建文件,创建目录,删除文件,删除目录,不能用*代替
rwx:可以做任何操作,可以创建,删除,移动,复制文件或目录

ps:目录在只有单权限的情况下,什么都做不了
只有rx权限,可以把文件向外复制,因为没有改变目录

修改文件属主属组

选项 说明
-R 递归修改属组和属主
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
chown

#语法
chown [options] 属主.属组 文件名
chown [options] 属主:属组 文件名

#示例
[root@localhost opt]# chown roger1:roger2 abc

#只修改属主
[root@localhost opt]# chown root abc
#只修改属组
[root@localhost opt]# chown :roger3 abc
#递归修改属组和属主
[root@localhost opt]# chown -R zls:roger1 /opt/

特殊权限

特殊权限介绍

1
2
3
4
5
6
[root@localhost ~]# ll /bin/passwd
-rwsr-xr-x. 1 root root 27832 Jun 10 2014 /bin/passwd
[root@localhost ~]# ll /bin/write
-rwxr-sr-x. 1 root tty 19624 Oct 31 2018 /bin/write
[root@localhost ~]# ll /tmp/ -d
drwxrwxrwt. 12 root root 4096 Apr 12 21:52 /tmp/

/etc/shadow文件,对于普通用户没有任何权限,不能读取,也不能写入内容 ,那么普通用户,为什么可以修改密码?

  • 因为使用了passwd这个命令

  • passwd命令在属主权限位上,原本是x权限,变成了s权限

  • s权限在属主权限位,又叫做SetUID权限SUID

  • 作用:普通用户在使用有SUID权限的文件或命令时,会以该文件的属主身份去执行该命令

普通用户只可以修改自身的密码:系统做了判断,普通用户passwd后不能家参数

特殊权限 SetUID

SetUID特性

  • 原本属主位上如果有x权限,则SetUIDs
  • 原本属主位上如果没有x权限,则SetUIDS
  • 授权方式
    • chmod u+s 文件名
    • chmod 4xxx 文件名
  • SetUID权限的数字是4000

image-20220412225423440

特殊权限 SetGID

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
[root@localhost ~]# ll /bin/write
-rwxr-sr-x. 1 root tty 19624 Oct 31 2018 /bin/write

#创建一个目录
[root@db04 ~]# mkdir /tmp/test
#赋予sgid权限
[root@db04 ~]# chmod g+s /tmp/test/
#查看目录权限
[root@db04 ~]# ll /tmp/test/ -d
drwxr-sr-x 2 root root 4096 6月 21 16:26 /tmp/test/
#使用root用户创建文件
[root@db04 ~]# touch /tmp/test/root_file
#查看文件
[root@db04 ~]# ll /tmp/test/
-rw-r--r-- 1 root root 0 6月 21 16:30 root_file
#切换用户
[root@db04 ~]# su - lamp
#创建文件
[lamp@db04 ~]$ touch /tmp/test/lamp_file
touch: cannot touch '/tmp/test/lamp_file': Permission denied
#赋予目录777权限
[root@db04 ~]# chmod 777 /tmp/test/
#查看目录权限
[root@db04 ~]# ll -d /tmp/test/
drwxrwsrwx 2 root root 4096 6月 21 16:26 /tmp/test/
#切换至普通用户
[root@db04 ~]# su - lamp
#创建文件
[lamp@db04 ~]$ touch /tmp/test/lamp_file
#查看权限
[lamp@db04 ~]$ ll /tmp/test/lamp_file
-rw-rw-r-- 1 lamp root 0 Jun 21 16:34 /tmp/test/lamp_file
#讲test目录属主和属组改为oldboy
[root@db04 ~]# chown oldboy.oldboy /tmp/test/
#查看权限
[root@db04 ~]# ll -d /tmp/test/
drwxrwsrwx 2 oldboy oldboy 4096 6月 21 16:34 /tmp/test/
#切换用户
[root@db04 ~]# su - lamp
#创建文件
[lamp@db04 ~]$ touch /tmp/test/lamp_file2
#查看文件权限
[lamp@db04 ~]$ ll /tmp/test/lamp_file2
-rw-rw-r-- 1 lamp oldboy 0 Jun 21 16:35 /tmp/test/lamp_file2

SetGID特性

  • 原本属组位上如果有x权限,则SetGIDs
  • 原本属组位上如果没有x权限,则SetGIDS
  • 授权方式
    • chmod g+s 文件名
    • chmod 2xxx 文件名
  • SetGID权限的数字是2000

主要应用场景:文件共享

1
2
3
4
5
练习sgid
创建三个用户,分别是zls,oldboy,yourname这些用户都属于oldboyedu组的成员。这些用户的密码都是123
1.要求以上用户和组可以在/home/oldboyedu目录里访问,创建,删除文件
2.其他用户一律不允许访问该目录
3.在该目录下新建的文件会自动属于oldboyedu组拥有

chattr概述

chattr只有root用户可以使用,用来修改文件系统的权限属性,建立凌驾于rwx基础权限之上的授权

chattr命令格式:# chattr [+-=][选项] 文件名或目录名

设置文件属性(权限),针对所有用户,包括 root

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
选项:+增加权限 -减少权限 =等于某个权限
a:让文件或目录仅可追加内容
i:不得任意更改文件或目录

#创建文件并设置属性
[root@roger ~]# touch file_a file_i
[root@roger ~]# lsattr file_a file_i
---------------- file_a
---------------- file_i

#设置属性
[root@roger ~]# chattr +a file_a
[root@roger ~]# chattr +i file_i
[root@roger ~]# lsattr file_a file_i
-----a---------- file_a
----i----------- file_i

#a权限, 无法覆盖写入和删除文件
[root@roger ~]# echo "aa" > file_a
bash: file_a: Operation not permitted
[root@roger ~]# rm -f file_a
rm: cannot remove ‘file_a’: Operation not permitted

#a权限, 只能追加, 适用于日志文件
[root@roger ~]# echo "aa" >> file_a

#i权限, 无法写入, 无法删除
[root@roger ~]# echo "i" > file_i
bash: file_i: Permission denied
[root@roger ~]# echo "i" >> file_i
bash: file_i: Permission denied
[root@roger ~]# rm -f file_i
rm: cannot remove ‘file_i’: Operation not permitted

#解除限制
[root@roger ~]# chattr -a file100
[root@roger ~]# chattr -i file200

umask进程掩码

Q:什么是umask?

当我们登录系统之后,创建一个文件总是有一个默认权限,比如: 目录默认权限:755 文件默认权限:644 那么这个权限是怎么来的呢? 不瞒你说,这就是umask做的,umask设置了用户创建文件的默认权限。

umask是如何改变新文件的权限

系统默认umask为022,那么当我们创建一个目录时,正常情况下目录的权限应该是777,但是umask表示要减去的值,所以新目录文件的权限应该是777-022=755。至于文件的权限也依次类推:666-022=644

umask涉及到的配置文件

umask涉及到的相关文件/etc/bashrc /etc/profile ~/.bashrc ~/.bash_profile

注意:umask影响的范围

shell (vim,touch) –umask–> 新文件或目录权限

vsftpd –umask–> 新文件或目录权限

samba –umask–> 新文件或目录权限

useradd –umask–> 用户 HOME

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
1.假设umask值为:022(所有位为偶数)
//文件的起始权限值
6 6 6 - 0 2 2 = 6 4 4

2.假设umask值为:045(其他用户组位为奇数)
//计算出来的权限。由于umask的最后一位数字是5,所以,在其他用户组位再加1。
6 6 6  -   0 4 5 = 6 2 1

3.默认目录权限计算方法
7 7 7  -  0 2 2 = 7 5 5
 
umask 044 //umask所有位全为偶数时
示例:mkdir d044 //目录733
示例:touch f044 //文件622

umask 023 //umask值的部分或全部位为奇数时
示例:mkdir d023 //目录754
示例:touch f023 //文件644

umask 035 //umask值的所有位为奇数时
示例:mkdir d035 //目录742
示例:touch f035 //文件642

示例1: 在shell进程中创建文件

1
2
3
4
5
6
7
8
#查看当前用户的umask权限
[root@zls ~]# umask
0022
[root@zls ~]# touch file0022
[root@zls ~]# mkdir dir0022
[root@zls ~]# ll -d file0022 dir0022/
drwxr-xr-x 2 root root 6 Jan 24 09:02 dir0022/
-rw-r--r-- 1 root root 0 Jan 24 09:02 file0022

示例2: 修改shell umask值(临时生效)

1
2
3
4
5
6
[root@zls ~]# umask 000
[root@zls ~]# mkdir dir000
[root@zls ~]# touch file000
[root@zls ~]# ll -d dir000 file000
drwxrwxrwx 2 root root 6 Jan 24 09:04 dir000
-rw-rw-rw- 1 root root 0 Jan 24 09:04 file000

示例3: 修改shell umask值(永久生效, 强烈不建议修改)

1
2
3
4
5
6
7
8
9
[root@zls ~]# vim /etc/profile
if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
umask 002
else
umask 022
fi

//立即在当前 shell 中生效
[root@zls ~]# source /etc/profile

示例4: 通过umask决定新建用户HOME目录的权限

1
2
3
4
5
6
7
8
9
10
11
[root@zls ~]# vim /etc/login.defs
UMASK 077
[root@zls ~]# useradd dba
[root@zls ~]# ll -d /home/dba/
drwx------. 4 dba dba 4096 3 月 11 19:50 /home/dba/

[root@zls ~]# vim /etc/login.defs
UMASK 000
[root@zls ~]# useradd sa
[root@zls ~]# ll -d /home/sa/
drwxrwxrwx. 4 sa sa 4096 3 月 11 19:53 /home/sa/

示例 5:例如vsftpd进程/etc/vsftpd/vsftpd.conf

1
2
3
4
[root@zls ~]# yum -y install vsftpd
[root@zls ~]# man vsftpd.conf
anon_umask
local_umask