Linux用户和用户组管理常见难点,linux基础第七篇

亚洲城ca88手机版官网

(1)对/etc/shadow文件的编辑导致用户密码丢失

Linux基础介绍【第七篇】,linux基础第七篇

亚洲城ca88手机版官网 1

 

原因:当用户尝试修改密码时,如果其他人正在编辑/etc/shadow文件,将可能导致修改的密码失效。

linux用户分类

超级用户:UID=0,root

普通用户:UID 500起,由超级用户或具有超级用户权限的用户创建的用户。

虚拟用户:UID
1—499,为了满足文件或服务启动的需要而存在,一般都不能登录,只是傀儡用户。

用户关联的四个文件:

/etc/passwd:用户的账号文件

/etc/shadow:用户的密码文件

/etc/group:组的账号文件

/etc/gshadow:组的密码文件

 添加用户组命令groupadd

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

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

groupadd命令语法

亚洲城ca88手机版官网 2亚洲城ca88手机版官网 3

[root@chensiqi ~]# man groupadd #查看groupadd命令的帮助信息
名称:
    groupadd -建立新的用户组
语法:
    groupadd 【-g gid [-o][-r][-f]】 groupname
描述:
    groupadd可指定用户组名称来建立新的用户组账号。需要时可从系统种取得新用户组值。

View Code

为了方便阅读和查看相关参数,我依然用表格的方式把groupadd参数选项展现给大家如下所示:
|groupadd参数选项|注释说明(带特殊颜色的表示重要,需要掌握)|
|–|–|
|-g
gid|指定用户组GID值。除非接-o参数(如:groupadd -g 1234 -o chensiqi),否则ID值必须是唯一的数字(不能负数)。如果不指定-g参数,则预设值会从500开始|
|-r|建立系统用户组。GID值会比/etc/login.defs中定义的UID_MIN值小。|
|-f|新增一个账户,强制覆盖一个已经存在的用户组账号|

解决:我们可以使用vipw命令来编辑时,自动对该文件加锁,编辑结束自动结束,从而保证了数据的一致性。

账号管理

useradd(增):同adduser命令,执行此命令可在系统中添加用户。

userdel(删):执行此命令可删除用户及相关用户的配置或文件。

usermod(改):修改用户的命令,可以通过usermod来修改登录名、用户的家目录等。

usermod -s /sbin/nologin oldboy

usermod -s /bin/bash oldboy

id(查):查看用户的UID、GID及所归属的用户组。

passwd:执行此命令可为用户设置密码,更改/etc/shadow。

chage:修改用户密码有效期限,管理/etc/shadow。

su:用户角色切换工具。

sudo:sudo是通过另一个用户来执行命令,su是用来切换用户,然后通过切换到的用户来完成相应的任务,但sudo能在命令后面直接接命令执行,比如sudo
ls
/root,不需要root密码就可以执行只有root才能执行相应的命令或具备的目录权限;这个权限需要通过visudo命令或直接编辑/etc/sudoers来实现。

visudo:visudo配置sudo权限的编辑命令,也可以直接用vi编辑/etc/sudoers实现,推荐使用visudo来操作(会自动检查语法)。

groupadd命令实例

在生产环境中,一般增加用户组的用法都是非常简单的,比如下面的例子,添加GID为802的用户组chensiqi

[root@chensiqi ~]# groupadd -g 802 chensiqi #未必一定要指定GID。一般需求不加也可以

如果不需要指定用户组ID值,可以直接执行

[root@chensiqi ~]# groupadd chensiqi

提示:未提到的groupadd的参数,大家可以暂时忽略掉,在实际工作中用的比较少。

 

(2)/etc/nologin文件引起普通用户无法登录

/etc/skel目录

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

删除/home/用户家目录
中的.bash_logout、.bash_profile、.bashrc产生的效果:-bash-4.1$

解决办法:

从/etc/skel中拷贝.bash_logout、.bash_profile、.bashr到用户家目录即可解决。

用户密码相关命令passwd

前文我们已经学会如何添加用户和用户组了,本节我们来学习设置或修改用户的密码。passwd命令的用户很多,但大多数用法在平时工作中都不经常使用,这里我们挑选一些生产环境工作中常用的用法加以说明。

passwd命令介绍

普通用户和超级用户都可以运行passwd命令,但普通用户只能更改自身的用户密码,超级用户root则可以设置或修改所有用户的密码。

当直接执行passwd命令后面不接任何参数或用户名时,则表示修改当前登录用户的密码,请看下面的例子:

