用户权限管理
1. 用户和用户组
1. 用户(user)的概念;
通过前面对Linux 多用户的理解,我们明白Linux 是真正意义上的多用户操作系统,所以我们能在Linux系统中建若干用户(user)。比如我们的同事想用我的计算机,但我不想让他用我的用户名登录,因为我的用户名下有不想让别人看到的资料和信息(也就是隐私内容)这时我就可以给他建一个新的用户名,让他用我所开的用户名去折腾,这从计算机安全角度来说是符合操作规则的
2.用户组(group)的概念;
用户组(group)就是具有相同特征的用户(user)的集合体;比如有时我们要让多个用户具有相同的权限,比如查看、修改某一文件或执行某个命令,这时我们需要用户组,我们把用户都定义到同一用户组,我们通过修改文件或目录的权限,让用户组具有一定的操作权限,这样用户组下的用户对该文件或目录都具有相同的权限,这是我们通过定义组和修改文件的权限来实现的;
举例:我们为了让一些用户有权限查看某一文档,比如是一个时间表,而编写时间表的人要具有读写执行的权限,我们想让一些用户知道这个时间表的内容,而不让他们修改,所以我们可以把这些用户都划到一个组,然后来修改这个文件的权限,让用户组可读,这样用户组下面的每个用户都是可读的;
3.用户和用户组的对应关系是:一对一、多对一、一对多或多对多;
一对一:某个用户可以是某个组的唯一成员;
多对一:多个用户可以是某个唯一的组的成员,不归属其它用户组;比如beinan和linuxsir两个用户只归属于beinan用户组;
一对多:某个用户可以是多个用户组的成员;比如hhh可以是root组成员,也可以是linuxsir用户组成员,还可以是adm用户组成员;
多对多:多个用户对应多个用户组,并且几个用户可以是归属相同的组;其实多对多的关系是前面三条的扩展
4.用户、组、权限
用户:UID, /etc/passwd
组:GID, /etc/group
影子口令:
用户:/etc/shadow
组:/etc/gshadow
用户类别:
管理员:0
普通用户: 1-65535
系统用户:1-499
一般用户:500-60000
用户组类别:
私有组:创建用户时,如果没有为其指定所属的组,系统会自动为其创建一个与用户名同名的组
基本组:用户的默认组
附加组,额外组:默认组以外的其它组
/etc/passwd
account: 登录名
password: 密码
UID:使用者ID
GID:基本组ID
comment: 注释
HOME DIR:家目录
SHELL:用户的默认shell
/etc/shadow
account: 登录名
encrypted password: 加密的密码
加密方法:
对称加密:加密和解密使用同一个密码
公钥加密:每个密码都成对儿出现,一个为私钥(secret key),一个为公钥(public key)
单向加密,散列加密:提取数据特征码,常用于数据完整性校验
1、雪崩效应
2、定长输出
MD5:Message Digest, 128位定长输出
SHA1:Secure Hash Algorithm, 160位定长输出
2.用户、组、权限管理的基本命令
/etc/passwd:
用户名:密码:UID:GID:注释:家目录:默认SHELL
/etc/group:
组名:密码:GID:以此组为其附加组的用户列表
/etc/shadow:
用户名:密码:最近一次修改密码的时间:最短使用期限:最长使用期限:警告时间:非活动时间:过期时间:
用户管理命令:
useradd, userdel, usermod, passwd, finger, id, chage
增加一个用户
[root@localhost ~]# useradd [-u UID] [-g 初始群组] [-G 次要群组] [-mM]\
[-c 说明栏] [-d 家目录绝对路径] [-s shell] 使用者账号名
选项与参数:
-u :后面接的是 UID ,是一组数字。直接指定一个特定的 UID 给这个账号;
-g :后面接的那个组名就是我们上面提到的 initial group 啦~
该群组的 GID 会被放置到 /etc/passwd 的第四个字段内。
-G :后面接的组名则是这个账号还可以加入的群组。
这个选项与参数会修改 /etc/group 内的相关数据喔!
-M :强制!不要创建用户家目录!(系统账号默认值)
-m :强制!要创建用户家目录!(一般账号默认值)
-c :这个就是 /etc/passwd 的第五栏的说明内容啦~可以随便我们配置的啦~
-d :指定某个目录成为家目录,而不要使用默认值。务必使用绝对路径!
-r :创建一个系统的账号,这个账号的 UID 会有限制 (参考 /etc/login.defs)
-s :后面接一个 shell ,若没有指定则默认是 /bin/bash 的啦~
-e :后面接一个日期,格式为『YYYY-MM-DD』此项目可写入 shadow 第八字段,
亦即账号失效日的配置项目啰;
-f :后面接 shadow 的第七字段项目,指定口令是否会失效。0为立刻失效,
-1 为永远不失效(口令只会过期而强制于登陆时重新配置而已。)
删除一个用户
userdel:
userdel [option] USERNAME
-r: 同时删除用户的家目录
id:查看用户的帐号属性信息
-u 用户uid
-g 用户gid
-a 用户所有信息
-G 用户所在所有的id
-un 用户名字
-gn 用户初始组名称
-Gn 用户所在所有组名称
finger: 查看用户帐号信息
finger USERNAME
修改用户帐号属性:
usermod
-c :后面接账号的说明,即 /etc/passwd 第五栏的说明栏,可以加入一些账号的说明。
-d :后面接账号的家目录,即修改 /etc/passwd 的第六栏;
-e :后面接日期,格式是 YYYY-MM-DD 也就是在 /etc/shadow 内的第八个字段数据啦!
-f :后面接天数,为 shadow 的第七字段。
-g :后面接初始群组,修改 /etc/passwd 的第四个字段,亦即是 GID 的字段!
-G :后面接次要群组,修改这个使用者能够支持的群组,修改的是 /etc/group 啰~
-a :与 -G 合用,可『添加次要群组的支持』而非『配置』喔!
-l :后面接账号名称。亦即是修改账号名称, /etc/passwd 的第一栏!
-s :后面接 Shell 的实际文件,例如 /bin/bash 或 /bin/csh 等等。
-u :后面接 UID 数字啦!即 /etc/passwd 第三栏的数据;
-L :暂时将用户的口令冻结,让他无法登陆。其实仅改 /etc/shadow 的口令栏。
-U :将 /etc/shadow 口令栏的 ! 拿掉,解锁账号!
密码管理:
[root@ localhost ~]# passwd [--stdin] <==所有人均可使用来改自己的口令
[root@localhost ~]# passwd [-l] [-u] [--stdin] [-S] \
[-n 日数] [-x 日数] [-w 日数] [-i 日期] 账号 <==root 功能
选项与参数:
–stdin :可以透过来自前一个管线的数据,作为口令输入,对 shell script 有帮助!
-l :是 Lock 的意思,会将 /etc/shadow 第二栏最前面加上 ! 使口令失效;
-u :与 -l 相对,是 Unlock 的意思!
-S :列出口令相关参数,亦即 shadow 文件内的大部分信息。
-n :后面接天数,shadow 的第 4 字段,多久不可修改口令天数
-x :后面接天数,shadow 的第 5 字段,多久内必须要更动口令
-w :后面接天数,shadow 的第 6 字段,口令过期前的警告天数
-i :后面接『日期』,shadow 的第 7 字段,口令失效日期
pwck:检查用户帐号完整性
组管理:
创建组:groupadd
groupadd
-g GID
-r:添加为系统组
groupmod
-g GID
-n GRPNAME
groupdel 删除某个组
gpasswd 为组设定密码
用户权限下放(sudo)
权限下放动作的配置文件 /etc/sudoers
这个文件用visudo命令编辑 visudo –f /etc/sudoers
文件内容
授权目标用户 主机名称=(授权用户得到的新用户身份) 授权用户执行命令
li ALL=(ALL) ALL
修改某个用户的密码:echo “new_passwd” |passwd –stdin 用户
change
[root@localhost ~]# chage [-ldEImMW] 账号名
选项与参数:
-l :列出该账号的详细口令参数;
-d :后面接日期,修改 shadow 第三字段(最近一次更改口令的日期),格式 YYYY-MM-DD
-E :后面接日期,修改 shadow 第八字段(账号失效日),格式 YYYY-MM-DD
-I :后面接天数,修改 shadow 第七字段(口令失效日期)
-m :后面接天数,修改 shadow 第四字段(口令最短保留天数)
-M :后面接天数,修改 shadow 第五字段(口令多久需要进行变更)
-W :后面接天数,修改 shadow 第六字段(口令过期前警告日期)
三类用户权限:
u: 属主
g: 属组
o: 其它用户
改变所属组:chgrp
修改一个档案的所属组时,该组名必须要存在于/etc/group档案内才行,否则会报错。
格式:
chgrp [-R] GROUP FILE
-R:递归的修改目录下的所有档案的群组。
改变档案的拥有者:chown
格式:chown [OPTION]... [OWNER][:[GROUP]] FILE...
-R:递归的修改目录下档案的拥有者或/和群组
改变权限:chmod
修改档案的权限用的是chmod指令,权限的设定方法有两种,一个是使用数字进行权限的修改,一个是使用符号进行权限的修改。
1.数字类型改变权限
Linux档案的基本权限有9个,分别是owner、group、others,这三种身份各有自己的r、w、x的权限,r、w、x用数字的表示方法如下:
r:4
w:2
x:1
chmod的语法格式:
chmod [OPTION]... OCTAL-MODE FILE...
-R:递归的修改目录内档案的权限
666表示的权限如下:
owner:6,6=4+2=r+w
group:6,6=4+2=r+w
others:6,6=4+2=r+w
2.符号修改档案的权限
u:代表的是user,代表的是档案的拥有者
g:代表的是group,代表的是档案的所属组
o:代表的是others,代表的是其他用户
a:代表的是all,代表的是ugo
赋予方法:
+:代表在原有权限的基础上增加相应的权限
-:代表在原有权限的基础上去掉相应的权限
=:不管原有的权限为何,赋予指定的权限
格式如下:
chmod [OPTION]... MODE[,MODE]... FILE...
-R:递归的修改权限。
各个模式之间用逗号隔开。
文件权限管理
1.文件基本权限:
r, w, x
文件:
r:可读,可以使用类似cat等命令查看文件内容;
w:可写,可以编辑或删除此文件;
x: 可执行,可以命令提示符下当作命令提交给内核运行;
目录:
r: 可以对此目录执行ls以列出内部的所有文件;
w: 可以在此目录创建文件;
x: 可以使用cd切换进此目录,也可以使用ls -l查看内部文件的详细信息;
第一栏:代表档案的类型和权限。共有10个字符。如下所示:
-rw-r--r--,第一个字符代表的是档案的类型。有如下几种:
d:表示的是该档案为一个目录
-:代表的是该档案是一个普通文件。
l:代表的是该档案是一个链接文件。
b:代表的是该档案是一个块设备文件。如磁盘、USB设备等
c:代表的是该档案是一个字符设备文件。如键盘、鼠标等
s:代表的是该该档案是一个socket文件。客户端可以通过socket文件连接到服务器端。
p:代表的是该档案是一个pipe文件。该类型的文件是为了解决多个程序同时存取同一个文件所造成的错误问题。
接下来的九个字符,三三一组,分别代表的是owner、group、others的权限。 如果相应的位置上没有相应的权限的话,则用-表示。
r:代表read的权限
w:代表write的权限
x:代表execute的权限
第二栏:代表有多少个档案使用相同的inode。硬链接数。
每一个文件都将他的权限和属性记录到inode中,而目录确是使用文件名来记录的。
第三栏:代表的是该档案的拥有者owner
第四栏:代表的是该档案的所属组group
第五栏:代表该档案的大小。单位是字节bytes
第六栏:代表的是该档案的创建日期或者是最近的修改时间。
目录的默认权限是775,文件的默认权限是644
2.文件特殊权限
stickyid 粘滞位(只对目录有效)
o+t 只针对目录,当一个目录上有t权限时,这个目录中的文件只能被文件拥有者删除
t=1
chmod o+t directroy
chmod 1xxx directory
/tmp目录是系统的临时文件目录,所有的用户在该目录下拥有所有的权限,也就是说在该目录下可以任意创建、修改、删除文件,那如果用户A在该目录下创建了一个文件,
用户B将该文件删除了,这种情况我们是不能允许的。为了达到该目的,就出现了stick bit(粘滞位)的概念。它是针对目录来说的,如果该目录设置了stick bit(粘滞位),则该目录下的文件除了该文件的创建者和root用户可以删除和修改/tmp目录下的stuff,别的用户均不能动别人的,这就是粘滞位的作用。
sgid 粘制位(对目录有效)
g+s 针对目录,在目录中创建的文件都自动归属到目录所在组,针对二进制文件,文件内记录的程序在执行时和执行者的组身份没有关系,而是以二进制文件的所有组的身份执行的
chmod g+s file|directory
chmod 2xxx file|directory
suid 冒险位
u+s 针对文件,文件记录动作在执行时是一文件所有人身份执行的,与是谁发起的无关
chmod u+s file
chmod 4xxx file
(root用户有所有权限)
权限控制acl
ACL 是 Access Control List 的缩写,主要的目的是在提供传统的 owner,group,others 的 read,write,execute 权限之外的细部权限配置。ACL 可以针对单一使用者,单一文件或目录来进行 r,w,x 的权限规范,对于需要特殊权限的使用状况非常有帮助。
在Linux 文件权限里面,对于other的
定义过于广泛,以至于很难把权限限定于一个不属于file owner和group的用户身上. 那么
Access Control List (ACL)就是用来帮助我们解决这个问题的。
1.什么时权限列表
对与文件的权限进行附加补充说名的一个权限设定方式
2.如何去查看权限列表
[root@aclhost mnt]# ls -l file
-rw-r--r--. 1 root root 0 Nov 7 09:14 file
|
如果此位为“.”,代表这位上没有权限列表
如果此位为“+”,代表权限权限列表存在
3.如何查看权限列表
[root@aclhost mnt]# ls -l file
-rw-rw-r--<<+>> 1 root root 0 Nov 7 09:14 file
[root@aclhost mnt]# getfacl file
file: file 文件名称
owner: root 文件所有人
group: root 文件所有组
user::rw- 所有人权限
user:student:rw- 特定用户权限
group::r-- 所有组权限
mask::rw- 特定用户生效的最大权限
other::r-- 其他人权限
4.如何设定acl权限
setfacl
setfacl -m <u|g|m>:<username|groupname>:权限 filename 设定acl
setfacl -x <u|g>:<username|groupname> filename 去除某个用户或者组的acl
setfacl -b filename 删除文件上的权限列表
5.acl默认权限
默认权限针对目录使用,时让目录中所有新建文件都继承此权限,这个权限对目录本身不生效,并且不会影响目录中已经存在的文件
setfacl -m d:<u|g|o>:<username|group>:rwx directory 设定默认权限
setfacl -x d:<u|g|o>:<username|group> directory 撤销目录中的某条默认权限
3.文件隐藏属性chattr
chattr (配置文件隐藏属性)
[root@www ~]# chattr [+-=][ASacdistu] 文件或目录名称
选项与参数:
+ :添加某一个特殊参数,其他原本存在参数则不动。
– :移除某一个特殊参数,其他原本存在参数则不动。
= :配置一定,且仅有后面接的参数
A :当配置了 A 这个属性时,若你有存取此文件(或目录)时,他的存取时间 atime
将不会被修改,可避免I/O较慢的机器过度的存取磁碟。这对速度较慢的计算机有帮助
S :一般文件是非同步写入磁碟的(原理请参考第五章sync的说明),如果加上 S 这个
属性时,当你进行任何文件的修改,该更动会『同步』写入磁碟中。
a :当配置 a 之后,这个文件将只能添加数据,而不能删除也不能修改数据,只有root 才能配置这个属性。
c :这个属性配置之后,将会自动的将此文件『压缩』,在读取的时候将会自动解压缩,
但是在储存的时候,将会先进行压缩后再储存(看来对於大文件似乎蛮有用的!)
d :当 dump 程序被运行的时候,配置 d 属性将可使该文件(或目录)不会被 dump 备份
i :这个 i 可就很厉害了!他可以让一个文件『不能被删除、改名、配置连结也无法 写入或新增数据!』对於系统安全性有相当大的助益!只有 root 能配置此属性
s :当文件配置了 s 属性时,如果这个文件被删除,他将会被完全的移除出这个硬盘
空间,所以如果误删了,完全无法救回来了喔!
u :与 s 相反的,当使用 u 来配置文件时,如果该文件被删除了,则数据内容其实还
存在磁碟中,可以使用来救援该文件喔!
注意:属性配置常见的是 a 与 i 的配置值,而且很多配置值必须要身为 root 才能配置
范例:请尝试到/tmp底下创建文件,并加入 i 的参数,尝试删除看看。
[root@www ~]# cd /tmp
[root@www tmp]# touch attrtest <==创建一个空文件
[root@www tmp]# chattr +i attrtest <==给予 i 的属性
[root@www tmp]# rm attrtest <==尝试删除看看
rm: remove write-protected regular empty file `attrtest'? y
rm: cannot remove `attrtest': Operation not permitted <==操作不许可
看到了吗?呼呼!连 root 也没有办法将这个文件删除呢!赶紧解除配置!
范例:请将该文件的 i 属性取消!
[root@www tmp]# chattr -i attrtest
lsattr (显示文件隐藏属性)
先来看一下这个特殊权限张的什么样子Set UID举例来看:Set GID举例来看:
[root@www ~]# lsattr [-adR] 文件或目录
选项与参数:
-a :将隐藏档的属性也秀出来;
-d :如果接的是目录,仅列出目录本身的属性而非目录内的档名;
-R :连同子目录的数据也一并列出来!
4.安全上下文SELinux
1.什么时selinux
selinux,内核级加强型防火墙
安全上下文是一个简单的、一致的访问控制属性,在SELinux中,类型标识符是安全上下文的主要组成部分,由于历史原因,一个进程的类型通常被称为一个域(domain),"域"和"域类型"意思都一样,即都是安全上下文中的“TYPE”。
2.如何管理selinux级别
(selinux开启或者关闭)
vim /etc/sysconfig/selinux
selinux=disabled 关闭状态
selinux=Enforcing 强制状态
selinux=Permissive 警告状态
getenforce 查看状态
当selinux开启时
setenforce 0|1 更改selinux运行级别
3.查看目录或文件的安全上下文
4.安全上下文格式解释
所有操作系统访问控制都是以关联的客体和主体的某种类型的访问控制属性为基础的。在SELinux中,访问控制属性叫做安全上下文。所有客体(文件、进程间通讯通道、套接字、网络主机等)和主体(进程)都有与其关联的安全上下文,一个安全上下文由三部分组成:用户、角色和类型标识符。常常用下面的格式指定或显示安全上下文:
USER:ROLE: TYPE[LEVEL[:CATEGORY]]
① USER
1) useridentity:类似Linux系统中的UID,提供身份识别,用来记录身份;安全上下文的一部分;
2) 三种常见的 user:
• user_u :普通用户登录系统后的预设;
• system_u :开机过程中系统进程的预设;
• root :root 登录后的预设;
3) 在 targeted policy 中 users 不是很重要;
4) 在strict policy 中比较重要,所有预设的 SELinux Users 都是以 “_u” 结尾的,root 除外。
② ROLE
1) 文件、目录和设备的role通常是 object_r;
2) 程序的role:通常是 system_r;
3) 用户的role:targeted policy为system_r; strict policy为sysadm_r、staff_r、user_r;用户的role,类似系统中的GID,不同角色具备不同的的权限;用户可以具备多个role;但是同一时间内只能使用一个role;
4) 使用基于RBAC(Roles Based AccessControl) 的strict和mls策略中,用来存储角色信息
③ TYPE
1) type:用来将主体(subject)和客体(object)划分为不同的组,给每个主体和系统中的客体定义了一个类型;为进程运行提供最低的权限环境;
2) 当一个类型与执行中的进程相关联时,其type也称为domain;
3) type是SElinux security context 中最重要的部位,是 SELinux Type Enforcement 的心脏,预设值以_t结尾;
④ 对比SELinux和标准linux的访问控制属性
在标准Linux中,主体的访问控制属性是与进程通过在内核中的进程结构关联的真实有效的用户和组ID,这些属性通过内核利用大量工具进行保护,包括登陆进程和setuid程序,对于客体(如文件),文件的inode包括一套访问模式位、文件用户和组ID。以前的访问控制基于读/写/执行这三个控制位,文件所有者、文件所有者所属组、其他人各一套。
在SELinux中,访问控制属性总是安全上下文三人组(用户:角色:类型)形式,所有客体和主体都有一个关联的安全上下文。需要特别指出的是,因为SELinux的主要访问控制特性是类型强制,安全上下文中的类型标识符决定了访问权。
SELinux是在标准Linux基础上增加了类型强制(TE:Type Enforcement),这就意味着标准Linux和SELinux访问控制都必须满足先要能访问一个客体,例如:如果我们对某个文件有SELinux写入权限,但我们没有该文件的w许可,那么我们也不能写该文件。下表总结了标准Linux和SELinux之间访问控制属性的对比:
标准Linux SELInux
进程安全属性 真实有效的用户和组ID 安全上下文
客体安全属性 访问模式、文件用户和组ID 安全上下文
访问控制基础 进程用户/组ID和文件的访问模式,
此访问模式基于文件的用户/组ID 在进程类型和文件类型
5.如何更改文件安全上下文
临时更改)
chcon -t 安全上下文 文件
chcon -t public_content_t /publicftp -R
永久更改)
semanage fcontext -l 列出内核安全上下文列表内容
semanage fcontext -a -t public_content_t '/publicftp(/.*)?'
restorecon -FvvR /publicftp/ 刷新配置
6.如何控制selinux对服务功能的开关
getsebool -a | grep 服务名称
getsebool -a | grep ftp
setsebool -P 功能bool值 on|off
setsebool -P ftpd_anon_write on