1.用户身份与能力
用户身份号码——即UID
超级用户UID0:系统的超级用户。
系统用户UID1-999:系统中系统服务由不同用户运行,更加安全,默认被限制不能登录系统。
普通用户UID1000~:即管理员创建的用于日常工作而不能管理系统的普通用户。
注意UID一定是不能冲突的,管理员创建的普通用户UID从1000开始(即便前面有闲置的号码)
用户组号码——即GID
为了方便管理同一组的用户还有用户组的概念,用户组号码——即GID(Group IDentification),在Linux系统中每个用户在建立时也会自动创建一个与其同名的基本用户组,这个基本用户组只有该用户一个人,而该用户以后被归纳入的用户组则叫做扩展用户组,因此一个用户只有一个基本用户组,而可以有多个扩展用户组,来满足日常的工作需要。
创建用户
使用这个命令来创建用户帐号,默认的用户家目录会被存放在/home目录中,默认的Shell解释器会是/bin/bash,默认会创建一个与该用户同名的基本用户组以及默认该用户不包含其他的扩展用户组,这些默认值可以依据下面的参数来自行修改:
useradd命令用于创建新的用户,格式为:“useradd [选项] 用户名”。
参数 | 作用 |
-d | 指定用户的家目录(默认为/home/username) |
-e | 帐号有效截至日期,格式:YYYY-MM-DD. |
-u | 指定该用户的默认UID |
-g | 指定一个初始的用户基本组(必须已存在) |
-G | 指定一个或多个扩展用户组 |
-N | 不创建与用户同名的基本用户组 |
-s |
指定该用户的默认Shell
|
创建用户组
为了能够让系统中各个用户的权限指派更加的有效率,我们的工作中常常会把几个用户组设置成某个用户的扩展用户组,这样的话就可以针对于一类用户进行统一的权限安排的
groupadd命令用于创建群组,格式为:"groupadd [选项] 群组名"。
修改用户的属性
用户的信息被保存到了/etc/passwd文件中,我们可以直接用文本编辑器来修改其中的数值项目,也可以用usermod来修改已经创建的用户信息项目,诸如用户身份号码、基本/扩展用户组、默认终端等等:
usermod命令用于修改用户的属性,格式为“usermod [选项] 用户名”。
参数 | 作用 |
-c | 填写帐号的备注信息 |
-d -m | -m与-d连用,可重新指定用户的家目录并自动把旧的数据转移过去。 |
-e | 帐户到期时间,格式“YYYY-MM-DD” |
-g | 变更所属用户组 |
-G | 变更扩展用户组 |
-L | 锁定用户禁止其登陆系统 |
-U | 解锁用户,允许其登陆系统 |
-s | 变更默认终端 |
-u | 修改用户的UID |
修改用户的密码
该命令用于修改用户的密码、过期时间、认证信息等,普通的用户只有权限修改自身的系统密码,而超级用户则有权限来修改其他所有人的密码。
passwd命令用于修改用户的密码,格式为:“passwd [选项] [用户名]”。
参数 | 作用 |
-l | 锁定用户禁止其登陆 |
-u | 解除锁定,允许用户登陆。 |
--stdin | 允许从标准输入修改用户密码,如(echo "NewPassWord" | passwd --stdin Username) |
-d | 使帐号无密码 |
-e | 强制用户下次登陆时修改密码 |
-S | 显示用户的密码状态 |
删除用户
如果我们确认以后不需要某个用户登录到本地系统中,则可以通过userdel命令来删除有关该用户的所有信息,默认该用户的家目录数据会被保留下来,而如果想要一起删除的话可以加上-r或-f参数即可:
userdel命令用于删除用户,格式为:“userdel [选项] 用户名”。
参数 | 作用 |
-f | 强制删除用户,家目录与其相关文件 |
-r | 同时删除用户,家目录与其相关文件 |
2.文件权限与归属
每个文件的类型不尽相同,并且可以用不同的符号来加以区分,常见的包括有
-:普通文件,d:目录文件,l:链接文件,b:块设备文件,c:字符设备文件,p:管道文件
-:普通文件权限解读:
可读权限就是能够读取该文件的实际内容
可写权限就是能够编辑、新增、修改文件的实际内容
可执行则代表能够运行一个脚本程序的权限
d:目录文件权限解读:
可读权限就是能够读取该目录内的结构和文件列表
可写权限就是能够更改目录内文件结构列表、新增、删除、重命名文件
可执行则代表进入该目录的权限
=======================================================
读(read),写(write),执行(execute)简写即为(r,w,x),亦可用数字(4,2,1)表示,如下表:
3.文件的特殊权限
SUID:让执行者临时拥有属主的权限(仅对拥有执行权限的二进制程序有效)
这是一种针对于二进制程序设置的特殊权限,例如所有用户都可以执行用于修改用户密码的passwd命令,而用户密码是被保存在/etc/shadow文件中的,但只要仔细的看下就会发现这个文件的默认权限是000,也就是说除了不受系统限制的root以外的所有用户都没有查看或编辑该文件的权限,所以把passwd命令加上SUID特殊权限位,则可让普通用户临时获得程序所有者的身份,即以root用户的身份将变更的密码信息写入到shadow文件中。这个很像我们在古装剧中看过拿着尚方宝剑的钦差大臣,他手持尚方宝剑惩治贪官的时候实际上也就代表了皇上的权威,以便他完成了想要的结果,但并不意味着他就永远成为了皇上。所以这是一种特殊的权限授权下放的方法。
[root@kangvcar ~]# ls -l /etc/shadow ----------. 1 root root 1004 Jan 3 06:23 /etc/shadow [root@kangvcar ~]# ls -l /bin/passwd -rwsr-xr-x. 1 root root 27832 Jan 29 2014 /bin/passwd
SGID功能一:让执行者临时拥有属组的权限(对拥有执行权限的二进制程序设置)
这种特殊权限就是参考SUID而设计的,不同点就是让程序的执行者获取的不再是文件所有者的临时权限,而是获取到文件的所有组的权限。举例来说,在早期的Linux系统中/dev/kmem是一个字符设备文件,用于存储内核程序要访问的数据,权限为:
cr--r----- 1 root system 2, 1 Feb 11 2015 kmem
读者们看出问题了吗?除了root超级用户身份或属于system组成员外的所有用户都没有读取该文件的权限,但平时我们需要查看系统进程状态,为了让用户能够获取到系统状态信息,因此将用于查看系统进程状态的ps命令权限上增加了SGID特殊权限位:
-r-xr-sr-x 1 bin system 59346 Feb 11 2015 ps
这样的话因为ps命令被赋予了SGID特殊权限位,所以当用户执行了该命令,实际上临时获取到了有效用户组system的权限啦,能够顺利的读取设备文件啦
SGID功能二:在该目录中创建的文件自动继承此目录的用户组(只可以对目录设置)
正如前面提到过每个文件都有其归属的所有者和所有组,而当我们创建或传送一个文件后,这个文件就会自动的归属于执行这个操作的用户。那么比如我们工作中需要设置一个部门内的共享目录,让所有组内的人都能够读取里面的内容,那么我们就可以创建部门共享目录后,将该目录设置上SGID特殊权限位,这样任何用户在里面创建的任何文件都会归属于本目录的所有组,而不再是自己的基本用户组。
[root@kangvcar ~]# cd /tmp [root@kangvcar tmp]# mkdir testdir [root@kangvcar tmp]# ls -ald testdir/ drwxr-xr-x. 2 root root 6 Feb 11 11:50 testdir/ [root@kangvcar tmp]# chmod -Rf 777 testdir/ [root@kangvcar tmp]# chmod -Rf g+s testdir/ [root@kangvcar tmp]# ls -ald testdir/ drwxrwsrwx. 2 root root 6 Feb 11 11:50 testdir/
这样我们设置好777权限以保证普通用户可以写入文件,并为该目录设置了SGID特殊权限位后,就可以切换至一个普通用户尝试在该目录创建文件,看看新建出来的文件是否会继承上级目录的所有组名称:
[root@kangvcar tmp]# su - kangvcar Last login: Wed Feb 11 11:49:16 CST 2015 on pts/0 [kangvcar@kangvcar ~]$ cd /tmp/testdir/ [kangvcar@kangvcar testdir]$ echo "kangvcar.com" > test [kangvcar@kangvcar testdir]$ ls -al test -rw-rw-r--. 1 kangvcar root 15 Feb 11 11:50 test
chmod命令用于修改文件或目录的权限,格式为:"chmod [参数] 权限 文件或目录名称"。
chown命令用于修改文件或目录的所属主与所属组,格式为:“chown [参数] 所属主:所属组 文件或目录名称”。
注意:chmod和chown命令是对文件属性和权限修改最常用的命令,它们还有一个特别的共性,就是对于目录文件时需要加上大写参数-R来表示递归操作,即对目录内所有的文件进行整体操作的意思。
SBIT(Sticky Bit):只可管理自己的数据而不能删除他人文件(仅对目录有效)
设置SBIT特殊权限位了,当然也可以叫做特殊权限位之粘滞位。SBIT特殊权限位的设置目的和效果是不让其他人删除自己的文件,换句话说就是文件只能被所有者执行删除操作。在RHEL7系统中的/tmp作为一个共享文件的目录默认已经被设置了SBIT特殊权限位,因此这里面的文件其他人是不能乱删除的
其实文件能否被删除并不取决于自身的权限大小,而是看上级目录是否有写入权限,
4.文件的隐藏属性
chattr命令用于设置文件的隐藏权限,格式为:“chattr [参数] 文件”。
使用chattr命令来设置文件的隐藏权限,如果想要将某个隐藏功能添加到文件上面,则使用+参数,如果想要将某个隐藏功能移出文件,则使用-参数。可供我们选择的隐藏权限功能非常丰富,常见的隐藏权限包括有:
参数 | 作用 |
i | 将无法对文件进行修改,若对目录设置后则仅能修改子文件而不能新建或删除。 |
a | 仅允许补充(追加)内容.无法覆盖/删除(Append Only)。 |
S | 文件内容变更后立即同步到硬盘(sync)。 |
s | 彻底从硬盘中删除,不可恢复(用0填充原文件所在硬盘区域)。 |
A | 不再修改这个文件的最后访问时间(atime)。 |
b | 不再修改文件或目录的存取时间。 |
D | 检查压缩文件中的错误。 |
d | 当使用dump命令备份时忽略本文件/目录。 |
c | 默认将文件或目录进行压缩。 |
u | 当删除此文件后依然保留其在硬盘中的数据,方便日后恢复。 |
t | 让文件系统支持尾部合并(tail-merging)。 |
X | 可以直接访问压缩文件的内容。 |
我们再次新建了一个普通文件并设置了不允许删除与覆盖(+a参数)权限后的效果:
[root@kangvcar ~]# echo "for Test" > kangvcar [root@kangvcar ~]# chattr +a kangvcar [root@kangvcar ~]# rm kangvcar rm: remove regular file ‘kangvcar’? y rm: cannot remove ‘kangvcar’: Operation not permitted
lsattr命令用于显示文件的隐藏权限,格式为:“lsattr [参数] 文件”。
对于Linux系统中的隐藏权限必须用lsattr命令才能够看到,平时使用的ls之类的命令是看不出异样的:
[root@kangvcar ~]# ls -al kangvcar -rw-r--r--. 1 root root 9 Feb 12 11:42 kangvcar
一旦使用了lsattr命令后文件上被赋予的隐藏权限就会马上原形毕露出来,我们只需要按照提示的隐藏权限的类型(字母)来使用chattr命令去掉即可:
[root@kangvcar ~]# lsattr kangvcar -----a---------- kangvcar [root@kangvcar ~]# chattr -a kangvcar [root@kangvcar ~]# lsattr kangvcar ---------------- kangvcar [root@kangvcar ~]# rm kangvcar rm: remove regular file ‘kangvcar’? y
5.文件访问控制列表
setfacl命令用于增加或者修改ACL规则,格式为:"setfacl [参数] 文件名称"。
ACL提供的是在所有者、所有组、其他人的读写执行权限外的特殊权限控制,使用setfacl命令可以让我们能够针对单一用户或用户组、单一文件或目录来进行读写执行权限的控制,其中对于目录文件需要使用递归-R参数,对普通文件需要使用-m参数,而如果想要删除某个文件的访问控制策划的话可以使用-b参数。于是我们来设置下用户在/root目录上面的权限吧:
[root@kangvcar ~]# setfacl -Rm u:kangvcar:rwx /root [root@kangvcar ~]# su - kangvcar Last login: Sat Mar 21 15:45:03 CST 2015 on pts/1 [kangvcar@kangvcar ~]$ cd /root [kangvcar@kangvcar root]$ ls anaconda-ks.cfg Downloads Pictures Public [kangvcar@kangvcar root]$ cat anaconda-ks.cfg [kangvcar@kangvcar root]$ exit
常用的ls命令是看不到访问控制列表信息的,但是却可以看到文件的权限最后一个点(.)变成了加号(+),而这就意味着这个文件已经被设置有了ACL访问策略啦:
[root@kangvcar ~]# ls -ld /root dr-xrwx---+ 14 root root 4096 May 4 2016 /root
getfacl命令用于显示文件的ACL规则,格式为:"getfacl 文件名称"。
[root@localhost ~]# getfacl /root getfacl: Removing leading '/' from absolute path names # file: root # owner: root # group: root user::r-x user:kangvcar:rwx group::r-x mask::rwx other::---
6. su命令与sudo服务
su命令可以让使用者在不注销的情况下顺畅的切换至其他用户
su命令与用户名之间有一个减号(-),这意味着完全的切换到新的用户,即把环境变量信息也变更为新的用户,而不保留原始的用户信息,这个是推荐必加的参数
sudo服务用于给普通用户提供额外权利来完成原本超级用户才能完成的任务,格式为:“sudo [参数] 命令名称”。
参数 | 作用 |
-h | 列出帮助信息。 |
-l | 列出当前用户可执行的命令。 |
-u 用户名或UID值 | 以指定的用户身份执行命令。 |
-k | 清空安全时间,下次执行sudo时需要再次密码验证。 |
-b | 在后台执行指定的命令。 |
-p | 更改询问密码的提示语。 |
总结来说sudo的特色功能有:
1:限制用户执行指定的命令。
2:记录用户执行的每一条命令。
3:配置文件(/etc/sudoers)提供集中的管理用户、权限与主机等参数。
4:验证过密码后5分钟(默认值)内无须再让用户验证密码,更加的方便。
按照下面的格式填写上制定的信息即可:
谁可以使用超级用户身份 允许使用sudo命令的主机=(以谁的身份执行命令) 可执行命令的列表
[root@kangvcar ~]# visudo 96 ## 97 ## Allow root to run any commands anywhere 98 root ALL=(ALL) ALL 99 kangvcar ALL=(ALL) ALL