[root@chensiqi1 ~]# passwd #root用户下直接执行passwd,后面不接任何用户表示修改root用户的密码:下面也有提示。
Changing password for user root.
New password:  #输入新密码 
Retype new password:  #再次输入新密码
passwd: all authentication tokens updated successfully. #成功修改root密码

提示:
普通用户只能修改自身的密码。如果想更改自身的密码,同样是直接运行passwd命令;比如当前操作系统用户是chensiqi:

[chensiqi@chensiqi1 ~]$ passwd #普通用户也输入passwd修改密码
Changing password for user chensiqi.
Changing password for chensiqi.
(current) UNIX password: #普通用户必须先输入旧密码才能更改
New password: 
Password unchanged #新密码不能和旧密码相同。
New password: 
Password unchanged
New password: 

passwd 命令参数选项

亚洲城ca88手机版官网 4亚洲城ca88手机版官网 5

[chensiqi@chensiqi1 ~]$ passwd --help
Usage: passwd [OPTION...] <accountName>
  -k, --keep-tokens       keep non-expired authentication tokens
                          #保留即将过期的用户在期满后仍能使用
  -d, --delete            delete the password for the named account (root only)
                          #删除用户密码,仅能以root权限操作
  -l, --lock              lock the password for the named account (root only)
                          #锁住用户无权更改密码,仅能通过root权限操作。
  -u, --unlock            unlock the password for the named account (root only)
                          #解除锁定;
  -f, --force             force operation
                          #强制操作:仅root权限才能操作
  -x, --maximum=DAYS      maximum password lifetime (root only)
  #两次密码修正的最大天数,后面接数字:仅root权限操作
  -n, --minimum=DAYS      minimum password lifetime (root only)
  #两次密码修改的最小天数,后面接数字,仅能root权限操作
  -w, --warning=DAYS      number of days warning users receives before password expiration (root only)     #在距多少天提醒用户修改密码:仅能root权限操作
  -i, --inactive=DAYS     number of days after password expiration when an account becomes disabled(root only) #在距多少天提醒用户修改密码:仅能root权限操作
  -S, --status            report password status on the named account (root only)                 #查询用户的密码状态,仅能root用户操作。

View Code

为了方便查看,我们用表格方式把passwd命令的常用参数选项列表显示,如下表所示:

 

passwd参数 注释说明(带特殊颜色的表示重要,需要掌握)
-k –keep-tokens 保留即将过期的用户在期满后仍能使用
-d –delete 删除用户密码,仅能以root权限操作
-l, –lock 锁住用户无权更改密码,仅能通过root全县操作
-u, –unlock 解除锁定
-f, –force 强制操作:仅root权限才能操作
-x,–maximum=DAYS 两次密码修改的最大天数,后面接数字:仅能root权限操作
-n –minimum=DAYS 两次密码修改的最小天数,后面接数字,仅能root权限操作
-w –warning=DAYS 在距多少天提醒用户修改密码:仅能root权限操作
-l –inactive=DAYS 在密码过期后多少天,用户被禁掉,仅能以root操作
-S –status 查询用户的密码状态,仅能root用户操作
–stdin 从stdin读入密码

 

示例1:我们用-l参数来锁定chensiqi用户,使之不能修改密码,然后再用-u参数来解除锁定。

亚洲城ca88手机版官网 6亚洲城ca88手机版官网 7

 1 [zcl@chengliang ~]$ passwd -S zcl
 2 Only root can do that.
 3 [zcl@chengliang ~]$ su - root
 4 Password: 
 5 [root@chengliang ~]# passwd -S zcl  #锁定前zcl用户的状态信息
 6 zcl PS 2016-11-19 0 99999 7 -1 (Password set, SHA512 crypt.)
 7 [root@chengliang ~]# grep zcl /etc/shadow  # 查看密码加密文件zcl用户信息的变化
 8 zcl:$6$X.mR9wCK$J3VXtMEZ9jK0t1xgFKT3J1Yb6uD/hRAlqIG83PDDlViHA4abbwT0p3ay9jAHU1LgODr1bycXd8GaL3IVUBjdG.:17124:0:99999:7:::
 9 [root@chengliang ~]# passwd -l zcl  # 锁定用户zcl, 使之不能更改密码。
