权限及权限管理详解
Linux操作系统的安全模型是三位一体的,每一个系统中的文件都有三类用户,三类用户分别为:
->属主(user:一般用u代替)
->属组(group:一般用g代替)
->其他用户(other:一般用o代替)
并且每一类用户都被定义了三种权限,分别是r(读权限)、w(写权限)、x(执行权限):
->r权限对于文本文件来说表示可以使用cat、more以及less等命令来查看文件的内容
对于目录来说表示可以对此目录使用ls命令,但是不可以切换进此目录,也不能对目录使用ls -l命令
注意:实验测试可以!
->w权限对于文本文件来说表示可以编辑这个文件,也可以删除这个文件
对于目录来说表示可以在此目录中创建文件
->x权限对于文本文件来说表示该文件可以被执行,即可以将该文件提交给内核来判断该文件的执行方式,并且将该文件运行起来,也就是由内核来启动一个进程
对于目录来说表示可以对此目录使用cd以及ls -l等命令来查看目录里面文件的详细的属性信息
·chown命令
chown命令是一个改变文件属主与属组的命令,只有管理员才可以执行这个命令
使用格式:chown [options] USERNAME file...
不加任何选项表示将这些文件的属主改为该用户,对目录同样有效,但是不加选项表示只改变目录的属主,但是不改变目录里面相关文件的属主
-R选项表示,连同目录里面的文件的属主也一同修改
--reference(参考)=/path/to/file file...选项表示,reference后面跟的文件路径作为参考,将目标的文件的属主属组改为和参考路径一样
chown命令还可以同时改变文件或目录的属主和属组,使用格式:
chown USERNAME:GRPNAME file... = chown USERNAME.GRPNAME file...
并且支持-R选项以及--reference功能:
chown命令还可以只改变文件或目录的属组而不改变文件的属主,使用格式:
chown :GRPNAME file... = chown .GRPNAME file...
并且也同样支持-R选项:
·chgrp命令
chgrp是一个改变文件或目录的属组的命令,只有管理员才可以使用此命令:
使用格式:chgrp GRPNAME file...
支持-R选项:
支持--reference功能:
·chmod命令
chmod(mod=mode->权限模型)是一个用来修改文件或者目录权限的命令
修改文件或目录的权限分为三种情况:
->修改三类用户的权限
使用格式:chmod MODE(三位数字权限,如果只写两位数字则第一位数字默认为0,如果只写一位数字则前两位数字为0) file.../dir...
支持-R选项:
支持--reference功能:
->修改某类用户或某些类用户的权限
Linux的三类用户分别为u:属主,g:属组,o:其他用户,a:所有用户
使用格式:chmod 用户类别=MODE(rwx),用户类别=MODE(rwx),... file.../dir...
如果用户类别所要赋予的权限相同的时候,可以将用户类别写在一起一并赋予权限,而不用将用户类别用逗号隔开,用户类别后面的等号什么都不写表示不赋予任和权限:
->修改某类用户的某位或某些位权限
使用格式:chmod 用户类别+/-MODE(rwx),用户类别+/-MODE(rwx),... file.../dir...
如果要给某些位赋予相同的权限,则可以将用户类别写在一起,并一并赋予权限,而不用将用户类别用逗号隔开
也可以同时给三类用户同时赋予某位或某些位权限,使用格式:
chmod a+/-MODE(rwx) file.../dir... = chmod +/-MODE(rwx) file.../dir..
练习:
1,新建一个没有家目录的用户openstack
2,复制/etc/skel到/home/openstack
3,改变/home/openstack及其内部文件的属主属组均为openstack
4,/home/openstack及其内部文件的属组和其他用户没有任何访问权限
以上就是我们创建一个新用户的完整过程,新建一个用户的时候,我们给用户复制家目录,即将/etc/skel目录复制为用户的家目录,并且还要将用户家目录的属主和属组都改为用户和用户的基本组,并且还要改变用户家目录的权限,使得除了属主之外,属组和其他用户不能有任何访问权限,最后还要给用户一个密码
练习:
纯手动创建一个用户hive,并且使得用户hive的基本组为hive(5000),附加组为mygroup
1,首先在/etc/passwd文件中新加一个hive条目,表示命令新添加一个hive用户
2,在/etc/group文件中按题目要求添加一个基本组hive,并且gid=5000,还得有一个附加组mygroup
3,在/etc/shadow文件中添加用户的账号属性条目
上图中的!!表示密码待添加的意思
4,我们可以使用id命令来检验我们刚刚的改动是否生效了
看来是生效了
5,我们还可以使用openssl命令将用户的加密密码写入/etc/shadow文件中
openssl passwd -1(指定加密算法) -salt '指定字符'命令在指定用户的密码的时候可以生成用户的加密密码,从而我们可以将该加密密码写入/etc/shadow文件中从而指定了用户的密码,我们输入的salt一样,指定的密码也一样的情况下,加密密码即输出一定一样,这就是我们的单向加密,所谓的提取数据的特征码
6,将生成的加密密码写入/etc/shadow文件中
上图中的0表示不限定密码的最短使用期限
99999表示不限定密码的最常使用期限
7,接下来就是给用户复制家目录,并且改变用户家目录的属主属组以及家目录的权限
温故:date+%s命令表示从计算机元年到此刻所经历的秒数,一天是86400秒,bc是系统自带的计算器,quit可以退出bc计算器
结果是17053,这就是为什么我们/etc/shadow文件中的上次修改密码时间得字段显示的是17053天的原因,bc计算器默认的计算结果是圆整的,如果要使得计算结果带精度,则可以使用scale=#来指定精度,#表示保留#位的精度:
·Linux的内在法则
文件默认都没有执行权限,如果文件不小心有了执行权限,Linux会自动给拥有文件执行权限的用户类别的权限加1
·umask
umask:遮罩码,系统的默认权限
对于用户来说新建一个文件的默认权限就是666-umask,新建一个目录的默认权限就是777-umask,umask命令不加任何选项表示显示当前用户的umaks:
umask命令还可以用来设定umaks:
不过这种设定方式是临时的,重启主机之后还是会恢复为原来的umask
在权限的计算中,6-7不等于-1而等于0:
·用户的登录
我们的用户在登录系统之后,事实上系统就给用户打开了一个shell,shell本身是一个可执行程序,也就是一个软件,程序的配置属性是在其配置文件当中的,站在用户的角度来讲shell分为两类:
->登录式shell
正常通过某终端登录的shell,使用su - USERNAME或者su -l USERNAME命令切换过区的shell也被称为登录式shell
->非登录式shell
使用su USERNAME命令切换过去的shell称为非登录式shell,在图形终端下打开的命令窗口也称为非登录式shell,自动执行的shell脚本也被称为非登录式shell
在讨论shell之前我们先来讨论一下bash的配置文件,bash的配置文件按作用范围可以分为:
->全局配置
全局配置文件都有/etc/profile、/etc/profile.d/*.sh以及/etc/bashrc,我们编辑这些文件中的任何一个都会对系统中的每一个用户都生效
->个人配置
个人配置文件都有~/.bash_profile以及~/.bashrc,我们编辑这些文件中的任何一个只会对当前用户生效
bash的配置文件按照类型来分,也可以分为两类:
->profile类的文件
profile类文件的作用:
1,设定环境变量
如果我们设定的环境变量在全局配置和个人配置中都存在的话,那么以个人配置中的设定为准,即作用范围越小的越是最终生效的,这种法则在以后的很多配置中都是成立的
2,运行命令或脚本
比如我们可以在用户登录系统之前,执行一些脚本,做一些准备工作:
3,可以设定umask
->bashrc类的文件
bashrc类的文件的作用:
1,用来设定本地变量
本地变量和环境变量的作用域不同
2,用来定义命令别名
我们的登录式shell读取这些配置文件的顺序是:/etc/profile->/etc/profile.d/*.sh->~/.bash_profile->~/.bashrc->/etc/bashrc,非登录式shell读取这些文件的顺序是~/.bashrc->/etc/bahsrc->/etc/profile.d/*.sh,我们的su - USERNAME命令被称为完全切换,su USERNAME被称为半切换,因为它不读取用户的环境设定文件,bash也被称为脚本的解释器