前言
Linux是一个真实的、完整的多用户(Multi-Users)多任务(Multi-Tasks)操作系统,多用户多任务就是可以在系统上建立多个用户,而多个用户可以在同一时间内登录同一个系统执行各自不同的任务,而互不影响。不同用户具有不同的权限,每个用户是在权限允许的范围内完成不同的任务,Linux正是通过这种权限的划分与管理,实现了多用户多任务的运行机制。用户组是具有相同特征用户的逻辑集合,有时我们需要让多个用户具有相同的权限,比如查看、修改某一个文件的权限,一种方法是分别对多个用户进行文件访问授权,如果有10个用户的话,就需要授权10次,显然这种方法不太合理;另一种方法是建立一个组,让这个组具有查看、修改此文件的权限,然后将所有需要访问此文件的用户放入这个组中,那么所有用户就具有了和组一样的权限。这就是用户组,将用户分组是Linux 系统中对用户进行管理及控制访问权限的一种手段,通过定义用户组,在很大程度上简化了管理工作。
用户和组之间的关系:一对一、一对多、多对一、多对多。
1、一对一:即一个用户可以存在一个组中,也可以是组中的唯一成员。
2、一对多:即一个用户可以存在多个用户组中。那么此用户具有多个组的共同权限。
3、 多对一:多个用户可以存在一个组中,这些用户具有和组相同的权限。
4、多对多:多个用户可以存在多个组中。其实就是上面三个对应关系的扩展。
此内容转载自:https://blog.****.net/yasi_xi/article/details/8152938
一、用户和组
1.1、用户
对Linux而言,用户可以简单理解为一个具备用户标识(用户名)和密码的使用者。
用户的类型:
管理员
普通用户:系统用户、登录用户
何为系统用户?为了能够让后台进程或服务类进程以非管理员的身份运行,通常需要为此创建多个普通用户,这类用户从不用登录系统,这就称为系统用户。
用户标识:UserID或UID:
16bits二进制数字:0~65535
管理员:0
普通用户:1~65535
系统用户:1~499(CentOS6),1~999(CentOS7)
登录用户:500~60000(CentOS6),1000~60000(CentOS7)
1.2、组
对Linux而言,组可以简单理解为是用户的容器。
组的类型:
组类型1:
管理员组
普通用户组:系统用户组、登录用户组
组标识:GroupID或GID
管理员组:0
普通用户组:1~65535
系统用户组:1~499(CentOS6),1~999(CentOS7)
登录用户组:500~60000(CentOS6),1000~60000(CentOS7)
组类型2:
用户的主组
用户的附加组
组类型3:
用户的私有组:组名与用户名相同,且只包含一个用户
公共组:组内包含了多个用户
1.3、用户和组的信息库、密码库简介
一个用户要想登录Linux操作系统,就必须进行认证。认证即通过比对事先存储的信息与登录时提供的信息是否一致。下面将对用户和组的信息库及密码库作简单介绍。
1.3.1、用户的信息库:/etc/passwd
文件格式:name:password:UID:GID:GECOS:directory:shell
字段说明:
name:用户名
password:可以是加密的密码串,也可以是占位符x
UID:用户ID
GID:用户所属的主组的ID
GECOS:注释信息
directory:用户的家目录
shell:用户默认的shell,登录时默认的shell程序
1.3.2、组的信息库:/etc/group
文件格式:group_name:password:GID:user_list
字段说明:
group_name:组名称
password:密码
GID:组ID
user_list:该组的用户成员,以此组为附加组的用户的用户列表
1.3.3、用户的密码库:/etc/shadow
文件格式:login name:encrypted password:date of last password change:minimum password age:maximum password age:password warning period:password inactivity period:account expiration date:reserved field
字段说明:
login name:登录名
encrypted password:加密了的密码
date of last password change:最后一次更改密码的日期
minimum password age:密码最小使用期限
maximum password age:密码最大使用期限
password warning period:密码警告时间段
password inactivity period:密码禁用期限
account expiration date:账号过期日期
reserved field:保留字段
1.3.4、组的密码库:/etc/gshadow
文件格式:group name:encrypted password:administrators:members
字段说明:
group name:组名
encrypted password:加密了的密码
administrators:管理员
members:成员
1.3.5、简述密码
密码使用策略:
1、使用随机密码
2、最短长度不要低于8位
3、应该使用大写字母、小写字母、数字和标点符号四类字符之中的至少三类
4、定期更换密码
用户设定密码之后,系统会对该密码进行加密,使其密码更加安全,不易被破解。对密码加密就必定有其对应的加密方式和加密算法,下面将对加密方式及其加密算法进行简单介绍。
加密方式:
对称加密:加密和解密使用同一个密码
非对称加密:加密和解密使用的一堆密钥
密钥对:
公钥:public key
私钥:private key
单向加密:只能加密,不能解密;对密码进行加密之时提取数据的特征码
特性:
1、定长输出
2、雪崩效应
加密算法:
1、md5:message digest,128bits
2、sha:secure hash algorithm,160bits
3、sha224:secure hash algorithm,224bits
4、sha256:secure hash algorithm,256bits
5、sha384:secure hash algorithm,384bits
6、sha512:secure hash algorithm,512bits
每一种加密算法对应的序号,可以理解为该算法的代号,请看下图:
上图所示,白色部分为用户yue的密码,只是显示的是加密之后的密码。
加密之后的密码字符串,第一个$与第二个$之间的代表的是算法,上图中的数字6代表的是对密码进行加密时使用的算法为sha512。
那么,如果两个用户设置的密码一样,加密之后的密码字符串是否一样呢?请看下图:
上图所示,添加新用户qingyue,设置其密码跟用户yue的密码一致,在/etc/shadow之中两个用户加密之后的密码字符串不一致。何解?
因为在用户设置密码的时候,系统会在对密码加密之时添加随机数(salt),所以用户尽管设置的密码一致,但经过加密之后的密码字符串也是千差万别的。
encrypted password:
1、第一个“$”和第二个“$”之间代表的是加密时使用的算法
2、第二个“$”和第三个“$”之间代表的时加密时添加的随机数(salt)
3、第三个“$”和第二个“:”之间代表的是用户设置的密码
二、用户管理和组管理
2.1、useradd命令:创建用户
语法格式:
useradd [options] LOGIN_NAME
useradd -D:显示创建用户的默认配置
注意:创建用户时的诸多默认设定配置文件为:/etc/login.defs
useradd -D [option]:修改默认配置的值
注意:修改的结果保存于/etc/default/useradd文件中,当然,也可以修改此文件实现修改默认配置
例如:useradd -D -s /bin/csh 修改用户的默认shell为/bin/csh
常用选项:
-u,--uid UID:指定UID
-g,--gid GROUP:指定所属基本组ID,此组得事先存在
-c,--comment COMMENT:指明注释信息
-G,--groups GROUP1,[GROUP2,...[,GROUPN]]:指明用户所属的附加组,多个附加组之间用逗号隔开
-d,--home HOME_DIR:以指定的路径为用户的家目录。通过复制/etc/skel此目录并重命名实现,指定的家目录路径如果事先存在,则不会为用户复制环境配置文件
-s,--shell SHELL:指定用户的默认shell,可用的所有shell列表存储在/etc/shell文件中
-r,--system:创建系统用户
-M:不为用户创建家目录
2.2、usermod命令:修改用户属性
语法格式:usermod [options] LOGIN_NAME
常用选项:
-u,--uid UID:修改用户的UID为此处指定的新UID
-g,--gid GROUP:修改用户所属的基本组,此组得事先存在
-G,--groups GROUP1,[GROUP2,...[,GROUPN]]:修改用户所属的附加组,原来的附加组会被覆盖
-a,--apend :与-G一同使用,用于为用户追加新的附加组
-c,--comment COMMENT:修改注释信息
-d,--home HOME_DIR:修改用户的家目录,用户原有的家目录不会被转移至新的位置
-m,--move-home,只能与-d选项一同使用,用于将原来的家目录移动为新的家目录
-l,--login NEW_LOGIN:修改用户名
-s,--shell SHELL:修改用户的默认shell
-L,--lock:锁定用户密码,即在用户原来的密码字符串前面加“!”
-U,--unlock:解锁用户的密码
2.3、userdel命令:删除用户
语法格式:userdel [options] LOGIN_NAME
常用选项:
-r:删除用户时一并删除其家目录
2.4、groupadd命令:添加组
语法格式:groupadd [options] GROUP_NAME
常用选项:
-g GID:指定GID,默认是上一个组的GID+1
-r:创建系统组
2.5、groupmod命令:修改组属性
语法格式:groupmod [options] GROUP_NAME
常用选项:
-g GID:修改GID
-n NEW_GROUP_NAME:修改组名
2.6、groupdel命令:删除组
语法格式:groupdel GROUP_NAME
2.7、passwd命令:修改用户密码
语法格式:passwd [-k] [-l] [-u [-f]] [-d] [-e] [-n mindays] [-x maxdays] [-w warndays] [-i inactivedays] [-S] [--stdin] [username]
passwd:修改用户的密码
passwd USERNAME:修改指定用户的密码,但仅root有此权限
注意:管理员修改任何用户的密码都不需要知道之前的密码
常用选项:
-l:锁定用户的密码
-u:解锁用户的密码
-d:清除用户的密码
-e DATE:过期期限,日期
-i DAYS:非活动期限
-n DAYS:密码的最短使用期限
-x DAYS:密码的最长使用期限
-w DAYS:警告期限
--stdin:echo "PASSWORD" | passwd --stdin USERNAME
2.8、gpasswd命令:向组中添加密码
语法格式:gpasswd [option] group
常用选项:
-a USERNAME:向组中添加用户
-d USERNAME:向组中移除用户
2.9、newgrp命令:临时切换指定的组为基本组
语法格式:newgrp [-] [group]
常用选项:
-:会模拟用户重新登录以实现重新初始化其工作环境,exit退出
2.10、chage命令:更改用户密码过期信息
语法格式:chage [options] LOGIN_NAME
2.11、id命令:显示用户的真和有效ID
语法格式:id [OPTION]... [USER]
常用选项:
-u:仅显示有效的UID
-g:仅显示用户的基本组ID
-G:仅显示用户所属的所有组ID
-n:显示名字而非ID
2.12、su命令:switch user
语法格式:
登录式切换:会通过重新获取目标用户的配置文件来重新初始化
su - USERNAME
su -l USERNAME
非登录式切换:不会读取目标用户的配置文件来进行初始化
su USERNAME
注意:管理员可以无密码切换至其他任何用户
常用选项:
-c ‘COMMAND‘:仅以指定用户的身份运行此处指定的命令
用法:su - USERNAME -c ‘COMMAND‘
其他的几个命令,例如:chsh、chfn、finger、whoami、pwck、grpck,由于用的不多,此处不再作过多说明。
三、权限管理
进程对文件的访问权限应用模型:进程的属主与文件的属主是否相同,如果相同,则应用属主权限,否则,则检查进程的属主是否属于文件的属组,如果是,则应用属组权限,否则,就只能应用other的权限。
使用ls -l命令查看/etc目录下的文件:
图中第一个目录最左侧显示为:drwxr-xr-x,其中d代表的是这是一个目录,第二个文件最左侧显示为:-rw-r--r--,其中第一个-代表的是这是一个文件,下面的也一样。
权限:rwxrwxrwx
左三位:定义user(owner)的权限
中三位:定义group的权限
右三位:定义other的权限
注意:-表示无此权限,例如,r-x表示拥有读和执行的权限,无写权限。
权限说明:
r:read,可读
w:write,可写
x:excute,可执行
对文件而言,r代表可获取文件的数据;w可修改文件的数据;x代表可将此文件运行为进程。
对目录而言,r代表可使用ls命令获取其下的所有文件列表;w代表可修改此目录下的文件列表,即创建或删除文件;x代表可使用cd命令切换至此目录中,且可使用ls -l来获取所有文件的详细属性信息。
权限组合机制:
权限 | 二进制 | 八进制 |
--- | 000 | 0 |
--x | 001 | 1 |
-w- | 010 | 2 |
-wx | 011 | 3 |
r-- | 100 | 4 |
r-x | 101 | 5 |
rw- | 110 | 6 |
rwx | 111 | 7 |
3.1、权限管理命令
3.1.1、chmod命令
语法格式:
1、 chmod [OPTION]... MODE[,MODE]... FILE...
MODE表示法:
赋权表示法:直接操作一类用户的所有权限位rwx
u=
g=
o=
a=
注意:a表示所有,即user、group、other
授权表示法:直接操作一类用户的一个权限位,r,w,x
u+,u-
g+,g-
o+,o-
a+,a-
一类用户的权限不同时可以使用逗号分隔,例如:chmod u+x,u-w 文件
2、chmod [OPTION]... OCTAL-MODE FILE...
二进制,例如:chmod 744 文件
3、chmod [OPTION]... --reference=RFILE FILE...
chmod --reference=参考文件 目标文件,即目标文件拥有参考文件的权限
常用选项:
-R,--recursive:递归修改
注意:用户仅能修改属主为自己的那些文件的权限!
3.2、从属关系管理命令:chown、chgrp
3.2.1、chown命令
语法格式:
1、chown [OPTION]... [OWNER][:[GROUP]] FILE...
2、chown [OPTION]... --reference=RFILE FILE...
常用选项:
-R:递归修改
3.2.2、chgrp命令
chgrp命令:用法跟chown命令一样,但是只能修改组。
注意:仅管理员可以修改文件的属主和属组!
权限管理命令使用的相关练习请参考:https://www.cnblogs.com/holson/p/12942661.html
四、补充内容
介绍之前,请先看下图:
为什么使用不同的用户创建出来的文件权限不一样?这里涉及到了umask的概念。
umask:文件的权限反向掩码,也可以称之为遮罩码
文件:666-umask
目录:777-umask
注意:之所以文件用666去减umask,表示文件默认不能拥有执行权限;如果减去的结果之中有执行权限,则需要将其加1。
例如:
umask:023
666-023=644
777-023=754
umask命令:
umask:查看当前umask
umask MASK:设置umask
注意:使用umask MASK仅对当前shell进程有效!
总结:
珍惜爱你的人和你爱的人,一旦失去,你将一辈子活在悲痛与绝望之中!