10 Locking password for user zcl.
11 passwd: Success  # 锁定成功
12 [root@chengliang ~]# grep zcl /etc/shadow
13 zcl:!!$6$X.mR9wCK$J3VXtMEZ9jK0t1xgFKT3J1Yb6uD/hRAlqIG83PDDlViHA4abbwT0p3ay9jAHU1LgODr1bycXd8GaL3IVUBjdG.:17124:0:99999:7:::
14 # 密码信息前边多了两个叹号!
15 [root@chengliang ~]# passwd -S zcl   #查看用户状态
16 zcl LK 2016-11-19 0 99999 7 -1 (Password locked.)
17 [root@chengliang ~]# su - zcl
18 [zcl@chengliang ~]$ passwd
19 Changing password for user zcl.
20 Changing password for zcl.
21 (current) UNIX password: 
22 passwd: Authentication token manipulation error  # 失败不让修改
23 [zcl@chengliang ~]$ exit
24 logout
25 [root@chengliang ~]# passwd -u zcl  # 通过-u参数,解除对用户zcl的锁定。
26 Unlocking password for user zcl.
27 passwd: Success
28 [root@chengliang ~]# passwd -S zcl
29 zcl PS 2016-11-19 0 99999 7 -1 (Password set, SHA512 crypt.)
30 [root@chengliang ~]# grep zcl /etc/shadow
31 zcl:$6$X.mR9wCK$J3VXtMEZ9jK0t1xgFKT3J1Yb6uD/hRAlqIG83PDDlViHA4abbwT0p3ay9jAHU1LgODr1bycXd8GaL3IVUBjdG.:17124:0:99999:7:::
32 # 感叹号消失
33 [root@chengliang ~]# 

View Code

示例2:举一个组合参数-x-n-w-i控制密码时效的例子

[root@chensiqi1 ~]# date +%F    #显示当前系统时间
2017-02-16
[root@chensiqi1 ~]# chage -l chensiqi  #查看当前账户状态
Last password change                    : Feb 12, 2017
Password expires                    : Apr 13, 2017   
Password inactive                   : May 13, 2017
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天通知用户

示例3:下面要求chensiqi用户7天内不能更改密码,60天以后必须修改密码,过期前10天通知用户,过期后30天禁止用户登录

[root@chensiqi1 ~]# passwd -n 7 -x 60 -i 30 -w 10 chensiqi
Adjusting aging data for user chensiqi.
passwd: Success
#chage -m 7 -M 60 -W 10 -I 30 chensiqi 命令也可以实现同样功能,只是参数的写法不同。
[root@chensiqi1 ~]# chage -l chensiqi  #查看修改后的结果
Last password change                    : Feb 12, 2017 #最后一次修改密码
Password expires                    : Apr 13, 2017  #密码过期时间
Password inactive                   : May 13, 2017 #密码被禁用
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天开始提醒

示例4:【必会】我们用–stdin参数实现非交互式的批量设置或修改密码

[root@chensiqi1 ~]# useradd chensiqi2   #创建用户
Creating mailbox file: File exists
[root@chensiqi1 ~]# echo "123123" | passwd --stdin chensiqi2
Changing password for user chensiqi2. #免交互输出设置chensiqi2密码
passwd: all authentication tokens updated successfully.
[root@chensiqi1 ~]# history -c
#将上面历史命令清空,上面设置密码虽然不需要交互了,但是密码会以明文的方式保存在历史记录里,这点需要大家注意一下。一般批量设置密码分发给管理员后,有强制大家更改密码。

实现批量创建用户,且批量创建用户随机密码的例子。

亚洲城ca88手机版官网 8亚洲城ca88手机版官网 9

#!/bin/env bash
# -*- conding:utf-8 -*-
# author:chensiqi
# qq:215379068

Userchars="chensiqi"    #用户字符串,就是用户名的前面部分。
for num in `seq 3`      #seq 3 表示1-3即,用户名后缀为1,2,3来区分不同用户
do
    useradd $Userchars$num   #创建用户的命令
    passwd=`echo $RANDOM|md5sum|cut -c3-20`     #按照随机数(RANDOM)的md5加密取3-20之间的字符做为用户密码。此处要注意,密码部分应该事先定义好变量,否则取值变化,导致密码生成错误。
    echo "$passwd"|passwd --stdin $Userchars$num    #这行就是利用--stdin无交互设置密码的参数
    echo -e "user:$userchars$num\tpasswd:$passwd">>/tmp/user.log    #输出创建的用户和密码到user.log文件
