第十四节 用户管理初级(上)
标签(空格分隔): Linux实战教学笔记-陈思齐css
---更多资料点我查看mysql
1,帐号管理
1.1 管理用户命令汇总
命令 | 注释说明(特殊颜色的必须掌握) |
---|---|
useradd增 | 同adduser命令,执行此命令可在系统中添加用户。(更改4个用户文件) |
userdel删 | 执行此命令可删除用户及相关用户的配置或文件(更改4个用户文件) |
passwd | 执行此命令可为用户设置或修改密码。更改/etc/shadow文件 |
chage | 修改用户密码属性。管理/etc/shadow文件 |
usermod改 | 修改用户信息的命令,能够经过usermod来修改登陆名,用户的家目录等等 |
id查 | 查看用户的UID,GID及所归属的用户组 |
su | 用户角色切换工具。su - |
sudo | sudo是经过另外一个用户来执行命令,su 是用来切换用户,而后经过切换到的用户来完成相应的任务,但sudo能在命令后面直接接命令执行,好比sudo ls /root,不须要root密码就能够执行只有root才能执行的相应命令或具有的目录权限;这个权限须要经过visudo命令或者直接编辑/etc/sudoers来实现 |
visudo | visudo配置sudo权限的编辑命令;也能够不用这个命令,直接用vi来编辑/etc/sudoers实现。但推荐用visudo来操做(会自动检查语法) |
pwcov | 同步用户从/etc/passwd到/etc/shadow |
pwck | pwck是校验用户配置文件/etc/passwd和/etc/shadow文件内容是否合法或完整 |
pwunconv | 是pwcov的立逆向操做,是从/etc/shadow和/etc/passwd建立/etc/passwd,而后会删除/etc/shadow文件 |
finger | 查看用户信息工具 |
1.2 管理用户组命令汇总
命令 | 注释说明(特殊颜色标记须要掌握) |
---|---|
groupadd | 添加用户组 |
groupdel | 删除用户组 |
groupmod | 修改用户组信息 |
gpasswd | 为用户组设置密码 |
groups | 显示用户所属的用户组 |
newgrp | 更改用户所属的有效用户组 |
1.3 /etc/skel目录
/etc/skel目录是用来存放新用户环境变量文件的目录,当咱们添加新用户时,这个目录下的全部文件会自动被复制到新添加的用户的家目录下:默认状况下,/etc/skel目录下的全部文件都是隐藏文件(以.点开头的文件);经过修改,添加,删除/etc/skel目录下的文件,咱们可为新建立的用户提供统一的,标准的,初始化用户环境。linux
下面咱们就看下/etc/skel目录的内容:面试
[root@chensiqi1 ~]# ls -al /etc/skel/
total 20 drwxr-xr-x. 2 root root 4096 Dec 23 20:25 . drwxr-xr-x. 78 root root 4096 Feb 4 09:13 .. -rw-r--r--. 1 root root 18 May 10 2016 .bash_logout -rw-r--r--. 1 root root 176 May 10 2016 .bash_profile -rw-r--r--. 1 root root 124 May 10 2016 .bashrc
[root@chensiqi1 ~]# cd /etc/skel/ [root@chensiqi1 skel]# touch readme [root@chensiqi1 skel]# ls -la total 20 drwxr-xr-x. 2 root root 4096 Feb 11 02:21 . drwxr-xr-x. 78 root root 4096 Feb 4 09:13 .. -rw-r--r--. 1 root root 18 May 10 2016 .bash_logout -rw-r--r--. 1 root root 176 May 10 2016 .bash_profile -rw-r--r--. 1 root root 124 May 10 2016 .bashrc -rw-r--r--. 1 root root 0 Feb 11 02:21 readme [root@chensiqi1 skel]# useradd chensiqi2 [root@chensiqi1 skel]# su - chensiqi2 [chensiqi2@chensiqi1 ~]$ ls -la total 20 drwx------. 2 chensiqi2 chensiqi2 4096 Feb 11 02:22 . drwxr-xr-x. 5 root root 4096 Feb 11 02:22 .. -rw-r--r--. 1 chensiqi2 chensiqi2 18 May 10 2016 .bash_logout -rw-r--r--. 1 chensiqi2 chensiqi2 176 May 10 2016 .bash_profile -rw-r--r--. 1 chensiqi2 chensiqi2 124 May 10 2016 .bashrc -rw-r--r--. 1 chensiqi2 chensiqi2 0 Feb 11 02:21 readme 命令说明: 在/etc/skel/目录下建立一个文件readme,而后咱们建立一个新用户,发如今用户的家目录里也默认有一个readme。所以,得出结论,/etc/skel/目录下的全部文件都会默认出如今新建用户的家目录里。
1.4 企业面试题:请问以下登陆故障的原理及解决办法?
-bash-4.1$ -bash-4.1$
解答:sql
[root@chensiqi1 ~]$su - chensiqi2
[chensiqi2@chensiqi1 ~]$ rm -rf /*
[chensiqi2@chensiqi1 ~]$ exit
logout
[root@chensiqi1 ~]# su - chensiqi2 -bash-4.1$ 命令说明:普通用户强制删除了家目录里的变量文件就会出现这种问题。
恢复:shell
[chensiqi2@chensiqi1 ~]$ exit
logout
[root@chensiqi1 ~]# su - chensiqi2 -bash-4.1$ cp /etc/skel/.bash* ~ -bash-4.1$ exit logout [root@chensiqi1 ~]# su -chensiqi2 bash: hensiqi2: command not found [root@chensiqi1 ~]# su - chensiqi2 [chensiqi2@chensiqi1 ~]$ 命令说明: 咱们去把/etc/skel/目录下的变量文件复制回来就行了
知识扩展*和.*的问题编程
[root@chensiqi1 ~]# cp /etc/skel/* /tmp/ [root@chensiqi1 ~]# ls /tmp/ readme [root@chensiqi1 ~]# ls -la /tmp/ total 12 drwxrwxrwt. 3 root root 4096 Feb 11 02:39 . dr-xr-xr-x. 27 root root 4096 Feb 10 02:32 .. drwxrwxrwt. 2 root root 4096 Jan 11 22:07 .ICE-unix -rw-r--r--. 1 root root 0 Feb 11 02:39 readme [root@chensiqi1 ~]# ls -la /etc/skel/ total 20 drwxr-xr-x. 2 root root 4096 Feb 11 02:21 . drwxr-xr-x. 78 root root 4096 Feb 11 02:22 .. -rw-r--r--. 1 root root 18 May 10 2016 .bash_logout -rw-r--r--. 1 root root 176 May 10 2016 .bash_profile -rw-r--r--. 1 root root 124 May 10 2016 .bashrc -rw-r--r--. 1 root root 0 Feb 11 02:21 readme [root@chensiqi1 ~]# #cp /etc/skel/.* 命令说明: *不复制隐藏文件,那么在运行cp /etc/skel/.*以前,咱们先看看.*里都有什么东西? [root@chensiqi1 ~]# ls /etc/skel/.* /etc/skel/.bash_logout /etc/skel/.bash_profile /etc/skel/.bashrc /etc/skel/.: readme /etc/skel/..: ConsoleKit inputrc quotatab DIR_COLORS iproute2 rc DIR_COLORS.256color issue rc.d DIR_COLORS.lightbgcolor issue.bak rc.local NetworkManager issue.net rc.sysinit X11 issue.net.bak rc0.d abrt kdump-adv-conf rc1.d acpi kdump.conf rc2.d adjtime krb5.conf rc3.d aliases latrace.conf rc4.d aliases.db latrace.d rc5.d alsa ld.so.cache rc6.d 东西太多如下省略.... 命令说明: 咱们能够发现,.*连etc下的东西都复制出来了,这是为何呢?别忘了,目录下都还有些什么东西,还有.和.. [root@chensiqi1 ~]# ls -la /etc/skel total 20 drwxr-xr-x. 2 root root 4096 Feb 11 02:21 . drwxr-xr-x. 78 root root 4096 Feb 11 02:22 .. -rw-r--r--. 1 root root 18 May 10 2016 .bash_logout -rw-r--r--. 1 root root 176 May 10 2016 .bash_profile -rw-r--r--. 1 root root 124 May 10 2016 .bashrc -rw-r--r--. 1 root root 0 Feb 11 02:21 readme 命令说明: .表明当前目录,..表明上级目录。所以.*就把上级目录的全部文件也复制了。因此咱们在复制隐藏文件的时候不能用.*来表明全部。
2,用户管理命令详解
2.1 添加用户命令useradd
- 添加用户的命令有useradd和adduser,这两个命令所能达到的效果是同样的。固然除了useradd和adduser命令之外,咱们还能经过修改用户配置文件/etc/passwd和/etc/group及手动建立文件的办法来直接添加用户,不过这里并不推荐,这里建议你们统一使用useradd命令,本文也仅会针对useradd命令进行举例讲解。
- 当使用useradd命令不加参数选项,后面直接跟所添加用户名时,系统首先会读取配置文件/etc/login.defs和/etc/default/useradd中所定义的参数或规则,根据设置的规则添加用户,同时会向/etc/passwd和/etc/group文件内添加新建用户和用户组记录。
- 固然/etc/passwd和/etc/group的加密资讯文件/etc/shadows和/etc/gshadow也会同步生成记录,同时系统还会根据/etc/default/useradd文件中所配置的信息创建用户的家目录,并复制/etc/skel中的全部文件(包括隐藏的环境配置文件)到新用户的家目录中。
useradd语法:数组
[root@chensiqi ~]# man useradd #下面的内容源于此命令帮助的结果,对于部分地方作了修改 名称: useradd - 帐号创建或更新新用户资讯的工具 语法: useradd [-c comment] [-d home_dir] [-e expire_date] [-f inactive_time] [-g initial_group] [-G group[,....]] [-m [-k skeleton_dir] | -M] [-s shell] [-u uid[-o][-n][-r] login] useradd -D [-g default_group] [-b default_home] [-f default_inactive] [-e default_expire_date] [-s default_shell] 描述: 新帐号创建 当不加-D 参数时,useradd指令使用命令列来指定新帐号的设定值和使用系统上的预设值(指前文提到的/etc/login.defs和/etc/default/useradd等配置文件)。新用户帐号将产生一些系统档案,如用户目录的创建,拷贝起始档案等,这些都可以利用命令列选项指定。此版本为Red Hat Linux 提供,可帮每一个新加入的用户创建和用户同名的group,要达到这个目的,不能添加-n选项。
为了方便查看,咱们用表格的方式把useradd可以使用的参数选项展示给你们以下所示:
|useradd 参数选项|注释说明(特殊颜色的须要掌握)|
|--|--|
|-c comment|新帐号password档的说明栏|
|-d home_dir|新帐号每次登入时所使用的home_dir.预设值为default_home内login名称,并当成登入时目录名称|
|-e expire_date|帐号终止日期。日期的指定格式为MM/DD/YY或者YYYY-MM-DD
|
|-f inactive_day|帐号过时几往后永久停权。当值为0时帐号则马上被停权。而当值为-1时则关闭此功能,预设值-1|
|-g initial_group|group 名称以数字来做为用户登入起始用户组(group)。用户组名须为系统现有存在的名称。用户组数字也须为现有存在的用户组,预设的用户组数字为1.
|
|-G group,[...]|定义此用户为多个不一样groups的成员,每一个用户组使用“,”逗号分隔。用户组名同-g选项的限制。默认值为用户的起始用户组。|
|-m|用户目录如不存在则自动创建。|
|-M|不创建用户家目录,优先于/etc/login.defs文件的设定。通常创虚拟用户时不创建家目录,部署服务时须要建立虚拟用户。
|
|-n|默认状况用户的用户组与用户的名称会相同。若是命令加了-n参数,就不会生成和用户同名的用户组了。|
|-r| 此参数是用来创建系统帐号。|
|-s shell|用户登入后使用的shell名称。默认值不填写,这样系统会帮你指定预设的登入shell(根据/etc/default/useradd预设的值)。cat /etc/shells系统支持的shell
|
|-u uid|用户的ID值。这个值必须是惟一的,除非用-o选项。数字不可为负值
|安全
示例1:useradd -c,-u,-G,-s,-d,-m多个参数组合例子,自定义用户家目录。ruby
示例2:新建用户默认的帐号终止日期
示例3:添加用户时的默认shell类型/bin/bash改成/bin/sh
[root@chensiqi1 ~]# cat /etc/shells #查看当前系统支持的shell种类 /bin/sh /bin/bash /sbin/nologin /bin/dash /bin/tcsh /bin/csh [root@chensiqi1 ~]# grep SHELL /etc/default/useradd #查看当前默认的shell配置 SHELL=/bin/bash [root@chensiqi1 ~]# useradd -D -s /bin/sh #修改成/bin/sh [root@chensiqi1 ~]# grep SHELL /etc/default/useradd #查看修改结果 SHELL=/bin/sh #修改为功
特别提示,这里仅更改了配置文件的默认值,仅对以后创建的新用户生效,和老用户无关。
2.2 添加用户组命令groupadd
前问咱们讲解了添加用户的命令useradd的使用,本节咱们来熟悉下添加用户组的命令groupadd,groupadd后面可指定用户组名称来创建新的用户组。
提示:
groupadd命令的使用很是简单,但在生产环境中使用的很少,所以,会简单应用便可。
与groupadd命令有关的文件有:
/etc/group :用户组相关文件
/etc/gshadow :用户组加密相关文件
groupadd命令语法
[root@chensiqi ~]# man groupadd #查看groupadd命令的帮助信息 名称: groupadd -创建新的用户组 语法: groupadd 【-g gid [-o][-r][-f]】 groupname 描述: groupadd可指定用户组名称来创建新的用户组帐号。须要时可从系统种取得新用户组值。
为了方便阅读和查看相关参数,我依然用表格的方式把groupadd参数选项展示给你们以下所示:
|groupadd参数选项|注释说明(带特殊颜色的表示重要,须要掌握)|
|--|--|
|-g gid|指定用户组GID值。除非接-o参数(如:groupadd -g 1234 -o chensiqi),不然ID值必须是惟一的数字(不能负数)。若是不指定-g参数,则预设值会从500开始
|
|-r|创建系统用户组。GID值会比/etc/login.defs中定义的UID_MIN值小。|
|-f|新增一个帐户,强制覆盖一个已经存在的用户组帐号|
2.2.1 groupadd命令实例
在生产环境中,通常增长用户组的用法都是很是简单的,好比下面的例子,添加GID为802的用户组chensiqi
[root@chensiqi ~]# groupadd -g 802 chensiqi #未必必定要指定GID。通常需求不加也能够
若是不须要指定用户组ID值,能够直接执行
[root@chensiqi ~]# groupadd chensiqi
提示:未提到的groupadd的参数,你们能够暂时忽略掉,在实际工做中用的比较少。
2.2.2 用户密码相关命令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 命令参数选项
[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用户操做。
为了方便查看,咱们用表格方式把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读入密码 |
2.2.3 passwd命令实例
- 示例1:咱们用-l参数来锁定chensiqi用户,使之不能修改密码,而后再用-u参数来解除锁定。
[root@chensiqi1 ~]# passwd -S chensiqi #锁定前chensiqi用户的状态信息 chensiqi PS 2017-02-11 0 99999 7 -1 (Password set, SHA512 crypt.) [root@chensiqi1 ~]# grep chensiqi /etc/shadow #查看密码加密文件chensiqi用户信息的变化 chensiqi:$6$pvpd8XR8$20OnOjqQNLhQMEURXxCmF9VzGMv4tA8hXo5WTQzko7DiwFVrv8wNIXY3gId0b..OrbYf/lOgBCgkxtStY4b3M.:17209:0:99999:7::: [root@chensiqi1 ~]# passwd -l chensiqi #锁定用户chensiqi, 使之不能更改密码。 Locking password for user chensiqi. passwd: Success #锁定成功 [root@chensiqi1 ~]# grep chensiqi /etc/shadow chensiqi:!!$6$pvpd8XR8$20OnOjqQNLhQMEURXxCmF9VzGMv4tA8hXo5WTQzko7DiwFVrv8wNIXY3gId0b..OrbYf/lOgBCgkxtStY4b3M.:17209:0:99999:7::: #密码信息前边多了两个叹号! [root@chensiqi1 ~]# passwd -S chensiqi #查看用户状态 chensiqi LK 2017-02-11 0 99999 7 -1 (Password locked.) [root@chensiqi1 ~]# su - chensiqi #切到chensiqi下更改密码测试 [chensiqi@chensiqi1 ~]$ passwd Changing password for user chensiqi. Changing password for chensiqi. (current) UNIX password: #输入旧密码 passwd: Authentication token manipulation error #失败不让修改 [chensiqi@chensiqi1 ~]$ exit logout [root@chensiqi1 ~]# passwd -u chensiqi #经过-u参数,解除对用户chensiqi的锁定。 Unlocking password for user chensiqi. passwd: Success #接触成功 [root@chensiqi1 ~]# passwd -S chensiqi chensiqi PS 2017-02-11 0 99999 7 -1 (Password set, SHA512 crypt.) [root@chensiqi1 ~]# grep chensiqi /etc/shadow #查看密码文件chensiqi用户信息 chensiqi:$6$pvpd8XR8$20OnOjqQNLhQMEURXxCmF9VzGMv4tA8hXo5WTQzko7DiwFVrv8wNIXY3gId0b..OrbYf/lOgBCgkxtStY4b3M.:17209:0:99999:7::: #叹号消失
- 示例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 #将上面历史命令清空,上面设置密码虽然不须要交互了,可是密码会以明文的方式保存在历史记录里,这点须要你们注意一下。通常批量设置密码分发给管理员后,有强制你们更改密码。
实现批量建立用户,且批量建立用户随机密码的例子。
#!/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编程,后面的章节会详细讲解,这里不太理解也不要紧
2.2.4 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位以上。
2.2.5 修改用户密码有效期限相关命令chage
前文咱们在管理用户和用户组时,曾使用过chage命令,chage命令是用来修改用户密码有效期限的。(chage - change user password expiry information),本节咱们来学习这个命令。
1)chage说明
chage命令的用法不少,和passwd等命令功能也有很多是重复的,这里咱们仍是挑选一些工做中经常使用的用法加以说明;若是想了解更多,请执行man chage 或chage --help
2)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警告天数|将过时警告天数设为“警告天数”|
3)chage 实例
示例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命令修改结果一摸同样
总结:
在平时生产场景工做中,偶尔会用到chage的-l和-E参数,其余的参数,使用就不多了,这里很少介绍(知识是无限的,对于初学者,学会科学的取舍知识很重要)。固然,若是想了解更多,请参考man chage和chage --help。另外,有关帐户实际过时的实际结论,在前文讲解useradd命令时就详细讲解过了,这里就不介绍了。
4)有关用户密码时效
- 根据前文的讲解,咱们知道passwd和chage等都可以设置或更改指定帐户密码的安全信息(有效期等),咱们也能够经过/etc/login.defs配置文件或/etc/default/useradd针对全部帐户全局修改。
- 设置用户密码的时效有利有弊:优势是能够防止运维人员离职一段时间后发现用户还能够登陆(也可能不是本身的用户),若是设置了帐户有效期,即便用户未被清理,那么,一段时间内也会由于过时而没法登录了,另外,在服务器数量不少的状况,更改密码是很大的工做量。因此,对于用户密码的时效功能,咱们根据实际的工做需求,综合运用。在大规模的运维环境中,使用LDAP服务(微软活动目录)对linux帐户统一认证,批量管理,也是不错的方法。
2.2.6 删除用户相关命令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命令的结果实际上就是在更改维护以上的文件。
2.2.7 企业场景删除用户处理方法:
通常不能确认用户相关目录有没有重要数据就不能用-r
删除经验:
- vi /etc/passwd,而后注释掉用户,观察1个月,这样出问题能够还原。至关于操做前备份。
- 把登陆shell /bin/bash 改为 /sbin/nologin.
- openldap(相似活动目录)帐号统一管理的,ldap库里干掉用户。全部服务器所有都没了。
提示:只要修改和删除都要当心谨慎!
2)userdel实例
示例1:删除指定帐户ett
[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@chensiqi1 ~]# grep chensiqi3 /etc/passwd chensiqi3:x:811:811::/home/chensiqi3:/bin/bash [root@chensiqi1 ~]# ll /home/chensiqi3 total 0 -rw-r--r--. 1 chensiqi3 chensiqi3 0 Feb 11 02:21 readme [root@chensiqi1 ~]# userdel -r chensiqi3 #删除用户包含它的家目录 userdel: /var/spool/mail/chensiqi3 not owned by chensiqi3, not removing [root@chensiqi1 ~]# ll /home/chensiqi3 #用户家目录已经被删除 ls: cannot access /home/chensiqi3: No such file or directory
总结:
- 直接在/etc/passwd中注释或删除想要删除用户的记录的方法也是生产环境中经常使用的方法,可是在操做时必定要当心,/etc/passwd是很是重要的系统文件,若是不当心操做失误,就会引发不少麻烦,选择先注释而不删除用户记录在工做场景也是个明智选择,注释有相似回收站的做用,这样不但达到了目的,并且在出问题时能够进行恢复(这种操做方法并不规范,通常适合中小型公司使用)。固然,操做前备份也是必要的。操做前备份在任何场合都是一个运维人员优秀的习惯。
- 固然对于门户网上上千台服务器以上的大规模运维中,咱们可使用ldap等服务实现帐户统一认证,批量的添加删除管理用户。
- 以上3个实例的用法,在生产环境中都有使用,请你们在使用前,多思考,操做前备份文件及数据,毕竟有关帐户的操做都是很关键重要的。
2.2.8 删除用户组相关命令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 比较简单,工做中是啊用的频率1很是少,你们会以上简单应用就能够了。
2.2.9 用户信息修改相关命令usermod
usermod命令功能十分强大,在生产场景中使用频率虽然不是不少,但仍是比较重要的。它不只能更改用户的shell类型,所归属用户组,还能改用户密码的有效期,登陆名等不少用户的信息。
与usermod命令有关的文件有:
- /etc/passwd :用户帐号资料文件
- /etc/shadow :用户帐号资讯加密文件
- /etc/group :用户组资讯文件
- /etc/gshadow :组密码文件
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命令的讲解基础了,这里就不过多演示了。
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