一、overview
Linux操作系统是一个多用户操作系统,这样就存在资源共享与隔离的问题。也就是说用户A的资源可能不愿意让用户B访问;然后有存在超级用户访问所有用户资源的可能性。因此在Linux操作系统下就需要一套权限管理的功能。
Linux原生的权限管理机制是基于用户角色
的管理机制,也就是UGO+RWX/ACL权限控制。其中UGO是User、Group和Other的简称;RWX则是Read、Write和eXecute的简称;ACL是Access Control List的简称,是UGO的扩展。Linux原生的访问控制称为自主访问控制。
自主访问控制(Discretionary Access Control, DAC)是指对象(比如程序、文件、进程)的拥有者可以任意修改或者授予此对象相应的权限。这里的拥有者就是指具体的用户,也就是角色(例如root)。这种控制方式的问题在于黑客入侵后可以以该用户的角色执行任何允许的操作。
另外一种访问控制策略是基于标签的访问控制。比如我们给程序和其访问的资源打上标签,这样程序就可以访问有标签的资源,对于没有标签的资源则不能访问。这种模式并非基于用户,而是基于许可。这种策略被称作强制访问控制(Mandatory Access Control ,简称MAC)。其中SELinux就是强制访问控制。
用户管理
对于一个linux文件,有2个属性,属主和属组,用来设置权限。
一个用户必须属于一个组。.
usage
创建用户
创建时,默认会创建同名的组,使用id可以查看
useradd dc
默认没有密码,某些场合会需要密码,所以要设置
passwd dc
切换用户、切换为root
su用于用户之间的切换
sudo用于普通用户可以使用root权限来执行命令
su命令是当前用户用来切换到另外一个用户的命令,参数为用户名。执行时会要求输入密码,这个密码是你要切换到的用户的密码。
sudo 表示 “superuser do”。它允许已验证的用户以其他用户的身份来运行命令。其他用户可以是普通用户或者超级用户。然而,绝大部分时候我们用它来以提升的权限来运行命令。
当然,不是任何用户都能用sudo,需要提前使用root配置/etc/sudoers
切换到root,注意不要用vim /etc/sudoers,直接用visudo,进入后搜索ALL,找到root ALL=(ALL) ALL行,在下面添加dc ALL=(ALL) NOPASSWD:ALL,NOPASSWD:的意思是使用sudo不用输入密码
二、DAC
UGO+RWX
(Discretionary Access Control,自主访问控制)。DAC 机制就是指对象的拥有者可以任意修改或授予此对象相应的权限。从主体和客体的角度来说,就是主体对其拥有的客体,有权决定自己和其他主体对该客体应具有怎样的访问权限。
这个比较简单,需要注意的有2点:
- r对目录是可以用ls、ll查看里面的文件列表。x对目录来说是可以进入cd,可以访问这个目录下级有权限的文件。
==》- 可以ll一个目录并不意味着可以cd。
- 对一个文件有权限但其上级目录没有x权限,也是无法访问的。
- chmod和chown是最常用的,可以使用数字方式来author。
三、ACL
ACL的全称是 Access Control List (访问控制列表) ,一个针对文件/目录的访问控制列表。它在RWX-UGO权限管理的基础上为文件系统提供一个额外的、更灵活的权限管理机制。它被设计为UNIX文件权限管理的一个补充。ACL允许你给任何的用户或用户组设置任何文件/目录的访问权限,而不仅仅局限于组和owner的粒度
。
比如员工B的工资单,财务人员A是可以rwx的,而B则只能r。如果基于DAC,则只能把B放到某个组中然后给这个组设r的权限,显然很繁琐,而ACL可以实现单独给B用户设置r。
我们可以手动设置文件或者目录的ACL以实现对文件或者目录的访问控制。同时ACL还有一个特性是实现对父目录ACL属性的继承。因此,根据两者的差异,ACL分为两类:
- access ACL:每一个对象(文件/目录)都可以关联一个 ACL 来控制其访问权限,这样的 ACL 被称为 access ACL。
- default ACL:目录关联的一种 ACL。当目录具备该属性时,在该目录中创建的对象(文件或者子目录)默认 具有相同的ACL。
通过ACL可以实现比较复杂的访问权限组合,权限的设置通过一个ACL条目实现。一个ACL条目指定一个用户或者一组用户对所关联对象的读、写、执行权限。下图展示了 ACL 条目的类型:
一个ACL条目格式如下:
user|group|mask|other:[:|name]:rwx
2个 :: 表示属主和属组
user::rwx指定了文件的所有者对该文件的访问权限
user::rwx则指定了某个特定的用户对该文件的访问权限
mask::rwx表示该文件最大的允许权限,
other则是没有在规则列表中的用户所具备的权限。
1. setfacl
setfacl [-bkRd] [{-m|-x} acl参数] 文件/目录名
-m :配置后面的 acl 参数给文件/目录使用,不可与 -x 合用;
-x :删除后续的 acl 参数,不可与 -m 合用;
-b :移除所有的 ACL 配置参数;
-k :移除默认的 ACL 参数;
-R :递归配置 acl;
-d :配置“默认 acl 参数”,只对目录有效,在该目录新建的数据会引用此默认值;
2. getfacl
用户管理
1.1 查看系统所有用户/etc/passwd
1.2 切换用户 su
切换用户时出现This account is currently not available
https://blog.csdn.net/shaobingj126/article/details/7466583
在/etc/passwd把后面的 "/sbin /nologin”改成“/bin/bash”
su su -
su -u 用户名 切换后要执行的命令
su -u hive hive # 切换到hive用户中执行hive命令进入hive客户端