done
---------------------------分界线
[root@chensiqi1 ~]# cat /tmp/user.log  #查看用户的账号和密码
user:chensiqi1  passwd:0e07e85b8ff84f04d9
user:chensiqi2  passwd:2362c5ade9629b2782
user:chensiqi3  passwd:7f17100a32ddf668f3

#提示:有关shell编程,后面的章节会详细讲解,这里不太理解也没关系

View Code

 

/etc/nologi
n文件给系统管理员提供了一种在Linux系统维护期间禁止用户登录的方法。这种机制也被应用到系统的关机、重启环节中。通常系统在关闭时将自动创建/etc/nologin文件,禁止所有用户登录,然后处理相关程序的退出停止工作,并在即将关闭系统前删除/etc/nologin文件。

/etc/login.defs配置文件

/etc/login.defs文件是用来定义创建用户时需要的一些用户的配置信息。如创建用户时,是否需要家目录,UID和GID的范围,用户及密码的有效期限等。

passwd特殊权限说明

[root@chensiqi1 ~]# which passwd #查看passwd完成路径
/usr/bin/passwd
[root@chensiqi1 ~]ls -l /usr/bin/passwd 
-rwsr-xr-x. 1 root root 30768 Nov 23  2015 /usr/bin/passwd #发现属主权限位带了个s(setuid位)
[root@chensiqi1 ~]# ls -l /etc/passwd
-rw-r--r--. 1 root root 1301 Feb 17 21:41 /etc/passwd #/etc/passwd从权限上看仅允许root用户更改。
为什么其他用户可以更改/etc/passwd自己的密码呢?

我们看到/usr/bin/passwd文件的属主权限里呆了s权限,这是setuid权限位,这表示允许普通用户以/usr/bin/passwd属主root的权限来执行普通用户本来无法执行的功能。比如:普通用户是没有权限修改/etc/passwd的(从上文可以看到)。因为/usr/bin/passwd命令文件已经设置了setuid权限位(也就是-rwsr-xr-x中的s),所以普通用户在执行/usr/bin/passwd命令时能够使用root用户的权限,间接的修改/etc/passwd文件,以达到修改自己口令的目的。

总结:

  • 有关passwd命令的用法暂时就介绍这些,在实际工作中,最常用的用法就是直接使用passwd加用户名设置和修改密码,其次是加–stdin参数批量无交互设置密码,其他的参数用的很少(包括-l-u-S等),大家如果想了解更多参数,可参考man
    passwd或passwd –help
  • 最后提醒下同学们,在生产环境中,我们设置密码时应尽可能的复杂且无规律,但又利用用户自己记忆。比较好的密码是数字字母(包括大小写)及特殊符号的组合,并且8位以上。

 

如果系统在还未正常删除/etc/nologin文件前出现突然断电停机等情况,就会出现因nologin文件未删除而引起的普通用户无法登录的现象。

/etc/default/useradd文件

/etc/default/useradd文件是在使用useradd添加用户时的一个需要调用的一个默认文件,可以使用”useradd
-D 参数”,这样的命令格式来修改文件里面的内容。

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

chage命令是用来修改用户密码有效期限的。(chage – change user password
expiry information)

chage命令的用法很多,和passwd等命令功能也有不少是重复的,这里我们还是挑选一些工作中常用的用法加以说明;

chage语法

[root@chensiqi ~]# chage --help
用法:chage [选项] 用户名

为了方便同学们查看,我们用表格的方式把chage命令的常用参数列表显示,如下表所示:
|chage 参数选项|注释说明(带特殊颜色的表示重要,需要掌握)|
|–|–|
|-d,–lastday 最近日期|将最近一次密码设置时间设为“最近日期”|
|-E,–expiredate过期日期|将账户过期时间设为“过期日期”|
|-h,–help|显示此帮助信息并退出|
|-l,–inactive失效密码|在密码过期后多少天,用户被禁掉,仅能以root操作|
|-l,–list|显示账户年龄信息|
|-m,–mindays最小天数|将两次改变密码之间间距的最小天数设为“最小天数”|
|-M,–maxdays最大天数|将两次改变密码之间间距的最大天数设为“最大天数”|
|-W,-warndays警告天数|将过期警告天数设为“警告天数”|

亚洲城ca88手机版官网 10亚洲城ca88手机版官网 11

示例1:chage -l 查看账户信息

[root@chensiqi1 ~]# chage -l chensiqi
Last password change                : Feb 12, 2017 #对应参数-d
Password expires                    : Apr 13, 2017 
Password inactive                   : May 13, 2017 #对应参数-I
Account expires                     : never #对应-E参数
Minimum number of days between password change      : 7 #对应m参数
Maximum number of days between password change      : 60 #对应M参数
Number of days of warning before password expires   : 10 #对应W参数
示例2:举一个组合参数-m,-M,-W,-I控制密码时效的例子(同passwd命令示例)

