#查看一下权限
[root@master ~]# ls -ld /data/ /data/1.txt
drwxr-xr-x 3 root root 100 6月 26 21:55 /data/
-rwxr-xr-x 1 root root 0 6月 26 06:59 /data/1.txt
文件的权限:
r:代表可读
w:代表可写
x:代表可执行;
r:可读 | w:可写 | x:可执行 | |
---|---|---|---|
对文件 | 可以cat、more、less | 可以vim | 执行程序 |
对目录 | 可以ls | 可以mv/rm/cp | 可以cd |
文件的所有者:
文件的所属组:
其他人:
#liangjiawei创建的文件,所有者和所属组都是liangjiawei
[liangjiawei@master ~]$ ll
总用量 0
-rw-rw-r-- 1 liangjiawei liangjiawei 0 6月 27 06:55 liangjiawei.txt
#如果目录没有开放w权限,那么用户是无法创建文件的
#换句话来说,文件的增删改查是由上级目录的w决定的;
[liangjiawei@master ~]$ touch /data/liangjiawei
touch: 正在设置"/data/liangjiawei" 的时间: 权限不够
[liangjiawei@master ~]$ ll -ld /data
drwxr-xr-x 3 root root 100 6月 26 21:55 /data
#因为liangjiawei用户对于data目录来说是其他人,而其他人是不具备w权限的,
#所以它无法添加文件;
作用:修改文件的所有者或者所属组
语法:chown+【所有者:所属组】+文件名
#改变文件所有者和所属组的几种表达方式;
[root@master ~]# chown user2: /data/1.txt
[root@master ~]# ll /data/1.txt
-rwxr-xr-x 1 user2 user2 0 6月 26 06:59 /data/1.txt
[root@master ~]# ll /data/1.txt
-rwxr-xr-x 1 liangjiawei liangjiawei 0 6月 26 06:59 /data/1.txt
[root@master ~]# chown :user3 /data/1.txt
[root@master ~]# ll /data/1.txt
-rwxr-xr-x 1 liangjiawei user3 0 6月 26 06:59 /data/1.txt
[root@master ~]# chown root:root /data/1.txt
[root@master ~]# ll /data/1.txt
-rwxr-xr-x 1 root root 0 6月 26 06:59 /data/1.txt
[root@master ~]# chown liangjiawei /data/1.txt
[root@master ~]# ll /data/1.txt
-rwxr-xr-x 1 liangjiawei root 0 6月 26 06:59 /data/1.txt
[root@master ~]# chown .liangjiawei /data/1.txt
[root@master ~]# ll /data/1.txt
-rwxr-xr-x 1 liangjiawei liangjiawei 0 6月 26 06:59 /data/1.txt
作用:修改文件或者目录的默认属组
语法:chgrp+用户组+文件名
选项:
[root@master ~]# chgrp root /data/1.txt
[root@master ~]# ll /data/1.txt
-rwxr-xr-x 1 liangjiawei root 0 6月 26 06:59 /data/1.txt
文件权限的验证试验
#首先把/data/目录开放全
[root@master ~]# chmod 777 /data/
[root@master ~]# ll -d /data/
drwxrwxrwx 3 root root 100 6月 26 21:55 /data/
#创建一个文件
#文件的所有者、所属组都是root
[root@master ~]# touch /data/a.txt
[root@master ~]# ll /data/a.txt
-rw-r--r-- 1 root root 0 6月 27 07:26 /data/a.txt
[root@master ~]# echo "i learn linux "> /data/a.txt
#切换liangjiawei用户,相当于文件的其他人
[liangjiawei@master ~]$ cat /data/a.txt
i learn linux
#但是不能修改
[liangjiawei@master ~]$ echo liangjiawei >> /data/a.txt
-bash: /data/a.txt: 权限不够
#又是可以删除文件
[liangjiawei@master ~]$ rm -rf /data/a.txt
[liangjiawei@master ~]$ ll /data/
总用量 0
作用:修改权限的命令
语法:chmod+【ugoa】【±=】+【rwx】+文件名
选项解释:
#直接赋予权限
[root@master ~]# chmod u=rwx,g=r-x,o=r-x /data/
[root@master ~]# ll -d /data/
drwxr--r-- 2 root root 6 6月 27 07:28 /data/
[root@master ~]# touch /data/aa.txt
[root@master ~]# ll /data/aa.txt
-rw-r--r-- 1 root root 0 6月 27 07:32 /data/aa.txt
#减少权限
[root@master ~]# chmod u-w /data/aa.txt
[root@master ~]# ll /data/aa.txt
-r--r--r-- 1 root root 0 6月 27 07:32 /data/aa.txt
八进制的换算规则
权限 | 二进制 | 八进制 | 描述 |
---|---|---|---|
— | 000 | 0 | 没有任何权限 |
–x | 001 | 1 | 只有执行权限 |
-w- | 010 | 2 | 只有写入权限 |
-wx | 011 | 3 | 只有写入和执行权限 |
r– | 100 | 4 | 只有只读权限 |
r-x | 101 | 5 | 可读可执行权限 |
rw- | 110 | 6 | 可读可写权限 |
rwx | 111 | 7 | 可读可写可执行权限 |
因此对应的算法是:
所以满权限是rwxrwxrwx相当于数字法的777
#数字法修改文件的权限
[root@master ~]# chmod 755 /data/
[root@master ~]# ll -ld /data/
drwxr-xr-x 2 root root 20 6月 27 07:32 /data/
[root@master ~]#
文件权限对于目录和文件的作用
权限 | 对文件的影响 | 对目录的影响 |
---|---|---|
可读r | 可以读取文件内容 | 可以列出目录内容 |
可写w | 可以写入、修改文件内容 | 可以删除、创建目录下的文件 |
可执行x | 可以作为程序执行内容 | 可以进入到目录 |
文件默认创建的权限是644
目录默认创建的权限是755
umask命令允许你设定文件创建时的缺省模式,对应每一类用户(文件属主、同组用户、其他用户)存在一个相应的umask值中的数字
修改umask值
[root@master ~]# vim /etc/profile
............
if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
umask 002
else
umask 022
fi
...........
#解释说明
if语句判断
$UID -gt 199:uid是否大于等于199
&&:这个代表并且的意思
"`/usr/bin/id -gn`" = "`/usr/bin/id -un`" :这里代表用户的UID是否和GID相等,
#临时修改umask
[root@master ~]# umask
0022
[root@master ~]# umask -S
u=rwx,g=rx,o=rx
[root@master ~]# umask 033
[root@master ~]# umask -S
u=rwx,g=r,o=r
权限的算法:
默认的文件属性:666
umask值为022
那么正常的文件权限是:666-022=644
默认的目录属性是:777
umask值为022
那么正常的目录权限是:777-022=755
那么问题来了:如果默认的掩码值是033,那么对应的权限又是怎么说?
我们借此来引入真正的权限的科学计算方法:
如果掩码值:033
文件的权限:666
目录的权限:777
应该是与的结果,与就是相同才不变
文件权限:666 掩码值033
110 110 110 000 011 011
111 100 100 #这个是掩码的取反值
110 110 110 #文件的满权限666
111 100 100 #掩码的取反值
-----------
110 100 100 #与的结果
最后得出的是644 这个就是掩码值033的最后文件权限;
通过案例分析
#正常来说,用户是可以自己修改自己的密码的,
#修改自己的密码,代表要写入这两个文件,但是这两个的权限是完全是没有权限的;
[root@master ~]# ll /etc/passwd
-rw-r--r-- 1 root root 2349 6月 26 21:57 /etc/passwd
[root@master ~]# ll /etc/shadow
---------- 1 root root 1622 6月 27 06:27 /etc/shadow
#真正的原因就是passwd命令
[root@master ~]# which passwd
/usr/bin/passwd
[root@master ~]# ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 27832 1月 30 2014 /usr/bin/passwd
#我们切换一下liangjiawei用户,它也不可能用cat查看到/etc/shadow文件
[liangjiawei@master ~]$ cat /etc/shadow
cat: /etc/shadow: 权限不够
#我们把cat命令设定suid就能完成
#cat命令直接标红显示,十分危险
[root@master ~]# which cat
/usr/bin/cat
[root@master ~]# chmod u+s /usr/bin/cat
[root@master ~]# ll /usr/bin/cat
-rwsr-xr-x. 1 root root 54080 6月 30 2016 /usr/bin/cat
[root@master ~]# su - liangjiawei
上一次登录:日 6月 27 08:32:42 CST 2021pts/0 上
[liangjiawei@master ~]$ cat /etc/shadow
root:$6$U7Z0DI9f$T/Zc075ODe.HAdo1ZIasuBkpJxSbE1AOBXC9MjJJcjYNqGeanfwMOEWPjVTiISBovP7ErxZYaqiANPehcXz7B1:18804:0:99999:7:::
#把/data/目录设定一个sgid
[root@master ~]# chmod 4777 /data/
[root@master ~]# ll /data/ -d
drwsrwsrwx 2 root root 20 6月 27 07:32 /data/
#切换liangjiawei用户创建文件,发现所属组都是root的
[root@master ~]# su - liangjiawei
上一次登录:日 6月 27 08:33:55 CST 2021pts/0 上
[liangjiawei@master ~]$ cd /data/
[liangjiawei@master data]$ touch liangjiawei
[liangjiawei@master data]$ ll liangjiawei
-rw-rw-r-- 1 liangjiawei root 0 6月 27 08:37 liangjiawei
#系统目录默认的是/tmp具有sbit
[root@master ~]# ll -d /tmp/
drwxrwxrwt. 10 root root 4096 6月 27 08:38 /tmp/
#用户user2在tmp下创建文件
[root@master ~]# su - user2
上一次登录:六 6月 26 12:16:23 CST 2021pts/0 上
最后一次失败的登录:六 6月 26 21:30:08 CST 2021从 192.168.75.1ssh:notty 上
最有一次成功登录后有 1 次失败的登录尝试。
su: 警告:无法更改到 /home/user2 目录: 没有那个文件或目录
-bash-4.2$ touch /tmp/user2
-bash-4.2$ ll /tmp/user2
-rw-rw-r-- 1 user2 user2 0 6月 27 08:39 /tmp/user2
-bash-4.2$ echo hahah >> /tmp/user2
-bash-4.2$ cat /tmp/user2
hahah
#用户liangjiawei无法修改或者删除user2的文件
[root@master ~]# su - liangjiawei
上一次登录:日 6月 27 08:37:06 CST 2021pts/0 上
[liangjiawei@master ~]$ echo liangjiawei > /tmp/user2
-bash: /tmp/user2: 权限不够
[liangjiawei@master ~]$ rm -rf /tmp/user2
rm: 无法删除"/tmp/user2": 不允许的操作
acl:是文件控制访问,
作用:设置文件控制访问;
语法:setfacl+【选项】+【ugo】:【用户】:【rwx】+文件名
选项:
#给文件设置acl权限;
[root@master data]# setfacl -m u:liangjiawei:rwx aa.txt
#删除一条acl规则
[root@master data]# setfacl -x u:user2 aa.txt
[root@master data]# getfacl aa.txt
# file: aa.txt
# owner: root
# group: root
user::r--
user:liangjiawei:rwx
group::r--
mask::rwx
other::r--
#删除所有的acl权限
[root@master data]# setfacl -b aa.txt
[root@master data]# getfacl aa.txt
# file: aa.txt
# owner: root
# group: root
user::r--
group::r--
other::r--
作用:查看默认的acl权限
语法:getfacl+文件名
[root@master data]# getfacl aa.txt
# file: aa.txt
# owner: root
# group: root
user::r--
user:user2:rw-
user:liangjiawei:rwx
group::r--
mask::rwx
other::r--
众所周知,root是linux系统的最高管理者;
所以还有一些措施来限制root;
作用:给文件设置隐藏权限
语法:chattr+【选项】+文件名
选项:
作用:查看隐藏权限
语法:lsattr+文件名
[root@master data]# lsattr aa.txt
---------------- aa.txt
测试:连root都无法删除的文件
#给aa.txt文件设置i权限
[root@master data]# chattr +i aa.txt
[root@master data]# echo aaa >> aa.txt
-bash: aa.txt: 权限不够
#尝试删除文件、
[root@master data]# rm -rf aa.txt
rm: 无法删除"aa.txt": 不允许的操作
#再换个,让文件设置a权限
#root是可以追加文件到aa.txt
[root@master data]# chattr +a aa.txt
[root@master data]# echo aaaa >> aa.txt
[root@master data]# cat aa.txt
aaaa
#我们尝试修改文件内容
[root@master data]# echo bb > aa.txt
-bash: aa.txt: 不允许的操作
#我们在尝试删除文件
[root@master data]# rm -rf aa.txt
rm: 无法删除"aa.txt": 不允许的操作
#添加a属性也无法删除文件
#查看文件的隐藏属性
[root@master data]# lsattr aa.txt
-----a---------- aa.txt