1.1 Linux用户管理之uid于gid

Linux系统是通过UID和GID来识别用户和组的。用户名相当于人名(给人用的),UID和GID相当于身份证号(系统用的)。

  • 用户和组的关系:一对一,多对一,一对多,多对多。
  • 用户关联的四个文件:/etc/passwd, /etc/shadow, /etc/group /etc/gshadow

1.2 Linux系统用户分类:

超级用户:UID为0 代表是root(天神)
普通用户:UID从500-65535,由超级用户或具有超级用户权限的用户创建的用户。
虚拟用户:UID从1-499 存在满足文件或服务启动的需要。一般都不能登录,只是傀儡。
每个文件和进程,都需要对应一个用户和用户组。

1.3 用户管理常用命令

命令 功能 备注
useradd 添加用户 更改4个文件(passwd, shadow, group gshadow)
passwd 修改 密码 更改/etc/shadow文件
chage 修改用户密码有效期 管理/etc/shadow文件
su 用户角色切换
userdel 删除用户 更改4个文件(passwd, shadow, group gshadow)
usermod 修改用户信息 比如登录名、用户的家目录等等
id 查看用户的UID、GID
sudo 提权
visudo 编辑sudo配置文件

1.4 用户组管理常用命令

命令 功能说明
groupadd 添加用户组(很重要*
groupdel 删除用户组
groupmod 修改用户组信息
gpasswd 为用户组设置密码
groups 显示用户所属的用户组
newgrp 更改用户所属的有效用户组

1.5 用户初始化目录skel

/etc/skel目录是用来存放新用户环境变量的目录,当我们添加新用户时,这个目录下的所有文件都会被复制到新用户的家目录下;默认情况下,/etc/skel目录下的所有文件都是隐藏文件(以.点开头的文件);通过修改、添加、删除/etc/skel目录下的文件,我们可为新创建的用户提供统一的、标准的、初始化用户环境。

/etc/skel目录文件内容:
[root@kali ~]# ls -la /etc/skel/
total 20
drwxr-xr-x. 2 root root 4096 Aug 3 21:07 .
drwxr-xr-x. 83 root root 4096 Aug 17 06:06 ..
-rw-r—r—. 1 root root 18 May 11 07:21 .bash_logout
-rw-r—r—. 1 root root 176 May 11 07:21 .bash_profile
-rw-r—r—. 1 root root 124 May 11 07:21 .bashrc

1.5.1 面试题:

-bash-4.1$ 出现此问题的原因及解决方法?
答:出现此问题原因是 当前用户家目录下的环境变量文件被删除导致。
解决办法:从/etc/skel目录下复制环境变量文件到当前用户的家目录下,并重新登录系统即可解决。
-bash-4.1#
-bash-4.1# cp /etc/skel/.bash* . <= 复制/etc/skel 目录下以.点bash开头的文件到家目录下
-bash-4.1# logout <= 登出系统

[root@kali ~]# <= 重新登录系统后发现已经恢复正常

1.6 命令行显示信息管理

[root@kali ~]# PS1='[\u@\h \w\]\$'
[root@kali ~# PS1='[\u@\h \w\t]\$'
[root@kali ~06:44:53]# PS1='[\u@\h \w]\$'
[root@kali ~]#

1.7 用户初始化useradd配置文件

/etc/default/useradd文件是在使用useradd添加用户时的一个需要调用的一个默认的配置文件。
[root@kali ~]#cat /etc/default/useradd
# useradd defaults file
GROUP=100
HOME=/home #⇒把用户的家目录建在/home中。
INACTIVE=-1 #⇒是否启用账号过期停权,-1表示不启用。
EXPIRE= #⇒账号终止日期,不设置表示不启用。
SHELL=/bin/bash #⇒新用户默认所使用的shell类型
SKEL=/etc/skel #⇒配置新用户家目录的默认文件存放路径。
CREATE_MAIL_SPOOL=yes #⇒创建mail文件

1.8 添加用户名命令useradd

useradd参数选项 注释说明
-c comment #新账号/etc/passwd档的说明栏
-d home_dir #新账号每次登录时所使用的home_dir。
-e expire_date #账号终止日期。日期的指定格式为 MM/DD/YY。
-G group #定义此用户为多个不同groups的成员。每个用户组使用“,”逗号分隔。默认为用户的起始组。
-M #不建立用户家目录。一般创建虚拟用户时不建立家目录。
-s shell # 用户登入后使用的shell名称。默认不填写的话,系统会帮指定预设的登入shell(根据/etc/default/useradd预设的值)。
-u uid #用户的ID值。这个值必须是唯一的。除非用-o选项。数字不可为负值

1.8.1 实例1:useradd -c、-u、-G、-s、-d多个参数组合例子

添加用户oldboy6,并设置其用户注释信息为HandsomeBoy,UID指定为806,
归属为用户组root、oldboy、sa成员,其shell类型为/bin/sh。设置家目录为/oldboy6.
实操结果:
[root@Kali ~]# useradd -c "HandsomeBoy" -u 806 -G root,sa,oldboy -s /bin/sh -md /oldboy6 oldboy6
[root@Kali ~]#tail -1 /etc/passwd
oldboy6:x:806:806:HandsomeBoy:/oldboy6:/bin/sh

[root@Kali ~]# id oldboy6
uid=806(oldboy6) gid=806(oldboy6) groups=806(oldboy6),0(root),500(oldboy),501(sa)

1.8.2 实例2 添加用户指定过期时间

[root@Kali ~]# useradd -g oldboy -e "2018/04/01" -M gongli
[root@Kali ~]# tail -1 /etc/passwd
gongli:x:807:500::/home/gongli:/bin/bash
[root@Kali ~]# id gongli
uid=807(gongli) gid=500(oldboy) groups=500(oldboy)
[root@Kali ~]# chage -l gongli
Last password change : Aug 17, 2016
Password expires : never
Password inactive : never
Account expires : Apr 01, 2018
Minimum number of days between password change : 0
Maximum number of days between password change : 99999
Number of days of warning before password expires

1.9 添加组groupadd及passwd

1.9.1 groupadd

提示:groupadd命令在生产环境中使用的不多,因此,会简单应用即可。

与groupadd命令有关的文件有:
/etc/group -用户组相关文件
/etc/gshadown -用户组加密相关文件

groupadd参数选项 说明
-g gid 指定组的gid

实例1: 添加用户组
[root@Kali ~]# groupadd -g 101 admin
[root@Kali ~]# tail -1 /etc/group
admin:x:101:

实例2:删除用户组
[root@Kali ~]# groupdel admin
[root@Kali ~]# tail -1 /etc/group
oldboy6:x:806:

1.9.2 passwd

功能作用:修改用户密码

passwd参数选项 说明
—stdin 非交互式更改密码

例1:修改gongli的密码为123456
[root@Kali ~]# echo "123456" | passwd --stdin gongli
Changing password for user gongli.
passwd: all authentication tokens updated successfully.

例2:要求oldboy用户7天内不能更改密码,60天以后必须修改密码,过期前10天通知oldboy用户,过期30天后禁止用户登录。
[root@Kali ~]# passwd -n 7 -x 60 -w 10 -i 30 oldboy
Adjusting aging data for user oldboy.
passwd: Success
[root@Kali ~]# chage -l oldboy
Last password change : Aug 17, 2016 #->8月17日密码修改
Password expires : Oct 16, 2016 #->10月16日密码过期
Password inactive : Nov 15, 2016 #->11月15日密码被禁用
Account expires : never
Minimum number of days between password change : 7 #->7天内禁止修改密码
Maximum number of days between password change : 60 #->60天以后必须修改新密码
Number of days of warning before password expires : 10 #->密码过期前10天开始提醒

1.9.3 chage 修改用户密码有效期相关命令

我们在管理用户和用户组时,曾使用过chage命令,chage命令是用来修改用户密码有效期限的。

chage参数选项 注释说明
-E –expiredate 过期日期 讲账户过期时间设为“过期日期”,日期写法:MM/DD/YY
-l ,—list 显示账户年龄信息

例1:查看oldboy用户信息
[root@Kali ~]# chage -l oldboy
Last password change : Aug 17, 2016 <=密码修改
Password expires : Oct 16, 2016 <=密码过期
Password inactive : Nov 15, 2016 <=密码被禁用
Account expires : never
Minimum number of days between password change : 7 <=7天内禁止修改密码
Maximum number of days between password change : 60 <=60天以后必须修改新密码
Number of days of warning before password expires : 10 <=密码过期10天开始提醒

例2:修改oldboy用户过期时间
[root@Kali ~]# chage -E "2016/09/18" oldboy
[root@Kali ~]# chage -l oldboy
Last password change : Aug 17, 2016
Password expires : Oct 16, 2016
Password inactive : Nov 15, 2016
Account expires : Sep 18, 2016 <=用户过期时间已被更改
Minimum number of days between password change : 7
Maximum number of days between password change : 60
Number of days of warning before password expires : 10

1.10 删除用户命令userdel及groupdel

1.10.1 userdel

userdel参数选项 说明
-r 删除家目录

相关文件:
/etc/passwd -用户账户资料文件
/etc/shadow -用户账户资讯加密文件
/etc/group -用户组资讯文件
提示:使用userdel命令的结果实际上就是在更改维护以上的文件。

企业场景处理方法;
一般不确认用户相关目录有没有重要数据就不要用-r。
删除经验:
1、vi /etc/passwd,然后注释掉用户,观察1个月,这样出问题可以还原。相当于操作前备份。
2、把登录shell 改成/sbin/nologin。
3、openldap(类似活动目录)账户统一管理,ldap库里干掉用户。所有服务器全部都没了。
提示:只要是修改和删除都要小心谨慎。

实例1、删除指定账户ett
[root@Kali ~]#tail -n 1 /etc/passwd
ett:x:808:808::/home/ett:/bin/bash
[root@Kali ~]#userdel -r ett
[root@Kali ~]# tail -n 1 /etc/passwd
gongli:x:807:500::/home/gongli:/bin/bash

1.11 一堆命令表

命令 功能
w 显示计算机用户登录情况
last 显示用户登录历史记录
lastlog 计算机所有用户最近的登录情况