[root@chensiqi1 ~]# chage -l chensiqi
Last password change                    : Feb 12, 2017
Password expires                    : never #从不
Password inactive                   : never #从不
Account expires                     : never #从不
Minimum number of days between password change      : 0 #随时可以改密码
Maximum number of days between password change      : 99999 #99999天后必须修改密码
Number of days of warning before password expires   : 7 #过期前提前7天提醒chensiqi用户
示例3:下面求chensiqi用户7天内不能更改密码,60天后必须修改密码,过期前提前10天通知chensiqi用户,过期后30天后禁止用户登录。

[root@chensiqi1 ~]# chage -m 7 -M 60 -W 10 -I 30 chensiqi
[root@chensiqi1 ~]# chage -l chensiqi #查看修改后的结果
Last password change                    : Feb 12, 2017
Password expires                    : Apr 13, 2017
Password inactive                   : May 13, 2017
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天开始提醒
提示:经过对比,我们发现修改后和前面讲解的passwd -n 7 -x 60 -W 10 -i 30 chensiqi命令修改结果一摸一样

View Code

总结:

在平时生产场景工作中,偶尔会用到chage的-l和-E参数,其他的参数,使用就很少了,这里不多介绍(知识是无限的,对于初学者,学会科学的取舍知识很重要)。当然,如果想了解更多,请参考man
chage和chage
–help。另外,有关账户实际过期的实际结论,在前文讲解useradd命令时就详细讲解过了,这里就不介绍了。

有关用户密码时效

  • 根据前文的讲解,我们知道passwd和chage等均可以设置或更改指定账户密码的安全信息(有效期等),我们也可以通过/etc/login.defs配置文件或/etc/default/useradd针对所有账户全局修改。
  • 设置用户密码的时效有利有弊:优点是可以防止运维人员离职一段时间后发现用户还可以登录(也可能不是自己的用户),如果设置了账户有效期,即使用户未被清理,那么,一段时间内也会因为过期而无法登陆了,另外,在服务器数量很多的情况,更改密码是很大的工作量。所以,对于用户密码的时效功能,我们根据实际的工作需求,综合运用。在大规模的运维环境中,使用LDAP服务(微软活动目录)对linux账户统一认证,批量管理,也是不错的方法。

 

解决:根用户登录系统并删除nologin文件,问题即可解决。

useradd命令

useradd参数选项

注释说明

-c comment

新账号passwd挡的说明栏

-d home_dir

新账号每次登入时所使用的home_dir。预设值为default_home内login名称,并当成登入时目录名称。

-e expire_date

账号终止日期。日期的指定格式为MM/DD/YY。

-f inactive_days

账号过期几日后永久停权。当值为0时账号则立刻被停权。而当值为-1时则关闭此功能,预设值为-1。

-g initial_group

group名称或以数字来做为用户登入起始用户组(group)。用户组名须为系统现有存在的名称。用户组数字也须为现有存在的用户组。预设的用户组数字为1。

-G group,[…]

定义此用户为多个不同groups的成员。每个用户组使用","逗号分隔。用户组名同-g选项的限制。默认值为用户的起始用户组。

-m

用户目录如不存在则自动建立。如使用-k选项,skeleton dir内的档案将复制至用户目录下。然而在/etc/skel目录下的档案也会复制过去。任何在skeleton_diror /etc/skel的目录也相同会在用户目录下一一建立。The-k同-m不建立目录以及不复制任何档案为预设值。

-M

不建立用户家目录,优先于/etc/login.defs文件的设定。一般创建虚拟用户时不建立家目录,部署服务时需要创建虚拟用户。

-n

默认情况下用户的用户组与用户的名称会相同。如果命令加了-n参数就不会生成和用户名的用户组了。

-s shell

用户登入后使用的shell名称。默认值为不填写,这样系统会指定预设的登入shell(根据/etc/default/useradd预设的值)。

-u uid

用户的ID值。这个值必须是唯一的,除非用-o选项。数字不可为负值。

亚洲城ca88手机版官网,useradd -e、-u、-G、-s、-d多参数组合的例子:

添加用户oldboy,并设置用户注释信息为HandsomeBoy,UID指定为806,归属为用户组root、oldboy、sa成员,其shell类型为/bin/sh,设置家目录为/oldboy。

