本文已参与「新人创作礼」活动, 一起开启掘金创作之路。
第四章 Linux用户组和权限管理
1.Linux中的目录和文件的权限区别?(分别说明读,写和执行权限的区别)
对文件的权限:
r 可使用文件查看类工具,比如:cat,可以获取其内容
w 可修改其内容
x 可以把此文件提请内核启动为一个进程,即可以执行(运行)此文件(此文件的内容必须是可执行)
对目录的权限:
r 可以使用ls查看此目录中文件列表
w 可在此目录中创建文件,也可删除此目录中的文件,而和此被删除的文件的权限无关
x 可以cd进入此目录,可以使用ls -l查看此目录中文件元数据(须配合r权限),属于目录的可访问的最小权限
X 只给目录x权限,不给无执行权限的文件x权限
2.执行cp /etc/issue /data/dir 所需要的最小权限?
[root@centos8 ~]# cd /data
[root@centos8 data]# ls
[root@centos8 data]# mkdir dir
[root@centos8 data]# cp /etc/issue dir/
[root@centos8 data]# ll dir/issue
-rw-r--r--. 1 root root 23 Nov 20 22:39 dir/issue
[root@centos8 data]# chmod a= dir
[root@centos8 data]# ll
total 0
d---------. 2 root root 19 Nov 20 22:39 dir
#文件夹没有权限。
[root@centos8 data]# su neteagle
[neteagle@centos8 data]$ cp dir/issue ~
cp: cannot stat 'dir/issue': Permission denied #没有权限。
[neteagle@centos8 data]$ exit
exit
[root@centos8 data]# ll
total 0
d---------. 2 root root 19 Nov 20 22:39 dir
[root@centos8 data]# chmod o+x dir
[root@centos8 data]# ll dir/issue
-rw-r--r--. 1 root root 23 Nov 20 22:39 dir/issue
[root@centos8 data]# su neteagle
[neteagle@centos8 data]$ cp dir/issue ~
[neteagle@centos8 data]$ ll ~/issue
-rw-r--r--. 1 neteagle neteagle 23 Nov 20 22:43 /home/neteagle/issue
[neteagle@centos8 data]$ ll
total 0
d--------x. 2 root root 19 Nov 20 22:39 dir
#说明这个文件夹只要有执行权限,就能进去,进去就能复制
[neteagle@centos8 data]$ exit
exit
[root@centos8 data]# ll dir/issue
-rw-r--r--. 1 root root 23 Nov 20 22:39 dir/issue
[root@centos8 data]# chmod a= dir/issue
[root@centos8 data]# ll dir/issue
----------. 1 root root 23 Nov 20 22:39 dir/issue
[root@centos8 data]# su neteagle
[neteagle@centos8 data]$ cp dir/issue ~/issue2
cp: cannot open 'dir/issue' for reading: Permission denied
#如果文件没有任何权限,不能复制。
[neteagle@centos8 data]$ exit
exit
[root@centos8 data]# chmod o+x dir/issue
[root@centos8 data]# ll dir/issue
---------x. 1 root root 23 Nov 20 22:39 dir/issue
[root@centos8 data]# su neteagle
[neteagle@centos8 data]$ cp dir/issue ~/issue3
cp: cannot open 'dir/issue' for reading: Permission denied #文件有执行权限是不能复制
[neteagle@centos8 data]$ exit
exit
[root@centos8 data]# ll dir
total 4
---------x. 1 root root 23 Nov 20 22:39 issue
[root@centos8 data]# chmod o=r dir/issue
[root@centos8 data]# ll dir/issue
-------r--. 1 root root 23 Nov 20 22:39 dir/issue
[root@centos8 data]# su neteagle
[neteagle@centos8 data]$ cp dir/issue ~/issue4
[neteagle@centos8 data]$ ll ~/issue4
-------r--. 1 neteagle neteagle 23 Nov 20 22:48 /home/neteagle/issue4
#文件有读权限,就可以复制
[neteagle@centos8 data]$ exit
exit
[root@centos8 data]# mkdir dir2
[root@centos8 data]# chmod a= dir2
[root@centos8 data]# ll
total 0
d--------x. 2 root root 19 Nov 20 22:39 dir
d---------. 2 root root 6 Nov 20 22:49 dir2
[root@centos8 data]# su neteagle
[neteagle@centos8 data]$ ll dir/issue
-------r--. 1 root root 23 Nov 20 22:39 dir/issue
[neteagle@centos8 data]$ cp dir/issue dir2/
cp: cannot stat 'dir2/issue': Permission denied
#文件夹没有权限,复制不了。
[neteagle@centos8 data]$ exit
exit
[root@centos8 data]# ll
total 0
d--------x. 2 root root 19 Nov 20 22:39 dir
d---------. 2 root root 6 Nov 20 22:49 dir2
[root@centos8 data]# chmod o+w dir2
[root@centos8 data]# ll
total 0
d--------x. 2 root root 19 Nov 20 22:39 dir
d-------w-. 2 root root 6 Nov 20 22:49 dir2
[root@centos8 data]# su neteagle
[neteagle@centos8 data]$ cp dir/issue dir2/
cp: cannot stat 'dir2/issue': Permission denied
#文件夹只有写权限不能复制。
[neteagle@centos8 data]$ exit
exit
[root@centos8 data]# ll
total 0
d--------x. 2 root root 19 Nov 20 22:39 dir
d-------w-. 2 root root 6 Nov 20 22:49 dir2
[root@centos8 data]# chmod o=x dir2
[root@centos8 data]# ll
total 0
d--------x. 2 root root 19 Nov 20 22:39 dir
d--------x. 2 root root 6 Nov 20 22:49 dir2
[root@centos8 data]# su neteagle
[neteagle@centos8 data]$ cp dir/issue dir2/
cp: cannot create regular file 'dir2/issue': Permission denied
#光加执行不能复制。
[neteagle@centos8 data]$ exit
exit
[root@centos8 data]# chmod o=wx dir2/
[root@centos8 data]# su neteagle
[neteagle@centos8 data]$ ll
total 0
d--------x. 2 root root 19 Nov 20 22:39 dir
d-------wx. 2 root root 6 Nov 20 22:49 dir2
[neteagle@centos8 data]$ cp dir/issue dir2/
#加执行和写,可以复制
[neteagle@centos8 data]$ exit
exit
[root@centos8 data]# cd
[root@centos8 ~]# ll -d /data
drwxr-xr-x. 4 root root 29 Nov 20 22:49 /data
[root@centos8 ~]# chmod a= /data
[root@centos8 ~]# su neteagle
[neteagle@centos8 root]$ cp /data/dir/issue /data/dir2/issue2
cp: failed to access '/data/dir2/issue2': Permission denied
#/date目录没有权限,也不能复制
[neteagle@centos8 root]$ exit
exit
[root@centos8 ~]# ll -d /data
d---------. 4 root root 29 Nov 20 22:49 /data
[root@centos8 ~]# chmod o+x /data
[root@centos8 ~]# ll -d /data
d--------x. 4 root root 29 Nov 20 22:49 /data
[root@centos8 ~]# su neteagle
[neteagle@centos8 root]$ cp /data/dir/issue /data/dir2/issue2
#/data目录有执行权限,就可以复制。
[neteagle@centos8 root]$ exit
exit
[root@centos8 ~]# which cp
alias cp='cp -i'
/usr/bin/cp
[root@centos8 ~]# ll /bin/cp
-rwxr-xr-x. 1 root root 333128 Apr 10 2020 /bin/cp
[root@centos8 ~]# chmod a= /bin/cp
[root@centos8 ~]# su neteagle
[neteagle@centos8 root]$ cp /data/dir/issue /data/dir2/issue3
bash: /usr/bin/cp: Permission denied
#cp没有权限,不能复制。
[neteagle@centos8 root]$ exit
exit
[root@centos8 ~]# ll /bin/cp
----------. 1 root root 333128 Apr 10 2020 /bin/cp
[root@centos8 ~]# chmod o+x /bin/cp
[root@centos8 ~]# ll /bin/cp
---------x. 1 root root 333128 Apr 10 2020 /bin/cp
[root@centos8 ~]# su neteagle
[neteagle@centos8 root]$ cp /data/dir/issue /data/dir2/issue4
#cp 有执行权限就可以复制
[neteagle@centos8 root]$ exit
exit
总结:
/bin/cp 需要x权限。
/etc 需要x权限。
/etc/issue 需要r权限。
/data 需要x权限。
/data/dir 需要w ,x权限。
3.linux权限管理体系
linux文件权限管理
Linux系统中的每个文件和目录都有访问许可权限,用它来确定谁可以通过何种方式对文件和目录进行访问和操作。
每一文件或目录的访问权限都有三组,每组用三位表示,分别为文件属主的读、写和执行权限;与属主同组的用户的读、写和执行权限;系统中其他用户的读、写和执行权限。
r:文件:读取文件内容;目录:浏览目录
w:文件:修改文件内容;目录:删除、移动目录内文件,但必须同时又x权限
x:文件:执行文件;目录:进入目录
用户可以利用Linux系统提供的chmod命令来重新设定不同的访问权限。也可以利用chown命令来更改某个文件或目录的所有者。
语法:chmod ugoa...[perms...]...] file
特殊权限对应的数字
- suid 4000权限字符s(S),属主位上的x位上设置。
- sgid 2000权限字符s(S),属组位上的x位上设置。
- 粘滞位1000权限字符t(T),其他用户位的x位上设置。如何才能使一个目录既可以让任何用户写入文件,又不让用户删除这个目录下他人的文件,sticky就是能起到这个作用。stciky一般只用在目录上,用在文件上起不到什么作用。
如果对应位有x则,字符权限表现为小写,否则表现为大写
linux用户权限管理
在所有Linux系统中,系统都是通过UID来区分用户权限级别的,而UID为0的用户被系统约定为是具有超级权限。我们可以通过/etc/passwd 来查得UID为0的用户是root, root可以超越任何用户和用户组来对文件或目录进行读取、修改或删除。对可执行程序的执行、终止;对硬件设备的添加、创建和移除等;也 可以对文件和目录进行属主和权限进行修改,以适合系统管理的需要。
与超级用户相对的就是普通用户和虚拟(也被称为伪装用户),普通和伪装用户都是受限用户;但为了完成特定的任务,普通用户和伪装用户也是必须的;Linux 是一个多用户、多任务的操作系统,多用户主要体现在用户的角色的多样性,不同的用户所分配的权限也不同;在一般情况下,为了系统安全,对于一般常规级别的应用,不需要root用户来操作完成
当我们以普通权限的用户登录系统时,有些系统配置及系统管理必须通过超级权限用户完成,获取超级权限的过程,就是切换普通用户身份到超级用户身份的过程;这个过程主要是通过su和sudo来解决。
通过su可以在用户之间切换,超级权限用户root向普通或虚拟用户切换不需要密码,而普通用户切换到其它任何用户都需要密码验证;su命令参数如下:
-, -l, --login 登录并改变到所切换的用户环境
-c, --commmand=COMMAND 执行一个命令,然后退出所切换到的用户环境
su不加任何参数默认切换到root用户下,但用户环境变量没有改变;仅仅加-参数,表示默认切换到root用户,并且改变到root用户的环境;
但通过su切换到root后,也有不安全因素;比如系统有10个用户,而且都参与管理。如果这10个用户都涉及到超级权限的运用,做为管理员如果想让其它用户通过su来切换到超级权限的root,必须把root权限密码都告诉这10个用户;如果这10个用户都有root权限,通过root权限可以做任何事, 这在一定程度上就对系统的安全造成了威协;所以su工具在多人参与的系统管理中,并不是最好的选择,su只适用于一两个人参与管理的系统。
对于服务器的管理有多人参与管理时,这时我们就有必要用到sudo,通过sudo,我们能把某些超级权限有针对性的下放,并且不需要普通用户知道root密码,所以sudo相对于权限无限制性的su来说,还是比较安全的。sudo 执行命令的流程是当前用户切换到root(或其它指定切换到的用户),然后以root(或其它指定的切换到的用户)身份执行命令,执行完成后,直接退回到当前用户;而这些的前提是要通过sudo的配置文件/etc/sudoers来进行授权;我们可以用他的专用编辑工具visudo,此工具的好处是在添加规则不太准确时,保存退出时会提示给我们错误信息;配置好后,可以用切换到您授权的用户下,通过sudo -l 来查看哪些命令是可以执行或禁止的。之后可以在授权的命令前加sudo以root用户身份执行。