用户、组和权限
一:概念
Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。由于安全需要,「用户管理」应运而生,以加以明确限制各个用户账户的权限。
Linux支持用户组,用户组就是具有相同特征的用户的集合。一个组可以包含多个用户,每个用户也可以属于不同的组。用户组在Linux中扮演着重要的角色,方便管理员对用户进行集中管理。
在Linux中,有三种用户:
Root 用户:也称为超级用户,对系统拥有至高无上的控制权限。
系统用户:系统用户是仅用于运行服务程序
普通用户:一般用户都是普通用户,这些用户对系统文件的访问受限,不能执行全部Linux命令。
二:用户和组
用户标识:
通常计算机识别用户为UID,而人们用username更易识别,并且可以通过名称解析进行相对应的名称转换。解析库:/etc/passwd。
可以来看一下/etc/passwd文件的结构:#cat /etc/passwd
root:x:0:0:Superuser:/:
sam:x:200:50:Sam san:/usr/sam:/bin/sh
可以看到,/etc/passwd文件中一行记录对应着一个用户,每行记录又被冒号分隔为7个字段,其格式和具体含义如下所示:
对应的格式:用户名(登录名,不用大写):密码占位符:UID:GID(主组ID号):注释信息(家庭住址电话等):家目录路径:默认shell程序文件路径。
用户类别:
UID范围是16位2进制减,也就是0-65535有效ID
用户又分为两种:管理员,普通用户包括系统用户、普通用户
管理员为0;
普通用户又包括系统用户和普通用户。
系统用户Centos6可用ID范围1-499;Centos7可用范围1-999。
普通用户: Centos6可用ID范围500-60000,Centos7可用ID范围1000-6000。
用户命令:
添加用户:useradd [选项] 登录名
-c comment 指定一段注释性描述。
-d 目录指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。
-g 用户组指定用户所属的用户组。
-G 用户组,用户组指定用户所属的附加组。
-s Shell文件指定用户的登录Shell。
-u 用户号指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号。
EXAMPLE:
添加用户且指定的UID
[root@localhost ~]# useradd -u3000 linux
验证查看/etc/passwd
[root@localhost ~]# tail -1/etc/passwd
linux:x:3000:3000::/home/linux:/bin/bash
添加指定的UID用户和指定的组(组必须事先存在,组添加命令稍后详解)
[root@localhost ~]# useradd -u2000 -g 5000 black
验证查看/etc/passwd
[root@localhost ~]# tail -1 /etc/passwd
black:x:2000:5000::/home/black:/bin/bash
usermod命令:修改账号信息
-c, --comment COMMENT
-d, --home HOME_DIR:修改家目录为新的位置,但一般应该同时使用-m选项以保证原家目录中的文件会移动到新目录中;
-g, --gid GROUP
-G, --groups GROUP1[,GROUP2,...[,GROUPN]]]:修改时会覆盖原有的附加组;一同使用-a选项,表示为用户添加新的附加组;
-l, --login NEW_LOGIN:修改当前用户的用户名;
-s, --shell SHELL
-u, --uid UID
-L, --lock:锁定用户的密码。这会在用户加密的密码之前放置一个“!”
-U, --unlock:解锁用户的密码。这将移除加密的密码之前的“!”
EXAMPLE:
修改用户的UID,原black UID为2000,现修改为1500
[root@localhost ~]# usermod -u1500 black
验证查看/etc/passwd
[root@localhost ~]# tail -1/etc/passwd
black:x:1500:5000::/home/black:/bin/bash
userdel命令:删除用户账号
userdel [选项] 登录名
-r, --remove:用户主目录中的文件将随用户主目录和用户邮箱一起删除
EXAMPLE:
删除black用户,方法很简单,userdel USERNAME
[root@localhost ~]# userdelblack
默认不会删除账号、家目录、邮箱,需要删加–r
[root@localhost ~]#userdel –rblack
组标识:GroupID, GIDGID
组解析库:/etc/group
打开后的结构 GRPNAME:x:GID:user1,user2, ...
组名:密码点位符:GID:以此组为附加组的用户列表,以逗号分隔
组类别:
UID范围是16位2进制减,也就是0-65535有效ID
用户又分为两种:管理员,普通用户包括系统用户、普通用户
管理员为0;
普通用户又包括系统用户和普通用户。
系统用户Centos6可用ID范围1-499;Centos7可用范围1-999。
普通用户: Centos6可用ID范围500-60000,Centos7可用ID范围1000-6000。
组类别:以用户为核心
用户的主组:基本组;
用户的附加组:额外组;
组类别:根据组内容纳的用户来划分
私有组:与用户名相同,且只有一个此用户;
公共组:组内包含了多个用户;
groupadd命令:添加组
groupadd [选项] group
-g GID:指明GID;
-r, --system:系统组;
EXAMPLE:
添加指明GID的组
[root@localhost ~]# group -g1234 work
验证/etc/group
[root@localhost ~]# tail -1/etc/group
work:x:1234:
groupmod命令:修改组信息
groupmod [选项] GROUP
-g GID
-n NEW_NAME:修改组名;
EXAMPLE:
Linux用户GID为1500,修改它的GID为1200
linux:x:1200:3000::/home/linux:/bin/bash
[root@localhost ~]# groupmod -g1200 linux
[root@localhost ~]# tail -1 /etc/passwd
linux:x:1200:1200::/home/linux:/bin/bash
groupdel命令:删除组
groupdel [选项] GROUP
EXAMPLE:
直接加上组名即可
[root@localhost ~]# groupdelwork
认证
认证机制:验正用户的确是他所声称的人;
通过对比事先存储的,与登录时所提供的信息是否一致;
存储于何处:
用户的认证信息库:/etc/shadow
组的认证信息库:/etc/gshadow
影子口令文件:/etc/shadow
密码:加密存放,使用单向加密机制;
单向加密:仅能加密,不能解密;提取数据特征码;
特征:
数据相同:加密结果相同;
定长输出:单向加密后的密码位数固定
雪崩效应:内容更改一个字节,特征码几乎全变
算法:
1:md5: message digest, 128bits
2:sha1: secure hash algorithm,160bits
3:sha224
4:sha256
5:sha384
6:sha512
添加salt:取随机数;
随机数:
熵池:
/dev/random:仅从熵池返回随机数,随机数耗尽时会阻塞进程;
伪随机数:软件模拟产生;
/dev/urandom:先从熵池返回随机数,熵池耗尽时,则从伪随机数生成器返回随机数;
passwd命令:密码管理命令
passwd [-l] [-u [-f]] [-d] [-e] [-n mindays] [-x maxdays] [-wwarndays] [-i inactivedays] [--stdin] [username]
(1) passwd:修改自己的密码;
[root@localhost ~]# passwd
New password:输入密码
Retype new password:确认密码
(2) passwd username:修改其它用户的密码,仅root有此权限;
[root@localhost ~]# passwd test
PS:root可直接更改任何用户密码,用户自己也可以是简单密码;普通用户改自己密码前必须有密码,如没有,root需先给用户添加密码
密码复杂度:
(1) 不能少于8个字符;
(2) 不能使用与过去的密码太相似的密码;
(3) 应该使用四类字符中的至少三类;
选项:
-l:锁定密码
-u:解锁解密
-d:清除密码
--stdin:从标准输入接收密码;
echo "PASSWORD" |passwd --stdin
EXAMPLE: echo"10011adbc" | passwd --stdin test
gpasswd命令:为组添加密码
组密码文件:/etc/gshadow
gpasswd [选项] group
-a USERNAME:把用户添加至组中;
-d USERNAME:从此组中移除此用户;
id命令:查看用户相关的id信息;
id [OPTION]... [USER]
-u:仅查看uid
-g:仅查看gid
-G:查看所属的所有组的ID;
-n:显示名称,而非ID;
su命令:switch user
切换用户时:
(1) 不读取目标用户的配置文件(非登录式切换,半切换);
su USERNAME
(2) 读取目标用户的配置文件(登录式切换,完全切换);
su -l USERNAME
su - USERNAME
-c command, --command=command:仅以指定的用户的身份运行此处指定的命令,而不执行真正的身份切换操作;
EXAMPLE: su - test -c 'echo$HOME'
注意:root切换至任何其它用户无须认证密码;普通用户切换至其它用户,都需要密码;
三:权限管理
进程安全上下文:
进程:运行一个程序文件而产生,通常由一个用户发起;进程则以发起者的身份运行;
判断进程的发起者是否与文件属主相同,如果是,则以属主的身份来访问,从而应用属主权限;否则
判断进程的发起者是否属于文件的属组,如果是,则应用属组权限;否则
应用“其它”权限
文件:
r:可获取文件的数据;
w:可修改文件的数据;
x:可将此文件运行为进程;
目录:
r:可使用ls命令获取其下的所有文件列表;但不可以使用“ls -l”去获取详细信息,也不可以cd至此目录中;
w:可修改此目录下的文件列表, 即可以在此目录下创建或删除文件;
x:可以使用"ls -l“命令来获取其下的文件的详细属性信息,也可cd至此目录中;
rwxrwxrwx:
owner: rwx
group: rwx
other: rwx
权限组合机制:
以owner为例:
--- 000 0
--x 001 1
-w- 010 2
-wx 011 3
r-- 100 4
r-x 101 5
rw- 110 6
rwx 111 7
ownership: 仅管理员有权限。更改文件的属主、属组
改属主:chow
改属组:chgrp
mode(permission):仅属主。改文件中属主、组、other的权限,只是权限。
chmod命令:
作用:change file mode bits
chmod [OPTION]... MODE[,MODE]...FILE...
chmod [OPTION]... OCTAL-MODEFILE...
chmod [OPTION]...--reference=RFILE FILE...
(1) chmod [OPTION]...MODE[,MODE]... FILE...
赋权表示法:直接操作一类用户的所有权限位rwx;
u=
g=
o=
a=
两类用户权限相同:ug=, go=
EXAMPLE:
[root@localhost test]# chmod go=rfstab
[root@localhost test]# ll
-rw-r--r-- 1 5002 mageedu 595Jun 12 23:28 fstab
不同类的用户权限不同:u=,g=,o=
EXAMPLE:
[root@localhost test]# chmodu=rwx,g=rw,o= fstab
[root@localhost test]# ll
-rwxrw---- 1 5002 mageedu 595Jun 12 23:28 fstab
授权表示法:操作一类用户一位或多位权限;
u+, u-
g+, g-
o+, o-
a+, a-
两类用户权限收授机制相同:ug+, ug-, ...
[root@localhost test]# chmodgo+w fstab
[root@localhost test]# ll
-rw-rw--w- 1 5002 mageedu 595Jun 12 23:28 fstab
不同类的用户权限不同:u+,g+,o+
(2) chmod [OPTION]... OCTAL-MODEFILE...
使用八进制数字后跟文件
EXAMPLE:
[root@localhost test]# chmod 700fstab
[root@localhost test]# ll
-rwx------ 1 test test 595 Jun12 23:28 fstab
(3) chmod [OPTION]...--reference=RFILE FILE...
参考文件的路径需要被设置权限文件
常用选项:
-R, --recursive:递归修改;
chmod 仅更改文件或目录 需要将目录内的所有文件都修改全权限是用 -R
chown命令:
改变文件的属主,也可同时修改的文件的属组
chown [OPTION]...[OWNER][:[GROUP]] FILE...
[root@localhost test]# chowntest:test fstab
[root@localhost test]# ll
-rw-rw--w- 1 test test 595 Jun12 23:28 fstab
chown [OPTION]...--reference=RFILE FILE...
基于参考文件的属主、组来更改文件的主、组
常用选项:
-R, --recursive:递归修改;
基于参考文件的属主、组来更改文件的主组
chgrp命令:
作用:改变属组
chgrp [OPTION]... GROUP FILE...
chgrp [OPTION]...--reference=RFILE FILE...
umask:显示或设定文件模式掩码
umask默认值是 002
文件:
666-umask
目录:
777-umask
注意:之所以文件用666去减,表示文件默认不能有执行权限;如果减得的结果中,u,g或o有执行权限时,则需要加1;
显示:umask
设定:umask MASK
注意:此设定仅对当前shell进程有效;