删除用户相关命令userdel

从userdel命令名称就可以知道,它的功能就是删除用户及用户相关的信息,与这个命令有关的文件有:

  • /etc/passwd :用户账号资料文件
  • /etc/shadow
    :用户账号资讯加密文件
  • /etc/group : 用户组资讯文件
  • /etc/gshadow :用户组密码资讯文件

1)userdel 语法

[root@chensiqi ~]# man userdel
名称:
    userdel -删除系统用户账号及相关目录及文件
语法:
    userdel [-r] 用户名
    userdel 用户名,用户名必须是系统已存在的
    -r 用户目录下的档案一并移除。在其他位置上的相关文件也将一一找出并删除。
相关文件
    /etc/passwd : 用户账号资料文件
    /etc/shadow : 用户账号咨询加密文件
    /etc/group : 用户组资讯文件
提示:使用userdel命令的结果实际上就是在更改维护以上的文件。

【注意:不要采用直接关闭电源等不正常手段关闭系统】

groupadd命令

groupadd参数选项

注释说明

-g gid

指定用户组GID值。除非接-o参数(如:groupadd -g gid)否则ID值必须是唯一的数字(不能为负数)。如果不指定会从500开始。

   

 企业场景删除用户处理方法:

一般不能确认用户相关目录有没有重要数据就不能用-r
删除经验:

  1. vi
    /etc/passwd,然后注释掉用户,观察1个月,这样出问题可以还原。相当于操作前备份。
  2. 把登录shell /bin/bash 改成 /sbin/nologin.
  3. openldap(类似活动目录)账号统一管理的,ldap库里干掉用户。所有服务器全部都没了。
    提示:只要修改和删除都要小心谨慎!

userdel实例

示例1:删除指定账户hah

[root@chensiqi1 ~]# grep chensiqi2 /etc/passwd 
chensiqi:x:808:808:num3 chensiqi:/chensiqi2017-02-11:/bin/bash
chensiqi2:x:810:810::/home/chensiqi2:/bin/bash
[root@chensiqi1 ~]# userdel chensiqi2 #删除账户,但不删除家目录
[root@chensiqi1 ~]# ls /home  #家目录仍旧存在
chensiqi  chensiqi1  chensiqi2  chensiqi3  mysql
[root@chensiqi1 ~]# grep chensiqi2 /etc/passwd  #账户已经没了
chensiqi:x:808:808:num3 chensiqi:/chensiqi2017-02-11:/bin/bash

总结:

  • 使用“userdel 用户名”,这样的方法删除用户时,仅会删除用户本身,其家目录及相关文件并不会被删除。一般生产场景种,当无法确定被删除用户家目录是否有用或者有不规范用户已在家目录下跑了脚本或程序的时候,就不要使用“userdel
    -r 用户名”这样的危险命令,而直接使用”userdel 用户名“命令删除即可。
  • 当然,我们还可以直接使用vi编辑/etc/passwd,找到要处理的用户,先注释一段时间,确认真的没问题了,然后在清理其家目录,注释的作用和userdel命令删除的效果一样,就是实现了被注释的用户无法登录了(注释掉用户当前行即可),注释有类似回收站的作用,一旦发现问题,我们可以进行恢复工作。当然对于对门户上千台服务器大规模运维的情况,我们可以使用ldap等服务实现账户统一认证,批量的添加删除管理。

示例2:userdel -r 用户名 方式删除
如果在userdel命令后加参数-r,表示在删除该用户的同时,一并把用户的家目录及本地邮件存储的目录和文件也一同删除。因此,要谨慎使用。

[root@chengliang ~]# ls /home/
cheng  chengliang  hah  student  teacher  test  test2  zcl
[root@chengliang ~]# userdel -r test  # 删除用户包含它的家目录
[root@chengliang ~]# ls /home  #用户家目录已经被删除
cheng  chengliang  hah  student  teacher  test2  zcl
[root@chengliang ~]# grep "test" /etc/passwd
test2:x:812:812::/home/test2:/bin/bash
[root@chengliang ~]# 

 

(3)账户到期或密码失效导致用户无法登录

passwd命令

passwd参数选项

注释说明

–stdin

从stdin读入密码

-k –keep-tokens

保留即将过期的用户在期满后仍能使用

-d –delete

删除用户密码,仅能以root权限操作

-l –lock

锁住用户无权更改其密码,仅能通过root权限操作

-u –unlock

解除锁定

