Day16 课堂笔记
1. Linux文件及目录权限
1 普通文件对应读、写、执行权限的详细说明
1)可读r:表示具有可读、浏览文件内容(即读取文件实体block
)的权限
2)可写w:表示具有新增、修改、删除文件内容的权限。
3)可执行x:表示具有执行文件的权限。
其中对于可读r,这里有两点需要说明:
- 如果没有可读r配合,那么使用
vi
编辑文件时会提示无法编辑(但可强制编辑),可以使用echo
等命令进行重定向或追加。 - 删除文件或者创建文件的权限受父目录(上一级目录)的权限控制,与文件本身的可写w权限无关。
对于可执行x,需要注意以下三点:
- 首先文件本身要能够执行(命令或脚本)。
- 如果是普通用户,同时还需要具备可读r的权限才能执行文件。
-
root
用户只要有可执行x的权限就能执行文件。
2 目录对应读、写、执行权限的详细说明
1)可读r:表示具有浏览目录下面文件及子目录内容的权限。
2)可写w:表示具有增加、删除或修改目录内文件的权限。但是,如果没有可执行x的配合,即使有w权限,也无法删除或创建文件。
3)可执行x:表示具有进入目录的权限。
3. Linux权限体系核心知识
3.1 权限实践环境准备
1 规划三种不同用户角色
-
incahome
(家、组) -
oldboy
家庭男主人,用来代表用户(User
)角色,是文件的所有者 -
oldgirl
女主人(和所有者oldboy
属于相同组,oldboy
的家人)用来代表用户组incahome
的角色 -
test
其他人 其他(others
)人,用来代表其他用户角色
2 创建对应的用户及用户组角色
如果用户之前已经创建了:
[root@oldboyedu ~]# groupadd incahome
[root@oldboyedu ~]# useradd oldboy
useradd: user 'oldboy' already exists
[root@oldboyedu ~]# usermod -g incahome oldboy
[root@oldboyedu ~]# id oldboy
uid=1000(oldboy) gid=1004(incahome) groups=1004(incahome),1000(oldboy)
如果此前没有创建oldboy
,可以执行下面命令,而不需要usermod
命令
[root@oldboyedu ~]# useradd oldboy -g incahome
[root@oldboyedu ~]# useradd oldgirl -g incahome
useradd: user 'oldgirl' already exists
[root@oldboyedu ~]# id oldgirl
uid=1001(oldgirl) gid=1001(oldgirl) groups=1001(oldgirl)
[root@oldboyedu ~]# usermod -g incahome oldgirl
[root@oldboyedu ~]# id oldgirl
uid=1001(oldgirl) gid=1004(incahome) groups=1004(incahome)
[root@oldboyedu ~]# useradd test
3 创建用于测试的目录及文件环境
[root@oldboyedu ~]# mkdir -p /oldboy
[root@oldboyedu ~]# echo "echo oldboyLinux" >/oldboy/test.sh
[root@oldboyedu ~]# chmod +x /oldboy/test.sh
4 打开远程登录窗口并登录
3.2 通过实践测试文件对应权限
1 测试默认情况下不同用户的对应权限
待测试文件及目录默认属性如下:
[root@oldboyedu ~]# ls -ld /oldboy/
drwxr-xr-x 2 root root 21 Mar 21 01:15 /oldboy/
[root@oldboyedu ~]# ls -l /oldboy/test.sh
-rwxr-xr-x 1 root root 17 Mar 23 16:43 /oldboy/test.sh
下面是测试的命令集合:
测试可读 r的命令为:cat /oldboy/test.sh
测试可写w的命令为:echo "echo oldboy" >> /oldboy/test.sh
测试执行x 的命令为: /oldboy/test.sh
测试可删除的命令为:rm -f /oldboy/test.sh
经过测试,你会发现三个用户的测试结果一致,以oldboy
用户为例:
[oldboy@oldboyedu ~]$ cat /oldboy/test.sh
echo oldboyLinux
[oldboy@oldboyedu ~]$ echo "echo oldboy" >> /oldboy/test.sh
-bash: /oldboy/test.sh: Permission denied
[oldboy@oldboyedu ~]$ /oldboy/test.sh
oldboyLinux
[oldboy@oldboyedu ~]$ rm -f /oldboy/test.sh
rm: cannot remove ‘/oldboy/test.sh’: Permission denied
2 在root
窗口将文件对应的用户改为oldboy
,用户组改为incahome
[root@oldboyedu ~]# chown oldboy.incahome /oldboy/test.sh
[root@oldboyedu ~]# ls -l /oldboy/test.sh
-rwxr-xr-x 1 oldboy incahome 17 Mar 23 16:43 /oldboy/test.sh
测试oldboy
用户
[oldboy@oldboyedu ~]$ whoami
oldboy
[oldboy@oldboyedu ~]$ cat /oldboy/test.sh
echo oldboyLinux
[oldboy@oldboyedu ~]$ echo "echo oldboy" >> /oldboy/test.sh
[oldboy@oldboyedu ~]$ cat /oldboy/test.sh
echo oldboyLinux
echo oldboy
[oldboy@oldboyedu ~]$ /oldboy/test.sh
oldboyLinux
oldboy
测试oldgril
用户
[oldgirl@oldboyedu ~]$ whoami
oldgirl
[oldgirl@oldboyedu ~]$ cat /oldboy/test.sh
echo oldboyLinux
echo oldboy
[oldgirl@oldboyedu ~]$ echo "echo oldboy" >> /oldboy/test.sh
-bash: /oldboy/test.sh: Permission denied
[oldgirl@oldboyedu ~]$ /oldboy/test.sh
oldboyLinux
oldboy
[oldgirl@oldboyedu ~]$ rm -f /oldboy/test.sh
rm: cannot remove ‘/oldboy/test.sh’: Permission denied
3 重点测试oldboy
用户对文件的w删除权限及test用户的执行权限
将test.sh
中的其他用户权限的r权限去掉,具体步骤如下:
[root@oldboyedu ~]# whoami
root
[root@oldboyedu ~]# chmod 751 /oldboy/test.sh
[root@oldboyedu ~]# ls -l /oldboy/test.sh
-rwxr-x--x 1 oldboy incahome 29 Mar 23 16:50 /oldboy/test.sh
下面测试oldboy
用户下是否有删除test.sh
的权限
[oldboy@oldboyedu ~]$ whoami
oldboy
[oldboy@oldboyedu ~]$ rm -f /oldboy/test.sh
rm: cannot remove ‘/oldboy/test.sh’: Permission denied
测试test
用户下是否有执行test.sh
的权限
[test@oldboyedu ~]$ whoami
test
[test@oldboyedu ~]$ /oldboy/test.sh
bash: /oldboy/test.sh: Permission denied
4 修改/oldboy
目录的权限,并测试oldboy
用户对oldboy
目录下test.sh
的删除权限
具体步骤如下:
[root@oldboyedu ~]# whoami
root
[root@oldboyedu ~]# chmod 000 /oldboy/test.sh
[root@oldboyedu ~]# ls -l /oldboy/test.sh
---------- 1 oldboy incahome 29 Mar 23 16:50 /oldboy/test.sh
[root@oldboyedu ~]# chown -R oldboy /oldboy
[root@oldboyedu ~]# ls -ld /oldboy
drwxr-xr-x 2 oldboy root 21 Mar 23 16:39 /oldboy
测试步骤如下:
[oldboy@oldboyedu ~]$ whoami
oldboy
[oldboy@oldboyedu ~]$ cat /oldboy/test.sh
cat: /oldboy/test.sh: Permission denied
[oldboy@oldboyedu ~]$ echo "echo oldboy" >> /oldboy/test.sh
-bash: /oldboy/test.sh: Permission denied
[oldboy@oldboyedu ~]$ /oldboy/test.sh
-bash: /oldboy/test.sh: Permission denied
[oldboy@oldboyedu ~]$ rm -f /oldboy/test.sh
[oldboy@oldboyedu ~]$ ls -l /oldboy/test.sh
ls: cannot access /oldboy/test.sh: No such file or directory
3.3 通过实践测试目录属性对应的权限
1 针对当下目录/oldboy
属性测试权限
[root@oldboyedu ~]# ls -ld /oldboy/
drwxr-xr-x 2 oldboy root 6 Mar 23 17:06 /oldboy/
测试oldboy
用户:
[oldboy@oldboyedu ~]$ whoami
oldboy
[oldboy@oldboyedu ~]$ ls -ld /oldboy/
drwxr-xr-x 2 oldboy root 6 Mar 23 17:06 /oldboy/
[oldboy@oldboyedu ~]$ touch /oldboy/{1..3}.txt
[oldboy@oldboyedu ~]$ ls /oldboy/
1.txt 2.txt 3.txt
[oldboy@oldboyedu ~]$ ls -l /oldboy/
total 0
-rw-r--r-- 1 oldboy incahome 0 Mar 23 17:10 1.txt
-rw-r--r-- 1 oldboy incahome 0 Mar 23 17:10 2.txt
-rw-r--r-- 1 oldboy incahome 0 Mar 23 17:10 3.txt
[oldboy@oldboyedu ~]$ cd /oldboy/
[oldboy@oldboyedu /oldboy]$ pwd
/oldboy
[oldboy@oldboyedu /oldboy]$ rm -f 1.txt
[oldboy@oldboyedu /oldboy]$ ls
2.txt 3.txt
测试oldgirl
用户:
[oldgirl@oldboyedu ~]$
[oldgirl@oldboyedu ~]$ whoami
oldgirl
[oldgirl@oldboyedu ~]$ ls -ld /oldboy/
drwxr-xr-x 2 oldboy root 32 Mar 23 17:10 /oldboy/
[oldgirl@oldboyedu ~]$ ls /oldboy/
2.txt 3.txt
[oldgirl@oldboyedu ~]$ ls -l /oldboy/
total 0
-rw-r--r-- 1 oldboy incahome 0 Mar 23 17:10 2.txt
-rw-r--r-- 1 oldboy incahome 0 Mar 23 17:10 3.txt
[oldgirl@oldboyedu ~]$ touch /oldboy/{a..c}.txt
touch: cannot touch ‘/oldboy/a.txt’: Permission denied
touch: cannot touch ‘/oldboy/b.txt’: Permission denied
touch: cannot touch ‘/oldboy/c.txt’: Permission denied
[oldgirl@oldboyedu ~]$ cd /oldboy/
[oldgirl@oldboyedu /oldboy]$ pwd
/oldboy
[oldgirl@oldboyedu /oldboy]$ ls
2.txt 3.txt
[oldgirl@oldboyedu /oldboy]$ rm -f 2.txt
rm: cannot remove ‘2.txt’: Permission denied
2 测试oldboy
目录权限中x和w与r的配合,以及r和w与x的配合
将文件的权限和用户及组调整为如下属性:
[root@oldboyedu ~]# whoami
root
[root@oldboyedu ~]# chmod 736 /oldboy/
[root@oldboyedu ~]# chown oldboy.incahome /oldboy/
[root@oldboyedu ~]# ls -ld /oldboy/
drwx-wxrw- 2 oldboy incahome 32 Mar 23 17:10 /oldboy/
使用oldgir
用户测试:
[oldgirl@oldboyedu /oldboy]$ whoami
oldgirl
[oldgirl@oldboyedu /oldboy]$ ls -ld /oldboy/
drwx-wxrw- 2 oldboy incahome 32 Mar 23 17:10 /oldboy/
[oldgirl@oldboyedu /oldboy]$ ls /oldboy/
ls: cannot open directory /oldboy/: Permission denied
[oldgirl@oldboyedu /oldboy]$ touch /oldboy/m.txt
[oldgirl@oldboyedu /oldboy]$ cd /oldboy/
[oldgirl@oldboyedu /oldboy]$ ls
ls: cannot open directory .: Permission denied
[oldgirl@oldboyedu /oldboy]$ rm -f m.txt
使用test
用户测试:
[test@oldboyedu ~]$ whoami
test
[test@oldboyedu ~]$ ls -ld /oldboy/
drwx-wxrw- 2 oldboy incahome 32 Mar 23 17:21 /oldboy/
[test@oldboyedu ~]$ ls /oldboy/
ls: cannot access /oldboy/2.txt: Permission denied
ls: cannot access /oldboy/3.txt: Permission denied
2.txt 3.txt
[test@oldboyedu ~]$ ls -l /oldboy/
ls: cannot access /oldboy/2.txt: Permission denied
ls: cannot access /oldboy/3.txt: Permission denied
total 0
-????????? ? ? ? ? ? 2.txt
-????????? ? ? ? ? ? 3.txt
[test@oldboyedu ~]$ touch /oldboy/n.txt
touch: cannot touch ‘/oldboy/n.txt’: Permission denied
[test@oldboyedu ~]$ rm -f /oldboy/3.txt
rm: cannot remove ‘/oldboy/3.txt’: Permission denied
[test@oldboyedu ~]$ cd /oldboy/
-bash: cd: /oldboy/: Permission denied
4 设置及更改文件和目录权限的命令: chmod
参数
- -R 递归设置,对目录下所有文件和子目录生效
(1)用户或用户组的定义:
- u代表属主用户
- g代表属组
- o代表其他用户
- a或者不写,代表所有
(2)权限定义字母
- r代表读权限,用数字4表示
- w代表写权限,用数字2表示
- x代表执行权限,用数字1表示
- -代表没有权限,用数字0表示
(3)权限增减字符定义
- +:添加权限
- -:取消权限
- =:取消其他所有权限,然后赋予给定的权限。
5 修改文件属性的用户和组:chown
chown 用户.用户组 文件 这里的点可以用:替换。
chown 用户 文件
chown .用户组 文件 ====chgrp 用户组 文件
6 企业环境下文件和目录的安全核心知识
- 禁止普通用户删除和创建文件
- 防止用户修改文件内容
- 严苛的安全措施
安全权限临界点:
1 文件不想被修改被执行:644
[root@oldboyedu /oldboy]# touch oldboy.txt
[root@oldboyedu /oldboy]# ls -l
total 4
-rw-r--r-- 1 root root 0 Oct 7 23:21 oldboy.txt
2 目录不想被修改(删除移动创建)被执行(进入):755
[root@oldboyedu ~]# mkdir test
[root@oldboyedu ~]# ls -ld test/
drwxr-xr-x 2 root root 6 Mar 23 17:43 test/
博客:写博客。。。服务器的博客目录和文件的权限,防止被恶意篡改。
企业真实案例:网站文件被恶意修改了。。。。打开网站后有弹窗广告(不是你网站的)
用户打开网站,报警。
原因:权限设置不到位。chmod -R 777 目录 开发人员习惯
解决方案:
1、备份
tar zcvf /opt/oldboy_$(date +%F).tar.gz ./oldboy/
2、找到被修改的文件
[root@oldboyedu /]# find /oldboy -type f |xargs grep 'ddddddddddddd'
/oldboy/oldboy.txt:<script>ddddddddddddd</scripts>
/oldboy/test.sh:<script>ddddddddddddd</scripts>
3、批量删除
[root@oldboyedu /]# find /oldboy -type f |xargs sed -i '/ddddddddddddd/d'
[root@oldboyedu /]# find /oldboy -type f |xargs grep 'ddddddddddddd'
4、找到文件被篡改来源,并优化调整。
亡羊补牢。
5、写总结 故障报告。
7 默认权限掩码及设置命令:umask
1 文件默认权限计算
1)假设umask
值为022(所有位为偶数):
6 6 6 #<-->文件的起始权限值
0 2 2 — #<-->umaskd 值
----------------------
6 4 4
1)假设umask
值为045(所有位为偶数):
6 6 6 #<-->文件的起始权限值
0 4 5 — #<-->umaskd 值
----------------------
6 2 1 #<-->计算出来的权限。由于umask的最后一位数字是奇数5,所以,在其他用户组位在加1
0 0 1 #<-->umask对应的奇数位加1
----------------------
6 2 2 #<-->真实文件权限
2 目录默认权限计算(umask没有奇偶之分)
7 7 7 #<-->目录的起始权限值
0 2 2 — #<-->umaskd 值
----------------------
7 5 5
8 特殊权限位
Linux系统特殊权限位知识
9位基础权限
还有3位特殊权限位
suid位:
suid(setuid)
位通过S字符标识,
存在于基本权限的用户权限位的x权限对应的位置,
如果用户权限位对应的x权限位上有x权限,则suid
就用小写的s标识,
suid
的s对应的数字权限为4,完整权限用八进制数4000表示。sgid位:
sgid(setgid)
位同样是通过S字符来标识,
但是,sgid
位存在于基本权限的用户组权限位的x权限对应的位置,
如果用户组权限位对应的x权限位上有x权限,则sgid
就用小写的s标识,
suid
的s对应的数字权限为2,完整的权限用八进制数2000表示。sticky(粘滞位)
sticky
(粘滞)位通过字符T标识,存在于基本权限的其他用户位对应的x权限位上,
如果其他用户位的x权限位上有x权限,
则sticky
(粘滞)位通过小写的t标识,对应的数字权限是1,
完整的权限用八进制数1000表示。
1 suid相关
"4", "2", "1",加和放在基础权限数字的前面。
修改方法:
[root@oldboyedu /oldboy]# chmod 7755 abc
预测:-rwsr-sr-t
[root@oldboyedu /oldboy]# chmod 7755 abc
[root@oldboyedu /oldboy]# ls -l abc
-rwsr-sr-t 1 root root 0 Oct 7 23:42 abc
[root@oldboyedu /oldboy]# chmod 7644 abc
[root@oldboyedu /oldboy]# ls -l abc
-rwSr-Sr-T 1 root root 0 Oct 7 23:42 abc
工作中有啥用?
suid
到底有什么作用
简单地说,suid
的作用就是让普通用户可以在执行某个设置了suid
位的命令或程序时,拥有和root
管理员一样的身份和权限(默认情况)。
[oldgirl@oldboyedu /]$ ll -ld oldboy/
dr-x-wxrw-. 2 oldboy incahome 6 Oct 7 22:15 oldboy/
oldgirl
属于incahome
,增加一个用户属于incahome
,是不是也和oldgirl
有同样权限。
oldboy
给一个新用户设置suid
,这个新用户的权限就和oldboy
一样。
查看哪些命令默认被设置了suid
位
[root@oldboyedu ~]# find /usr/bin -type f -perm 4755|xargs ls -l
-rwsr-xr-x. 1 root root 64328 Oct 31 00:33 /usr/bin/chage
-rwsr-xr-x. 1 root root 57664 Nov 20 22:22 /usr/bin/crontab
-rwsr-xr-x. 1 root root 32096 Oct 31 05:32 /usr/bin/fusermount
-rwsr-xr-x. 1 root root 78272 Oct 31 00:33 /usr/bin/gpasswd
-rwsr-xr-x. 1 root root 44320 Oct 31 06:48 /usr/bin/mount
-rwsr-xr-x. 1 root root 41872 Oct 31 00:33 /usr/bin/newgrp
-rwsr-xr-x. 1 root root 27832 Jun 10 2014 /usr/bin/passwd
-rwsr-xr-x. 1 root root 23656 Oct 31 06:26 /usr/bin/pkexec
-rwsr-xr-x. 1 root root 32208 Oct 31 06:48 /usr/bin/su
-rwsr-xr-x. 1 root root 32048 Oct 31 06:48 /usr/bin/umount
suid
核心知识小结
1):suid
功能是针对二进制命令或程序的,不能用在Shell
等类似脚本文件上。
2):用户对应的前三位权限的x为上,如果有s(S)就表示具备suid
权限。
3):suid
的作用就是让普通用户可以在执行某个设置了suid
的命令或程序时,拥有和属主(一般是root
)一样的身份和权限。
4):二进制命令程序需要有可执行权限x配合才行。
5):suid
对应的身份和权限仅在程序命令执行过程中有效。
6):suid
是一把双刃剑,是一个比较危险的功能,对系统安全有一定的威胁,企业里用户授权可以使用sudo
等替代suid
7):在进行安全优化时,系统默认设置的suid
权限要取消掉。
2 sgid相关
作用之一:
sgid
的作用就是让普通用户可以在执行某个设置了sgid
位的命令时,
拥有和命令对应用户组(一般为root用户组)一样的身份和权限(默认)。
locate
搜索内容,默认从updatedb
对应的数据库中查找
updatedb
更新locate
查找内容对应的数据库。
[root@oldboyedu ~]# updatedb
[root@oldboyedu ~]# ls -l /var/lib/mlocate/mlocate.db
-rw-r----- 1 root slocate 1977042 Oct 8 00:47 /var/lib/mlocate/mlocate.db
[root@oldboyedu ~]# file /var/lib/mlocate/mlocate.db
/var/lib/mlocate/mlocate.db: data
sgid
基于目录的作用:
让不同的人创建文件属于相同的用户组,从而可以互相共享文件的权限。
sgid
核心知识小结
1)与suid不同的是,sgid
既可以针对文件,也可以针对目录设置;
2)sgid
的权限是针对用户组权限位的。
- 对应文件来说,
sgid
的功能如下:
1)sgid
仅对二进制命令及程序有效;
2)二进制命令或程序,也需要有可执行权限x配合;
3)执行命令的任意用户可以获得该命令执行期间所属组的身份和权限。 - 对于目录(继承目录所属的组)来说,
sgid
的功能如下:
1)linux
里默认情况所有用户创建文件,默认用户和组都是自身。
2)sgid
可以让用户在此目录下创建的文件和目录具有和此目录相同的用户组设置