#用户、组、su、sudo
[TOC]
目标
描述Linux上用户和组的用途
名词定义
- 什么是用户?
用户账户用于在可以运行命令的不同人员和程序之间提供安全界限。
用户使用用户名向人类用户标识自己并增加操作的便利性。在内部,系统通过分配的唯一标识号(用户ID和UID)来区分不同的用户账户。人类使用用户账户时,通常会为其分配一个密码,供用户用于在登陆时证明他们是实际的授权用户。
用户账户构成了系统安全的基础。系统中的每个进程(运行程序)都作为一个特定用户运行。每个文件都有一个特定用户作为其所有者。文件所有权有助于系统对文件用户实施访问控制。于运行进程相关联的用户可确定该进程可访问的文件和目录。
用户账户有三种类型:超级用户、系统用户和普通用户。
超级用户账户用于管理系统。超级用户的名称为root,其账户UID为0。超级用户对系统具有完全访问控制
系统的系统用户账户提供支持服务进程使用。这些进程(或守护进程)通常不需要以超级用户身份运行。系统会为它们分配非特权账户,允许他们确保其文件和其他资源不受彼此以及系统上普通用户的影响。用户无法使用系统用户账户以交互方式登录。用户UID范围1~200。
大多数用户都有用于处理日常工作的普通用户账户。与系统用户一样,普通用户对系统具有有限的访问权限。安装第三方软件应用程序用户UID范围201~999。手动创建用户UID范围1000+。
用户的信息默认情况下,使用/etc/passwd文件存储。
[root@jenkins ~]# more /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
##以冒号做分割符,每列分别对应关系如下:
##用户名:用户密码:用户ID:组ID:用户注释:用户家目录:用户shell登陆方式
##linux系统早期密码存放在该文件,后期由于安全问题存放在其他文件后面章节会介绍。
##用户不进行系统登陆表示方式:/sbin/nologin
- 什么是组?
组是需要共享文件和其他系统资源访问权限的用户的集合。组可用于向一组用户授予文件访问权限,而非仅仅向一个用户授予访问权限。
与相似,组也有组名称以增加操作的便利性。在内部,系统通过分配的唯一标识号(组ID或GID)来区分不同的组。
组名称到GID的映射在组账户信息数据库中定义。默认情况下,系统使用/etc/group文件存储有关本地组的信息。
[root@jenkins ~]# more /etc/group
root:x:0:
bin:x:1:
daemon:x:2:
sys:x:3:
##以冒号做分割符,每列分别对应关系如下:
##组名称:组密码:组ID(GID):该组所包含的用户(不显示该组的为主要组的用户)
- 主要组和补充组
每个用户有且只有一个主要组。对于本地用户而言,这是按照/etc/passwd文件中的GID号列出的组。默认情况下,这是拥有用户创建的新文件的组。
通常,在创建新的普通用户时,会创建一个与该用户同名的新组。该组将用作新用户的主要组,而该用户是这一用户专用组的唯一成员。事实证明,这有助于简化文件权限的管理。
用户也可以有补充组。补充组的成员资格由/etc/group文件确定。根据所在的组是否具有访问权限,将授予用户对文件的访问权限。具有访问的组是用户的主要组还是补充组无关紧要。
例如,用户张三有一个主要组张三以及两个补充组李四和王五,那么该用户就可以读取其中任何一个组可读的文件。
- 获取超级用户权限
- 使用
su命令进行用户之间的切换。(普通用户切换至管理员用户需要知晓其密码) - 使用
sudo命令进行执行命令。(需要管理员进行配置处理)
实操演示
[root@jenkins ~]# id
uid=0(root) gid=0(root) 组=0(root)
##查看当前用户登陆ID信息
[root@jenkins ~]# visudo
## Allow root to run any commands anywhere
#root ALL=(ALL) ALL
##需要注释本行
## Allows members of the 'sys' group to run networking, software,
## service management apps and more.
# %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS
## Allows people in group wheel to run all commands
#%wheel ALL=(ALL) ALL
sinfotek ALL=/sbin/useradd
##添加sinfotek用户可以执行的命令,需要指定绝对路径。
[root@jenkins ~]# su sinfotek
[sinfotek@jenkins root]$ useradd mark
useradd: Permission denied.
useradd:无法锁定 /etc/passwd,请稍后再试。
##切换普通用户,执行命令失败,因为权限不足
[sinfotek@jenkins root]$ sudo useradd mark
##需要使用sudo命令进行
[sinfotek@jenkins root]$ sudo userdel -r mark
对不起,用户 sinfotek 无权以 root 的身份在 jenkins 上执行 /sbin/userdel -r mark。
##未授权的命令则无法执行
##批量收取命令,可以使用别名方式
Cmnd_Alias USER = /sbin/useradd, /sbin/userdel
sinfotek ALL=USER
##使用别名指定即可。
sodu操作日志记录文件:/var/log/secure
[root@jenkins ~]# tail -f /var/log/secure
Feb 7 12:07:09 jenkins su: pam_unix(su:session): session opened for user sinfotek by root(uid=0)
Feb 7 12:07:11 jenkins sudo: sinfotek : TTY=pts/0 ; PWD=/root ; USER=root ; COMMAND=/sbin/useradd mark
Feb 7 12:07:11 jenkins sudo: pam_unix(sudo:session): session opened for user root by root(uid=0)
Feb 7 12:07:11 jenkins useradd[57898]: new group: name=mark, GID=1002
Feb 7 12:07:11 jenkins useradd[57898]: new user: name=mark, UID=1001, GID=1002, home=/home/mark, shell=/bin/bash
Feb 7 12:07:11 jenkins sudo: pam_unix(sudo:session): session closed for user root
Feb 7 12:07:14 jenkins su: pam_unix(su:session): session closed for user sinfotek
Feb 7 12:07:19 jenkins userdel[58058]: delete user 'mark'
Feb 7 12:07:19 jenkins userdel[58058]: removed group 'mark' owned by 'mark'
Feb 7 12:07:19 jenkins userdel[58058]: removed shadow group 'mark' owned by 'mark'