-f –force

强制操作,仅root权限才能操作

-x –maximum=DAYS

两次密码修改的最大天数,后面接数字,仅能root权限操作

-n –mininum=DAYS

两次密码修改的最小天数,后面接数字,仅能root权限操作

-w –warning=DAYS

在距多少天提醒用户修改密码,仅能root权限操作

-i –inactive=DAYS

在密码过期后多少天,用户被禁掉,仅能root权限操作

-S –status

查询用户的密码状态,仅能root权限操作

   

oldboy用户7天内不能更改密码,60天以后必须修改密码,过期前10天提示,过期后30天后禁止用户登录。

/etc/shadow中查看

批量创建10个用户stu01-stu10,并且设置随机8位密码,要求不能用shell循环(for、while等),只能用命令及管道实现。

useradd stu{1..10};

使用SHA算法来加密日期,并输出结果的前8个字符:

date +%s | sha256sum | base64 | head -c 8 ; echo

echo “123456”|passwd test –stdin

删除用户组相关命令groupdel

groupdel是用来删除用户组的,要求用户组必须是已存在的。用groupdel删除用户组实际就是修改/etc/group(用户组文件)和/etc/gshadow(用户组加密文件)文件。

语法格式:groupdel 用户组

[root@chensiqi1 ~]# groupadd zhangsan #创建用户组
[root@chensiqi1 ~]# grep zhangsan /etc/group  #查看文件有记录
zhangsan:x:810:
[root@chensiqi1 ~]# grep zhangsan /etc/gshadow #查看文件有记录
zhangsan:!::
[root@chensiqi1 ~]# groupdel zhangsan #删除用户组
[root@chensiqi1 ~]# grep zhangsan /etc/group #无记录
[root@chensiqi1 ~]# grep zhangsan /etc/gshadow #无记录

groupdel 比较简单,工作中使用的频率非常少,大家会以上简单应用就可以了。

 

我们可以通过chage命令查看账户密码的有效期

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

用法:chage [选项] 用户名

chage参数选项

注释说明

-d –lastday

最近日期,将最近一次密码设置时间设为"最近日期"

-E –expiredate

将账户过期时间设为"过期日期",日期写法:MM/DD/YY

-h –help

显示此帮助信息并退出

-l –list

显示账户年龄信息

-m –mindays

最小天数,将两次改变密码之间相距的最小天数设为"最小天数"

-M –maxdays

最大天数,将两次改变密码之间相距的最大天数设为"最大天数"

-W –warndays

警告天数,将过期警告天数设为"警告天数"

-I –inactive

失效天数,在密码过期后多少天,用户被禁掉

修改账户过期时间:

查看账户的状态:

oldboy用户8天内不能更改密码,61天以后必须修改密码,过期前11通知用户,过期后31天后禁止用户登录。

与passwd -n 8 -x 61 -w 11 -i 31 oldboy、chage -m8 -M61 -W10 -I30
oldboy功能相同只是参数不一样。

用户信息修改相关命令usermod

usermod命令功能十分强大,在生产场景中使用频率虽然不是很多,但还是比较重要的。它不仅能更改用户的shell类型,所归属用户组,还能改用户密码的有效期,登录名等很多用户的信息。
与usermod命令有关的文件有:

/etc/passwd :用户账号资料文件
/etc/shadow :用户账号资讯加密文件
/etc/group :用户组资讯文件
/etc/gshadow :组密码文件

亚洲城ca88手机版官网 12亚洲城ca88手机版官网 13

1)usermod语法
|usermod参数选项|注释说明(带特殊颜色的表示重要,需要掌握)|
|--|--|
|-c comment|增加用户账号/etc/passwd中的注解说明栏(第5栏)。这个-c参数功能也可以使用chfn命令来修改,当然也可以手工修改/etc/passwd文件来实现|
|-d home_dir|更新用户新的家目录。如果给定-m选项,用户旧的家目录会搬到新的家目录去,如旧的家目录不存在则建个新的。|
|-e expire_date|加上用户账号停止日期。日期格式为:MM/DD/YY|
|-f inactive_days|账号过期几日后永久停权。当值为0时账号则立刻被停权。而当值为-1时则关闭此功能。预设值-1|
|-g initial_group|更新用户新的起始登入用户组。用户组名需已存在。用户组ID必须参照既有的用户组。用户组ID预设值为1|
|-G group【...】|定义用户为一堆groups的成员。每个用户组使用“,”逗号隔开。用户组名同-g选项的限制|
|-l login_name|变更用户login时的名称为login_name.其余信息不变|
|-s shell|指定新登入shell。如此栏留白,系统将选用系统预设shell。这个-s参数功能也可以使用chsh命令来修改。当然也可以手工修改/etc/passwd文件来实现|
|-u uid|指定用户UID值。除非接-o参数,否则ID值必须是唯一的数字(不能是负数)|
|-L|冻结用户的密码,使之无法登录,实际就是间接修改/etc/shadow的密码栏。在密码栏的开头加上“!”号,即表示冻结。这个冻结密码的功能和usermod -e,useradd -e,chage -E或passwd -l等命令参数都有类似的功效,那就是让用户无法正常登陆。|
|-U|取消冻结用户的密码,使之恢复登录,实际同样是修改/etc/shadow的密码栏。在密码栏的开头取消“!”号,即表示恢复。|

