Linux是典型的多用户多任务操作系统,因此对于linux来说,同一台计算机资源可以提供给多个人使用是件很普通的事情,但是问题来了,多个人同时使用一台计算机,会不会相互影响和干扰,如果其中有人不小心,做了破坏性的动作,其他人是不是也要玩完?还有如果每个人都有一些隐私的文档保存在这台计算机上,那这些文档会不会被其他人浏览或获取?作为一个安全的操作系统,Linux是如何解决这些问题的呢?作为root用户,具有超级权限,那到底有哪些权限呢?
如何理解用户权限呢
你可以将一台计算机想象为一家酒店,那么这家酒店的root用户是谁呢?毫无疑问,当然是酒店的老板,老板手下的员工可以认为是管理员,而入住者可以认为是普通用户,当你在前台付费登记,定好了自己的房间后,前台会给你指定房间的钥匙或房卡,而这两样就相当于你的账户密码,有了钥匙和房卡,你就可以打开房门,使用该房间提供的所有物品或者服务,当然你使用的东西只能局限于该房间内,你的房卡和钥匙当然不能打开其他房间的房门,除非你是老板。
这是个形象的比喻,也是个缩影,我们周围所有存在的资源都是有限的,没有人能够无限制的使用,因此我们生活和工作的世界里,都存在着大大小小的规则来限制你行动范围和自由,你对资源的使用也需要付出一定的代价来获取。计算机资源也是一样的,对于多人共享的情况下,账户的管理和设计也要符合这种最基本的规则。
权限,从字面意思来理解,权,就是你的权利,规定你能做什么,限,就是限制,规定了你不能做什么,在一定范围内行使你的权利。Linux账户可以根据权限大小的不同,分为超级用户(root),管理员,普通用户。不同用户根据对系统资源的需求,会有不同的权限。那这些权限是谁赋予的呢?这要看超级用户(root)掌握在谁手里,那他就是这些账户的分配者,包括管理员,都需要root用户来分配,在这里管理员账户和普通账户其实没有特别不同,只是一般管理员帐户的权限可能会更多。
Linux的账户权限有很多种,最基本的就是对文件系统的访问权限,即文件或文件夹权限。sudo权限,可以赋予特定账户能够执行root账户的一些命令。ssh权限,控制用户是否可以通过ssh远程登录。
账户及组的概念
linux系统对账号与组的管理是通过ID号来实现的,我们在登录系统时,输入用户名与对应的密码,操作系统会将用户名转化为ID号后再判断该账号是否存在,并对比密码是否匹配。
Linux中,用户ID号被称为UID,组ID被称为GID。其中UID为0,代表超级管理员,也就是root,1~499之间的ID号系统会预留下来。
关于账户管理,有两个概念必须理解,用户(User)和用户组(Group)。
用户(User):一台计算机允许程序或人登录并在一定权限范围之内运行任务的账户配置信息。
用户组(Group):Linux允许把一类用户(多个)划分到一个组里,这一组的用户拥有相同的操作权限,当然一个用户也可以只对应一个组,同时也支持将一个账户添加到多个组里。
创建账号及组
1.useradd
描述:创建新账号
选项:
-c 设置账号描述信息,一般为账号全名,不常用
-d 设置账号家目录,默认为/home/用户名 ,不常用
-e 设置账号的失效时间,格式为YYYY-MM-DD
-g 设置账号的基本组,默认会创建同名的组
-G 设置账号的附加组,多个附加组中间用逗号隔开
-M 不创建账号家目录,一般与-s结合使用
-s 设置账户的登录shell,默认位bash
-u 指定账户UID
-p 创建账号时指定密码
useradd laowan #创建普通账户laowan以及对应的组 useradd -s /sbin/nologin -M esuser #创建无法登录系统且没有家目录的用户esuser #创建普通账户,名称为admin,全名为administrator,账户家目录为/home/admin,账户失效日期为2020-12-12,账户基本组为root,附加组为bin,adm,admin useradd -c administrator -d /home/admin -e 2020-12-12 -g root -G bin,adm,admin
2.groupadd
描述:创建用户组
选项:
-g 设置组ID号
groupadd laowan #创建laowan组
3.id
描述:显示账户及组信息
id root #查看root账户及组信息
修改账号及组信息
passwd:
描述:修改密码
选项:
-l 锁定账号,仅root可使用此选项
–stdin 从文件或管道读取密码
-u 解锁账户
-d 快速清空账户密码
passwd laowan #指定修改laowan账户的密码
2.usermod
描述:修改账号信息
用法:usermod [选项] 账号名称
选项:
-d 修改账户家目录
-e 修改账户失效日期
-g 修改账户所属基本组
-G 修改账户所属附加组
-s 修改账户登录Shell
-u 修改账户UID
usermod -d /home/tomcat tom #修改tom的家目
删除账户及组
1.userdel
描述:删除账号信息
用法:userdel [选项] 账号名称
选项:
-r 删除账户及相关文件
userdel tom #删除账户tom,但该账户的文件不删除 userdel -r tom #删除账户tom,并删除相应的家目录
2.groupdel
描述:删除组账户
groupdel tom #删除组tom
账户与组文件解析
系统账户信息及密码信息保存在哪里?
如果你想通过某种方式知道系统中所有的用户及group信息时,最简单的方式就是查看用户管理相关的数据文件,一般这些文件对所有用户都是可读的,这些文件包括/etc/passwd, /etc/shadow, /etc/group等。
1.账号信息文件
账户信息被保存在/etc/passwd文件中,通过命令cat /etc/passwd查看文件内容如下:
[root@localhost ~]# cat /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin games:x:12:100:games:/usr/games:/sbin/nologin ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin nobody:x:99:99:Nobody:/:/sbin/nologin systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin dbus:x:81:81:System message bus:/:/sbin/nologin polkitd:x:999:998:User for polkitd:/:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin rabbitmq:x:998:996:RabbitMQ messaging server:/var/lib/rabbitmq:/sbin/nologin esuser:x:1000:1000::/home/esuser:/bin/bash ntp:x:38:38::/etc/ntp:/sbin/nologin wanli:x:1001:1001::/home/wanli:/bin/bash
说明:
文件以冒号为分隔符,第一列为账户名称,第二列为密码占位符(x表示该账户需要密码才能登录,为空时,账户无须密码即可登录),第三列为账户UID,第四列为GID,第五列为账户附加基本信息,一般存储账户名全称,联系方式等信息,第六列为账户家目录位置,第七列为账户登录Shell,/bin/bash为可登录系统Shell,/sbin/nologin表示账户无法登录系统。
2.账户密码文件
账户密码信息被保存在/etc/shadow文件中,通过命令cat /etc/shadow查看文件内容如下:
[root@localhost ~]# cat /etc/shadow root:$6$Ch6FDqZoQLlsM.M4$XfMMYsIJROVn2Qhw/LzunBMg4b8CvHzeczYcoLLfJdcDKCOMugqGggN0O1cDgKUGv8iwbJVs4FqH6FXrADDvV.::0:99999:7::: bin:*:17632:0:99999:7::: daemon:*:17632:0:99999:7::: adm:*:17632:0:99999:7::: lp:*:17632:0:99999:7::: sync:*:17632:0:99999:7::: shutdown:*:17632:0:99999:7::: halt:*:17632:0:99999:7::: mail:*:17632:0:99999:7::: operator:*:17632:0:99999:7::: games:*:17632:0:99999:7::: ftp:*:17632:0:99999:7::: nobody:*:17632:0:99999:7::: systemd-network:!!:17785:::::: dbus:!!:17785:::::: polkitd:!!:17785:::::: sshd:!!:17785:::::: postfix:!!:17785:::::: rabbitmq:!!:17903:::::: esuser:$6$.zrK2MoI$xh5CTt4T.d9OUmkTmXjwQV.wZj9VxjL0w5ciZb9NtIJ5VxHtRc1CQQk5lyyIGy6YN3oHjPf2ASaN4iZJJ2Tcv.:17903:0:99999:7::: ntp:!!:17917:::::: wanli:$6$Ojs2fPjR$QPqaemI4uhOjW.lFIS4iSdyJQELisHKQ7nQ/IdeXHdzDThRTLWYZvVNwRkssLR64SUqrEoXklg.m.JrcwTHbe1:17939:0:99999:7:::
说明:
文件以冒号为分隔符,第一列为账户名称,第二列为密码(账户未设置密码时为!!,设置密码后加密显示,CentOS7默认采用SHA-512算法),第三列为上次修改密码的时间距离1970年01月01日多少天,第四列为密码最短有效天数,0表示无限制;第五列为密码最长有效天数(默认位99999天,可以理解为永不过期),第六列为密码过期后的宽限天数(密码过期后,预留几天给账号修改密码,此时已无法使用旧密码登录),第八列为账户失效日期(从1970年01月01日起多少天后账户失效),第九列暂时保留未使用。
3.组账户信息文件
组账户信息被保存在/etc/group文件中,通过命令cat /etc/group查看文件内容如下:
[root@localhost ~]# cat /etc/group root:x:0: bin:x:1: daemon:x:2: sys:x:3: adm:x:4: tty:x:5: disk:x:6:
说明:
文件以冒号为分隔符,第一列为组账户名称,第二列为密码占位符,第三列为GID,第四列为组成员信息(注意,这里仅显示附加成员,基本成员不显示)
4.组账户密码文件
组账户密码信息被保存在/etc/gshadow文件中,通过命令cat /etc/gshadow查看内容如下:
[root@localhost ~]# cat /etc/group root:x:0: bin:x:1: daemon:x:2: sys:x:3: adm:x:4: tty:x:5:
说明:
文件以冒号为分隔符,第一列为组账户名称,第二列为组密码,第三列为组管理员,第四列为组成员信息