Linux用户和组管理
Posted Sunyinpeng
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux用户和组管理相关的知识,希望对你有一定的参考价值。
什么是用户?
用户账户用于在可以运行命令的不同人员和程序之间提供安全界限。
用户类型
-
超级用户
用于管理系统,名称为root,UID为0;对系统具有完全访问权限。
-
系统用户
提供支持服务进程使用,有限的权限,通常不需要以超级用户身份运行,系统会为这些进程分配非特权账户。
-
普通用户
用户处理日常工作的普通用户账户,对系统具有优先的访问权限。
# 使用id,可以i显示当前系统已登录用户的信息;id 用户名,可以显示该用户的基本信息。
[root@controller ~]# id
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[root@controller ~]# id root
uid=0(root) gid=0(root) groups=0(root)
# 查看与进程相关联的用户,可以使用ps -au命令,第一列显示的时用户名。
[root@controller ~]# ps au
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
gdm 2266 0.2 0.8 5252832 267392 tty1 Sl+ 03:24 0:10 /usr/bin/gnome-shell
gdm 2665 0.0 0.0 679996 22376 tty1 Sl+ 03:24 0:00 /usr/libexec/gsd-color
root 7824 0.0 0.0 27820 5456 pts/0 Ss 04:00 0:00 -bash
gdm 2702 0.0 0.0 367332 13068 tty1 Sl+ 03:24 0:00 /usr/libexec/gsd-sound
# 查看文件所有者,可以使用ls -l,查看目录所有者,可以使用ls -ld;第三列为用户名。
[root@controller ~]# ls -l
total 8
-rw-------. 1 root root 1667 Nov 7 22:56 anaconda-ks.cfg
drwxr-xr-x. 2 root root 6 Nov 7 23:03 Desktop
drwxr-xr-x. 2 root root 6 Nov 7 23:03 Documents
drwxr-xr-x. 2 root root 6 Nov 7 23:03 Downloads
-rw-r--r--. 1 root root 1894 Nov 7 23:02 initial-setup-ks.cfg
drwxr-xr-x. 2 root root 6 Nov 7 23:03 Music
drwxr-xr-x. 2 root root 6 Nov 7 23:03 Pictures
drwxr-xr-x. 2 root root 6 Nov 7 23:03 Public
drwxr-xr-x. 2 root root 6 Nov 7 23:03 Templates
drwxr-xr-x. 2 root root 6 Nov 7 23:03 Videos
[root@controller opt]# ls -ld ansible/
drwxrwxr-x. 3 sunyinpeng sunyinpeng 29 Nov 16 07:27 ansible/
系统使用/etc/passwd文件存储本地用户信息
[root@controller ~]# 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
dovenull:x:970:970:Dovecot\'s unauthorized user:/usr/libexec/dovecot:/sbin/nologin
libvirtdbus:x:969:969:Libvirt D-Bus bridge:/:/sbin/nologin
sunyinpeng:x:1000:1000::/home/sunyinpeng:/bin/bash
每个字段用冒号隔开,分别为7个字段,含空字段;如下:
- 用户的用户名。
- 用户的密码,以加密方式存储,这里始终为x。当然现在已经移动到/etc/shadow文件中。
- 用户账户的UID号。
- 用户账户的主要组的GID号。
- 用户的真实姓名。
- 用户的主目录,其中包含有用户数据和配置设置。
- 用户的默认shell程序。
什么是组?
组是需要共享文件和其他系统资源访问权限的用户的集合。用与向一组用户授予文件访问权限,而非仅仅向一个用户授予访问权限。
系统使用/etc/group文件存储本地组的信息。
[root@controller ~]# cat /etc/group
root:x:0:
bin:x:1:
mail:x:12:postfix
pulse-access:x:989:
每个字段用冒号隔开,分别4个字段,如下:
- 组名称。
- 组密码字段;该字段始终为x。
- 组的GID。
- 作为补充组的改组的成员的用户列表。
组的类型
-
主要组
每个用户有,且只有一个主要组;在创建新的普通用户时,会创建一个与该用户同名的新组,该组将用作新用户的主要组,而该用户也是这一用户专用组的唯一成员。
-
补充组
补充组的成员资格由/etc/group文件确定,根据所在的组是否具有访问权限,将授予用户对文件的访问权限。具有访问权限的组是用户的主要组还是补充组无关紧要。
管理本地用户账户
从命令行创建用户并设置密码
[root@controller ~]# useradd jerry
[root@controller ~]# useradd jerry
[root@controller ~]# ls /home/
jerry
[root@controller ~]# tail -1 /etc/passwd
jerry:x:1001:1001::/home/jerry:/bin/bash
[root@controller ~]# tail -1 /etc/group
jerry:x:1001:
[root@controller ~]# passwd jerry
Changing password for user jerry.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.
这时将创建一个名为jerry的新用户,设置用户的主目录和账户信息,并为用户jerry用户创建一个专用组。
创建和修改用户常用选项
修改用户的指定:usermod [选项 参数] username
选项 | 说明 |
---|---|
-c,--comment COMMENT | 将用户的真实姓名添加到注释 |
-g,--git GROUP | 为用户账户指定主要组 |
-G,--groups GROUPS | 为用户账户指定补充组 |
-a,--append | 利用-G选项将补充组添加到当前的组成员集合总,而不将补充组替换为新集合 |
-d,--home HOME_DIT | 为用户账户指定特定的主目录 |
-m,--move-home | 搭配-d使用,将用户主目录移到新的位置 |
-s,--shell SHELL | 为用户账户指定特定的登录shell |
-L,--lock | 锁定用户账户 |
-U,--unlock | 解锁用户账户 |
UID范围
- UID 0 始终分配至超级用户账户root。
- UID 1-200 是一系列系统用户。
- UID 201-999 是一系列系统用户,供文件系统中没有自己的文件的系统进程使用。
- UID 1000+ 是可供分配给普通用户的范围。
从命令行删除用户
# userdel 从/etc/passwd中删除用户的详细信息,但保留该用户的主目录
[root@controller ~]# userdel sunyinpeng
[root@controller ~]# ls /home/
jerry sunyinpeng
[root@controller ~]# grep sunyinpeng /etc/passwd
[root@controller ~]#
# userdel -r 从/etc/passwd中删除用户的详细信息,同时删除用户主目录;出于安全隐患,常加参数使用
[root@controller ~]# userdel -r jerry
[root@controller ~]# grep jerry /etc/passwd
[root@controller ~]# ls /home
sunyinpeng
获取超级用户访问权限
超级用户
root用户,该用户的特权高于文件系统上的一般特权,用于管理系统。要执行诸如安装或删除软件以及管理系统文件和目录等任务,必须将特权升级到root用户。
root用户拥有足以破坏系统的无限制权限,如果root账户泄露,则其他人就有可能拥有系统的管理控制权限,所以常以普通用户身份登录,仅在需要时升级到root用户特权。
切换用户
常用su - 指令,从普通用户切换到root用户,需要输入密码;从root用户切换到普通用户,无需输入密码。
[root@controller ~]# su - jerry
[jerry@controller root]$ su root
Password:
[root@controller ~]# su - jerry
su和su - 的区别
su将启动非登录shell,su - 会启动登录shell。su - 将shell环境设置为如同用户重新登录一样,su仅以该用户身份启动shell,使用的还是原始用户的环境设置。
通过sudo运行命令
使用场景
为安全起见,当root用户设置没有有效的密码时,用户也无法通过密码使用root时,更不能su的时候,可以使用sudo获取root的访问权限。
su与sudo的区别:
sudo通常要求用户输入自己的密码以验证身份,而不是输入他们尝试访问的用户账户的密码,也就是说用户使用sudo以root运行命令时,不需要知道root密码。而su则需要输入要切换到的用户的密码。
使用sudo执行的所有命令都默认将日志记录到/var/log/secure中。
[root@controller ~]# cat /var/log/secure
Nov 16 07:15:27 controller sudo[10093]: sunyinpeng : user NOT in sudoers ; TTY=pts/5 ; PWD=/home/sunyinpeng ; USER=root ; COMMAND=/bin/mkdir -p /opt/ansible/configure_users
Nov 16 07:18:40 controller su[10262]: pam_systemd(su:session): Cannot create session: Already running in a session or user slice
Nov 16 07:18:40 controller su[10262]: pam_unix(su:session): session opened for user root by root(uid=1000)
Nov 16 07:19:43 controller su[10262]: pam_unix(su:session): session closed for user root
Nov 16 07:20:57 controller su[10518]: pam_systemd(su:session): Cannot create session: Already running in a session or user slice
Nov 16 07:20:57 controller su[10518]: pam_unix(su:session): session opened for user root by root(uid=1000)
Nov 16 07:21:40 controller su[10518]: pam_unix(su:session): session closed for user root
Nov 16 07:22:29 controller su[10650]: pam_systemd(su:session): Cannot create session: Already running in a session or user slice
Nov 16 07:22:29 controller su[10650]: pam_unix(su:session): session opened for user root by root(uid=1000)
Nov 16 07:26:58 controller su[10650]: pam_unix(su:session): session closed for user root
通过sudo获取交互式root shell
作用:使系统上的非管理员用户账户能够使用sudo来运行su命令,从该账户运行sudo su - 来获取root用户的交互式shell,而无需输入密码即可使用su。
两种方式
- sudo su -
- sudo -i
区别
- sudo su - 命令可以完全像正常登录那样设置root环境,因为su - 命令会忽略sudo所做的设置。
- sudo -i 命令的默认配置实际上会设置在一些细节上与正常登录不同的root用户环境。例如PATH环境变量。
配置sudo
sudo的主配置文件为/etc/sudoers,同时该配置文件中还包含/etc/sudoers.d目录中所有文件的内容,作为配置文件的一部分,为操作简单而便于管理,管理员只需要将相应的文件放入/etc/sudoers.d/目录中,即可为用户添加sudo访问权限。
例子
用户
# 为当前用户jerry启用完整的sudo访问权限(需要输入当前用户密码)
[root@controller ~]# cd /etc/sudoers.d/
[root@controller sudoers.d]# ls
[root@controller sudoers.d]# touch user
[root@controller sudoers.d]# vim user
jerry ALL=(ALL) ALL
## 测试
[jerry@controller sudoers.d]$ sudo su - root
[sudo] password for jerry:
[root@controller ~]#
# 为当前用户jerry启用完整的sudo访问权限(无需输入当前用户密码)
[root@controller sudoers.d]# vim user
jerry ALL=(ALL) NOPASSWD:ALL
## 测试
[jerry@controller sudoers.d]$ sudo su - root
[root@controller ~]#
组
# 为当前用户jerry所在的主要组jerry启用完整的访问权限(需要输入组中当前用户的密码)
[root@controller ~]# cd /etc/sudoers.d/
[root@controller sudoers.d]# touch group
[root@controller sudoers.d]# ls
group
[root@controller sudoers.d]# vim group
%jerry ALL=(ALL) ALL
## 测试
[jerry@controller sudoers.d]$ sudo su - root
[sudo] password for jerry:
# 为当前用户jerry所在的主要组jerry启用完整的访问权限(无需输入组中当前用户的密码)
[root@controller sudoers.d]# vim group
jerry ALL=(ALL) NOPASSWD:ALL
## 测试
[jerry@controller sudoers.d]$ sudo su - root
[root@controller ~]#
参数 | 说明 |
---|---|
%jerry | % 指定一个组,即jerry组 |
ALL=(ALL) | 指定可以包含此文件的任何主机,这个组可以运行任何命令 |
ALL | 指定组可以向任何用户一样运行这些命令 |
NOPASSWD | 允许用户不输入密码 |
管理本地组账户
groupadd命令用户创建组,当组存在时,用户才能添加其中;groupadd不带选项创建组时会使用/etc/login.defs文件中指定范围内的下一个可用GID。
创建组
常用参数 | 参数说明 |
---|---|
- g | 指定要使用组的特定GID |
- r | 使用/etc/login.defs文件中系统GID有效范围内的GID创建系统组。 |
# /etc/login/defs中的SYS_GID_MIN和SYS_GID_MAX配置项定义系统GID的范围
[root@controller ~]# cat /etc/login.defs
#
# Please note that the parameters in this configuration file control the
# behavior of the tools from the shadow-utils component. None of these
# tools uses the PAM mechanism, and the utilities that use PAM (such as the
# passwd command) should therefore be configured elsewhere. Refer to
# /etc/pam.d/system-auth for more information.
......
# System accounts
SYS_GID_MIN 201
SYS_GID_MAX 999
# 当前系统组的GID范围201到999,所以在创建组时尽量避开这个范围,以免与系统组冲突
# 创建组,并指定GID
[root@controller ~]# groupadd -g 2000 sunyinpeng
[root@controller ~]# tail -1 /etc/group
sunyinpeng:x:2000:
# 带-r选项,则使用系统范围内的有效GID
[root@controller ~]# groupadd -r jiagou
[root@controller ~]# tail -2 /etc/group
sunyinpeng:x:2000:
jiagou:x:968:
修改组
groupmod可以更改现有组的属性。
常用参数 | 参数说明 |
---|---|
- n | 指定组的新名称 |
- g | 指定新的GID |
# 更改组名
[root@controller ~]# tail -2 /etc/group
sunyinpeng:x:2000:
jiagou:x:968:
[root@controller ~]# groupmod -n yinpeng sunyinpeng
[root@controller ~]# tail -2 /etc/group
jiagou:x:968:
yinpeng:x:2000:
# 更改组ID
[root@controller ~]# tail -2 /etc/group
jiagou:x:968:
yinpeng:x:2000:
[root@controller ~]# groupmod -g 9000 jiagou
[root@controller ~]# tail -2 /etc/group
jiagou:x:9000:
yinpeng:x:2000:
删除组
使用groupdel命令
[root@controller ~]# tail -2 /etc/group
jiagou:x:9000:
yinpeng:x:2000:
[root@controller ~]# groupdel yinpeng
[root@controller ~]# tail -2 /etc/group
jerry:x:1000:
jiagou:x:9000:
更改组成员
使用usermod更改用户的组,主要通过用户管理进行控制。
常用参数 | 参数说明 |
---|---|
- g | 更改用户的主要组 |
- aG | 将用户添加到某一个补充组 |
# 更改用户jerry的主要组为jiagou
[root@controller ~]# id jerry
uid=1000(jerry) gid=1000(jerry) groups=1000(jerry)
[root@controller ~]# usermod -g jiagou jerry
[root@controller ~]# id jerry
uid=1000(jerry) gid=9000(jiagou) groups=9000(jiagou)
# 将tom用户添加到jiagou为补充组
[root@controller ~]# id tom
uid=1001(tom) gid=1001(tom) groups=1001(tom)
[root@controller ~]# usermod -aG jiagou tom
[root@controller ~]# id tom
uid=1001(tom) gid=1001(tom) groups=1001(tom),9000(jiagou)
以上是关于Linux用户和组管理的主要内容,如果未能解决你的问题,请参考以下文章