2)usermod实例

实例1:使用不同的方法修改/etc/passwd中用户的说明栏

[root@chensiqi1 ~]# tail -1 /etc/passwd #修改前查看一下
chensiqi1:x:809:809::/home/chensiqi1:/bin/bash
[root@chensiqi1 ~]# usermod -c 00chensiqi1 chensiqi1 #修改账户的注释说明信息
[root@chensiqi1 ~]# tail -1 /etc/passwd #查看修改结果
chensiqi1:x:809:809:00chensiqi1:/home/chensiqi1:/bin/bash
[root@chensiqi1 ~]# chfn -f information chensiqi1  #chfn也可以修改
Changing finger information for chensiqi1.
Finger information changed.
[root@chensiqi1 ~]# tail -1 /etc/passwd 
chensiqi1:x:809:809:information:/home/chensiqi1:/bin/bash
提示:实例1的用法,仅在这里说明用,真正工作中使用的不多,属于了解内容。

由于有前面useradd命令的讲解基础了,这里就不过多演示了。

View Code

 

chage [选项]  用户名

删除用户相关命令userdel

语法格式:userdel 用户名 或语法格式:userdel 用户名 -r

在生产场景中,不要轻易使用-r参数,这会在删除用户的同时删除用户家目录下的所有的文件和目录。如果一定要删除家目录,那么在删除前先备份。直接在/etc/passwd中注释要删除的用户记录是生产场景中常用的方法。

2.3 用户管理命令小结

1,和用户相关的配置文件知识点:
/etc/passwd 账号文件及不同列内容
/etc/shadow 账号密码文件及不同列内容
/etc/group 组的文件及不同列内容
/etc/gshadow 组密码文件及不同列内容
2,用户管理命令
useradd -u -g -G -s -M -e -c -d
初始化用户对应的几个文件/etc/skel,/etc/default/useradd,/etc/login.defs
userdel -r
usermod -L -U
chage -l(小写) -E
passwd –stdin
3,组管理命令
groupadd -g

 

亚洲城ca88手机版官网 14

删除用户组相关命令groupdel

groupdel是用来删除用户组的,要求用户组名必须是已存在的。用groupdel删除用户组实际修改/etc/group(用户组文件)和/etc/gshadow(用户组加密文件)。

语法格式:groupdel 用户组

查看用户组:

grep 用户组 /etc/group

grep 用户组 /etc/gshadow

用户信息修改相关命令usermod

usermod参数选项

注释说明

-e expire_date

加上用户账号停止日期。日期格式为MM/DD/YY。

-g initial_group

更新用户新的起始登入用户组。用户组名必须已存在。

-U

取消冻结用户的密码,使恢复登录,实际同样是修改/etc/shadow的

-G group,[…]

定义用户为一堆groups的成员。每个用户组只用","逗号隔开。

-l login_name

变更用户login时的名称为login_name。其余信息不变。usermod -l newname oldname

-s shell

指定新登入shell。

-u uid

指定用户UID只。这个值必须是唯一的,除非接-o参数,如usermod -u 505 -o oldboy(不能为负数)

-L

冻结用户的密码,使无法登陆。

-c

修改用户账号的备注信息

-d

修改用户家目录

-f

修改在密码过期后多少天关闭该账号

将oldboy用户的注释信息修改为OldBoy,UID修改为1806,归属修改为用户组root、sa成员,其shell类型修改为/bin/tcsh,设置家目录为/tmp/oldboy。

使用户在2012-01-22后过期

linux用户分类 超级用户:UID=0,root 普通用户:UID
500起,由超级用户或具有超级用户权限的用户创…

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图