一、权责分明,才能愉快地玩耍起来
- 话说Linux属于实打实的多用户的操作系统,虽然它没有可视化的界面,但是它允许多用户同时登陆到系统并使用资源。每个用户都有属于自己的文件、进程、任务和工作环境,使得Linux在运行时有条不紊。
可以试想,如果普通用户可以有关机权限,那天下还不大乱。[嘿嘿] 在Linux下,用户分为三类:超级用户、系统用户和普通用户
- 超级用户(root),具有一切权限,绝对的权力导致绝对的危险,所有一般只有进行系统维护或者其他必要的情况下才使用root身份登录,以免出现安全问题。
- 系统用户(system account),是Linux系统正常工作所必需的内建的用户,也被称为虚拟用户,它们不能用来登录,如bin、daemon、adm、lp等用户,这些虚拟用户都是为了系统进程对文件属主的要求而建立的。
- 而普通用户(login-account),是我们接触的最多的用户角色。它们是为了使用者更好的使用Linux系统资源而建立的。
- Linux系统为不同的用户设置编号UID,不同的用户具有不同的UID,也就是姓名和身份证的关系,可能具有相同姓名但是身份证全国唯一,政府通过身份证管理百姓,Linux系统依靠UID来准确的识别用户,再分配权限。
root的UID是0,系统用户的UID是1-499,普通用户的UID是500-60000。
思考为什么需要这么设置?
Linux系统的大部分权限和安全的管理依赖于对文件权限(读、写、执行)的管理,而用户是文件权限的拥有者。
比如,当应用需要访问或操作或拥有系统的资源时,Linux会通过用户控制系统用户来实现,而不是普通用户自己取得相对应的权限,再去直接控制实现。
二、分享才能更加快乐
无论是哪种用户,都可以将自己的安全的分享出去。
我们知道Linux不区分文件的类型,一视同仁。现在有a文件有三种权限:读r、写w、执行x,a文件的三种权限都属于它的owner,假设叫1号。
如果另一用户2号也想用它怎么办,我们没必要为2号再新建一个同样的文件来满足要求,我们可以在不改变a文件所有者的情况下,分享一部分需要的权限给2号用户。因此对于a文件来说,此时有三种用户:所有者owner、2号用户(有部分权限)、其他用户(没有权限)。
对于文件权限而言,Linux文件有三种权限:属主权限、用户组权限、其他用户权限。
每个用户至少属于一个用户组,每个用户组可以包含多个用户,而且用户组内的成员具有相同的文件权限,像上面的2号用户。
==最好的设置是属主、用户组、其他用户的权限依次减小,才能很好的达到权限管理的目的。==
属主、用户组、其他用户关系见下图:
![enter description here][1]文件权限
下图是Linux关于文件权限的例子:
![enter description here][2]
你可能在想,如果又有一用户需要(2)例子中文件的rwx权限,怎么办?
最好不去新建相同的文件,也不能转移所有权,文件只能属于一个用户组。
后来Linux的编写者想到:平时银行信用卡有主卡和副卡,同样的我们可以给文件设置一个副卡,称为ACL权限。
因此: ==对于文件权限拥有3种用户权限:属主权限、用户组权限(ACL权限)、其他用户权限。==同样对于超级用户root的文件,也具有以上3种权限。只不过,root的权限可以操作一切文件,类似ACL权限,对于root用户的权限分享出来,我们称为sudo权限。
root用户的文件拥有的用户权限:属主权限、用户组权限(sudo权限)、其他用户权限。
sudo权限可以将一些系统运行命令赋予给普通用户。
三、还有一些扩展需要知道
- 其实文件权限有四部分,常用的是上面讲到的3种,在最前面有setUID/setGID/sticky(粘着位)。
所有文件权限分为setUID/setGID/sticky(粘着位)、属主权限、组权限、其他用户权限。 Linux还存在一个mask值,它用来设置初始创建一个目录或者文件时赋予的权限,不过只赋值常用的3种权限。
比如mask=0022时,新建文件w,它的权限值为644,-rw-r–r–。新建文件夹w,权限值为755,drwxr-xr-x。- 针对目录来说x权限代表可以进入该目录,所有对这个权限初始赋值是没有什么问题的
- 针对文件的x权限代表执行,这个风险太高,所以一般权限初始赋值必须去掉x。
- 在bash中,可以写入4位数字的权限,但第一位必须是0,我们只考虑后3位常用的权限。
按照下图实验ACL权限:
![enter description here][3]
四、管理哲学:合理分配root用户的权限
- 使用su - username 来转换用户,su - root需要root的密码。
- 还可以使用上述sudo来分享root权限。
- su方式切换是需要输入目标用户的密码,而sudo只需要输入自己的密码,所以sudo可以保护目标用户的密码不外流的。当帮root管理系统的时候,su是直接将root所有权利交给用户,而sudo可以更好分工,只要配置好/etc/sudoers,这样sudo可以保护系统更安全,而且分工明确,有条不紊。