[toc]
Linux用户组管理
1.Linux用户管理
1.1 useradd命令创建用户过程
1、不带任何参数使用添加用户时,首先读取/etc/login.defs /etc/default/useradd 预先定义的规则
2、根据设置的规则添加用户,同时会向/etc/passwd /etc/group文件添加新建的用户和组,但/etc/shadow /etc/gshadow也会同步生成记录
3、同时系统会根据/etc/login.defs /etc/default/useradd文件中配置的信息建立用户的家目录,并复制/etc/skel中所有隐藏的环境配置文件到新用户的家目录中,以完成对用户环境的初始化设置
1.2 用户配置文件
1.2.1 /etc/passwd
-
作用
存储用户信息文件,每一行表示一个用户信息,有多少行就表示有多少个用户
-
格式
root : x : 0 : 0 : root : /root : /bin/bash
-
格式含义(此文件由7个字段的数据组成,字段之间用“:”分隔)
1用户名:2密码:3用户标识号UID:4组标识号GID:5个人资料:6主目录:7命令解释器
1.2.2 /etc/shadow
-
作用
存储用户密码信息文件
-
格式
u1 : !! : 17749 : 0 : 99999 : 7 : : :
-
格式含义(此文件由9个字段的数据组成,字段之间用“:”分隔)
1用户名 2 密码 !!表示没有密码 3 最近改动密码的日期 4 密码不可被更动的天数 5 密码需要重新变更的天数 6 密码需要变更期限前的警告期限 7 密码过期的宽限时间 8帐号失效日期 9 保留
1.2.3 /etc/skel(目录)
-
作用
创建用户相关的目录,此目录用来存放新用户需要的所有基础环境变量文件
[root@exercise1 skel]# pwd
/etc/skel
[root@exercise1 skel]# ls -a
. .. .bash_logout .bash_profile .bashrc
[root@exercise1 skel]# ll -a
total 28
drwxr-xr-x. 2 root root 4096 Aug 4 13:09 .
drwxr-xr-x. 103 root root 12288 Aug 8 06:29 ..
-rw-r--r--. 1 root root 18 Mar 23 2017 .bash_logout
-rw-r--r--. 1 root root 176 Mar 23 2017 .bash_profile
-rw-r--r--. 1 root root 124 Mar 23 2017 .bashrc
与/etc/skel有关的问题
1.用户u1登陆系统后提示符如下
-bash-4.1$
2. 原因
用户家目录下的相关环境配置文件被删除
3.解决方法
复制/etc/skel下的.bash*到用户家目录
cp /etc/skel/.bash* ~
1.3 组配置文件
1.3.1 /etc/group
-
作用
存储组相关信息
-
格式
g1: x : 500 :
-
格式含义(此文件由4个字段的数据组成,字段之间用“:”分隔)
1组名 2组密码 3组管理员 4用户组成员
1.3.2 /etc/gshadow
-
作用
存储组密码信息
-
格式
hehe : ! : :
-
格式含义(此文件由4个字段的数据组成,字段之间用“:”分隔)
1组名 2组密码 3组管理员 4用户组成员
1.4 Linux用户分类
1.4.1 管理员用户
- 默认是root用户,它的UID 和GID均为0,系统安装完成后自动生成的,默认通过它就可以登录系统,拥有最高的管理权限
1.4.2 普通用户
- 由系统管理员root创建的,创建完成后可以登录系统,但默认无法 创建、修改和删除任何管理员下的文件;UID从500-65535
1.4.3 系统用户(或虚拟用户)
- 安装系统后默认生成的用户,大多数不能登录系统,但它们是系统正常运行不可缺少的,它们的存在主要是为了方便系统管理,满足相应的系统进程对文件所属用户的要求;UID从 1-499
1.5 用户相关命令
1.5.1 useradd 创建用户
语法格式
- useradd 选项 用户名
选项
-
-n 不创建以用户名为名的组
-
-c 创建用户时,添加个人信息
-
-u 用户ID值,这个值必须是唯一的
-
-s 用户登录后使用的shell
-
-g 指定用户对应的组,对应的组必须在系统中存在
-
-M 不创建用户家目录
1.5.2 usermod 修改用户
语法格式
- usermod 选项 用户名
选项(usermod只有-l选项与useradd不同)
-
-c 修改用户的个人信息,同useradd 的-c功能
-
-g 修改用户对应的用户组,同 useradd的-d功能
-
-s 修改用户登录后使用的shell名称,同useradd的-s功能
-
-u 修改用户的uid ,同useradd 的-u功能
-
-l 修改用户的名称
- -usermod -l 新用户名称 旧用户名称
1.5.3 userdel 删除用户
语法格式
- userdel 选项 用户名
选项
- -f 强制删除用户
- -r 删除用户的同时,删除与用户相关的所有文件(包含邮箱信息/var/spool/mail/)
⚠️
当使用-r 也无法彻底清空用户内容时,把这两个配置文件中与要删除的用户相关的信息,注释或删除掉。
/etc/passwd
/etc/group
1.5.4 passwd 修改用户密码
命令格式
- passwd 选项 用户名
选项
-
--stdin 非交互式设置密码
[root@exercise2 local]# echo 123abc|passwd --stdin caonima
Changing password for user caonima.
passwd: all authentication tokens updated successfully. -
-d 删除密码
[root@exercise2 ~]# passwd -d hehe
Removing password for user hehe.
passwd: Success -
-l 锁定密码
[root@exercise2 ~]# passwd -l hehe
Locking password for user hehe.
passwd: Success
锁定用户hehe的密码后,其他用户就无法登陆hehe用户,会提示错误的密码
[haha@exercise2 ~]$ su - hehe
Password:
su: incorrect password -
-u 解锁密码
[root@exercise2 ~]# passwd -u hehe
Unlocking password for user hehe.
passwd: Success -
-S 显示账户状态信息
账户信息包含7个字段 第1个字段是用户的登录名 第2个字段指示用户账号口令是锁定(L)、无口令(NP)还是有可用口令(P) 第3个字段给出最后一次口令修改的 日期 接下来4个字段是最小有效期,最大有效期,警告字段和口令的休止期,这些时期用天标志
[root@exercise2 ~]# passwd -S hehe hehe PS 2018-08-06 0 1 1 -1 (Password set, SHA512 crypt.)
-
-w,--warndays WARN_DAYS(长格式) 设置口令需要修改前发出警告的天数
WARN_DAYS选项是口令过期前的天数。据到期日这些天数时, 用户将被警告其口令即将过期
-
-x, --maxdays MAX_DAYS 设置口令有效的最大天数
MAX_DAYS天数后,口令需要修改
-
-i, --inactive INACTIVE 此选项用于在口令过期几天后禁用该账户
用户账号的口令过期INACTIVE指定的天数后,该用户将无法再登录此账号
-
-n, --mindays MIN_DAYS 设置口令修改的最小天数间隔为MIN_DAYS
此字段设为0表示用于可以随时修改其口令
-
-e, --expire 使一个账户的口令立即过期。这实际上强迫用户在下次登录时修改密码
WARNING: Your password has expired. You must change your password now and login again! Changing password for user hehe. Changing password for hehe. (current) UNIX password:
1.5.5 su 切换用户
⚠️不加- 直接切换到root家目录,环境变量没有改变,此方式不安全
[root@exercise1 ~]# su hehe
[hehe@exercise1 root]$ pwd
/root
[hehe@exercise1 root]$ ls
ls: cannot open directory .: Permission denied
[hehe@exercise1 root]$ cd /
[hehe@exercise1 /]$ ls
app bin caonima dev hehe lib lost+found misc net opt proc sbin server sys tmp var
backup boot cgroup etc home lib64 media mnt oldboy package root selinux srv test usr
[hehe@exercise1 /]$
⚠️加- 切换到自己的家目录,环境变量改变
[root@exercise1 ~]# su - hehe
[hehe@exercise1 ~]$ pwd
/home/hehe
1.5.6 sudo 用户授权
-
作用
通过配置文件来限制用户的权限 ,可以让普通用户在执行指定的命令或程序时,拥有超级用户的权限
-
sudo工作过程
1.当用户执行sudo时,系统会主动寻找/etc/sudoers文件,判断该用户是否有执行sudo的权限
2.确认用户具有可执行sudo的权限后,让用户输入用户自己的密码确认
3.若密码输入成功,则开始执行sudo后续的命令
4.root执行sudo时不需要输入密码(因为sudoers文件中有配置root ALL=(ALL) ALL这样一条规则)
-
选项
- -l 显示用户拥有的sudo权限
- -k 清空密码,密码有效时间默认5分钟
-
授权示例
示例1:给普通用户u1提权,让普通用户可以查看root用户的家目录;普通用户可以使用useradd命令,创建新用户
范例分析步骤:
1) useradd u1
2) visudo=vi打开/etc/sudoers文件 或 vim /etc/sudoers
注:visudo会检查内部语法,避免用户输入错误信息,所以我们一般使用visudo,编辑此文件要用root权限
3) 编辑文件的第98行,编辑完成后,wq! 强制保存退出(vim 编辑/etc/sudoers 文件权限默认440)
root ALL=(ALL) ALL
u1 ALL=(ALL) /bin/ls,/usr/sbin/useradd
u1 ALL=(ALL) /bin/*,!/bin/ls,!/usr/sbin/useradd 排除/bin/ls
u1 ALL=(ALL) NOPASSWD:/bin/ls 执行sudo命令不需要输入密码
4)使用u1 用户登录测试
sudo useradd u11 //可成功创建用户,证明提权成功
sudo ls /root //可查看root的家,证明提权成功
5) sudo -l //-l 参数是列出当前用户 可执行的命令,但只有在sudoers文件里的用户才能使用该选项
1.5.7 用户查询命令
1.5.7.1 w 显示目前登入系统的用户信息
执行这项指令可得知目前登入系统的用户有哪些人,以及他们正在执行的程序
[root@exercise1 ~]# w
09:09:47 up 6:31, 7 users, load average: 0.07, 0.06, 0.01
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.1.6 05:33 2:35m 0.37s 0.37s -bash
root pts/1 192.168.1.6 05:43 3:07m 0.04s 0.02s bash
root pts/2 192.168.1.6 05:53 3:07m 0.06s 0.05s bash
root pts/3 192.168.1.6 05:55 3:13m 0.02s 0.01s bash
root pts/4 192.168.1.6 06:01 3:07m 0.01s 0.01s -bash
root pts/5 192.168.1.6 07:46 0.00s 0.14s 0.01s w
root pts/6 192.168.1.6 08:04 1:04m 0.04s 0.03s -bash
1.5.7.2 id 查看用户UID、GID
[root@exercise1 ~]# id root
uid=0(root) gid=0(root) groups=0(root)
1.5.7.3 last 显示用户登录情况
[root@exercise1 ~]# last
u1 pts/7 192.168.1.6 Wed Aug 8 08:05 - 08:35 (00:29)
root pts/7 192.168.1.6 Wed Aug 8 08:05 - 08:05 (00:00)
root pts/6 192.168.1.6 Wed Aug 8 08:04 still logged in
root pts/5 192.168.1.6 Wed Aug 8 07:46 still logged in
root pts/4 192.168.1.6 Wed Aug 8 06:01 still logged in
root pts/3 192.168.1.6 Wed Aug 8 05:55 still logged in
root pts/2 192.168.1.6 Wed Aug 8 05:53 still logged in
root pts/1 192.168.1.6 Wed Aug 8 05:43 still logged in
root pts/0 192.168.1.6 Wed Aug 8 05:33 still logged in
user pts/3 192.168.1.6 Wed Aug 8 03:34 - 05:00 (01:26)
user pts/2 192.168.1.6 Wed Aug 8 03:33 - 05:00 (01:27)
u1 pts/6 192.168.1.6 Wed Aug 8 03:25 - 03:25 (00:00)
1.5.7.4 lastlog 显示linux中所有用户最近一次远程登录的信息
[root@exercise1 ~]# lastlog
Username Port From Latest
root pts/7 192.168.1.6 Wed Aug 8 08:05:24 +0800 2018
bin **Never logged in**
daemon **Never logged in**
adm **Never logged in**
lp **Never logged in**
sync **Never logged in**
1.6 组相关命令
1.6.1 groupadd 创建组
语法格式
- groupadd 选项 用户组
选项
- -g gid 指定用户组的GID,GID唯一不能为负数,如果不指定GID从500开始
- -f 新增一个组,强制覆盖一个已存在的组,GID、组成员不会改变
1.6.2 gpasswd 将已存在的用户加入到组中
语法格式
- gpasswd 选项 用户名 组名
选项
- -a:添加一个用户到组,可以追加到组
- -M:添加多个用户到组,覆盖之前的组成员
- -d:从组删除用户
⚠️
1. -a只能添加一个用户到组中,批量添加用户到组用-M选项
2. -M选项再次执行添加用户到组会覆盖之前的用户
1.6.3 groupmod 修改组信息
语法格式
- groupmod 选项 组名
选项
- -n 修改组名
- -g 修改GID
1.6.4 groupdel 删除组
语法格式
- groupdel 组名
1.6.5 groups 查看用户属于哪些组
语法格式
-
groups 用户名
[root@exercise1 ~]# groups root
root : root