开始这个话题之前应该先了解下 / etc/shadow 这个文件中的构造,对于列所代表的意思大体有个了解,先以 ftpuser 账户来介绍:后边会给出一些相应的例题来做使用说明补充(好吧我承认,这,又是一篇博客作业 ^_^ 万恶的标题党)。
- ftpuser:$6$T9WUEls/$AK4hTO1bZ7MXW7VoMej8e7tVG1qqxPy5axVJAAIz4m6uuzZmoYDcQjUG2XlXx7klx/i8yJ1luZDtoKYwJAMa4.:16929:0:99999:7:5::
总共有 9 个字段被 ":" 隔开,每个字段的意义如下:
1) ftpuser:第一个字段表示,账户名称。
2) 一大长串:第二个字段表示经过加密的密码,没有密码是显示为 "!!" 号,如果是!! 后跟一大长串则表示该账户已被锁定。
3) 16929:第三个字段表示最近一次修改密码的时间,此数字是自 1970 年 01 月 01 日起到修改密码日期的累计天数,设置为 0 时,表示需要立即修改密码。
4) 0:第四个字段是密码最短使用期限,这个是一个相对时长,从最近一次修改密码时间算起往后推多少天,如果为 0 时表示不设置最短使用期。
5) 99999:第五个字段表示密码最长使用期限,也是相对于最近一次修改密码日期的天数(第三字段),默认为可以用到死~~,设置为 - 1 时表示系统将不再检查此账户密码的有效性。
6) 7:第六个字段表示密码到达最长使用期限前的 7 天,开始向用户发送密码过期警告,提示用户需要修改密码。
7) 5:第七个字段表示密码过期后的宽限时间为 5 天,即为到达最长使用日期后的 5 天之内,每次登陆系统第一件事就是改密码,否则无法登录系统。
8) 第八个地段表示账户失效日期:当该账户到达设置的失效日期之后,如果说密码使用时间为无限期那么只要到了设定的失效日期,这个账号也是 game over 了(看来用到死也是分跟谁比呀,这个字段就是 "上帝",你敢比他活的久么 = ̄ω ̄=)
9) 第九字段为系统保留字段,以备以后添加其他新的功能使用(没准就是干掉 "上帝"(¬_¬) 赶紧跑)。
创建用户命令:useradd
useradd - create a new user or update default new user information
格式:
(1) useradd [options] LOGIN
(2) useradd -D
(3) useradd -D [options]
使用 useradd 不加任何选项来创建用户账号时,默认的一些创建参数是通过 / etc/login.defs 来定义的,比如普通用户的的 ID 范围是 1000~60000,系统账户的 ID 是 201~999 等等,具体可以通过查看 / etc/login.defs 文件来了解。
常用选项:
-d,--home-dir HOME_DIR:指定用户家目录的创建位置,创建的用户家目录不可以指定为已经存在的目录,否则将无法将 / etc/skel 模板复制到指定的用户家目录中。
-c,--comment COMMENT:创建用户是可以指定一些基本的描述信息。
-u,--uid UID:指定用户 ID。
-s,--shell SHELL:指定用户登录 shell,如果是创建一些守护进程类的用户,不允许其登录系统,则选择 / sbin/nologin。
-r,--system:加入此选项后将创建一个系统账户。
-D,--defaults:通过 useradd -D 可以查看默认的选项参数,也可以通过查看 / etc/default/useradd 文件达到相同的效果。如果需要修改相关默认参数,修改此文件中的内容即可。
-g,--gid GROUP:指定用户组 ID,指定的组 ID 必须是已经存在的,否则将指定失败。
-G,--groups GROUP[,GROUP2,...]:指定用户附加组可以指定多个,但指定的组 ID 必须是已经存在才可以。
-e,--expiredate EXPIRE_DATE:创建用户时指定其失效时间,指定日期格式为:"YYYY-MM-DD",默认为该新建账户可以使用到死~ 到死!
-f,--inactive INACTIVE:指定账户密码失效时间,设置为 - 1 时表示永远不失效,0 表示为立即失效。
该值的设定是相对于账户密码最长使用期限来说,例如 ftp 用户设置的最长使用期限为 2017 年 01 月 01 日,此时将失效时间设置为 5 即为,当系统时间到达 2017 年 01 月 02 日时,每次登陆即会告知用户需要更改密码,否则无法进行其他操作,当到达 1 月 7 日时账户将会被锁定而无法登录。
修改用户账户命令:usermod
usermod - modify a user account
格式:usermod [options] LOGIN
常用选项:
-c COMMENT:修改账户描述信息,如果描述信息中间有空格则需要使用双引号 "" 引起描述信息。
-d HOME_DIR:修改用户家目录,如果指定的位置目录不存在则家目录无法创建,若想目录不存在时创建则需要同时使用 - m 选项来创建家目录。
注意:如果指定的家目录是已经存在的目录,则原来用户家目录中的内容将不会被复制到指定目录中去,所以建议更改家目录时尽量选择 - md 来创建新的目录。
-g GROUP:修改用户的基本组,指定的组 ID 必须是已经存在的组 ID。
-l NEW_LOGIN:修改用户的用户名。
-s SHELL:修改用户登录 shell。
-u UID:修改用户 ID。
-L:锁定用户,此时用户将无法登录系统。
-U:将原先锁定的用户解锁。
修改用户密码命令:passwd
passwd - update user's authentication tokens
格式:passwd [-l] [-u] [-n mindays] [-x maxdays] [-w warndays] [-i inactivedays] [-S] [--stdin] [username]
passwd 单独使用时是修改当前用户的密码。
常用选项:
-l:锁定用户。
-u:解锁用户。
-f:让指定用户在下次登录时,强制修改密码。
-n DAYS:设置用户最短使用期限,即在指定的时间里无法修改密码。
-x DAYS:设置用户密码最长使用期限。
-w DAYS:设置用户密码过期警告期限,此天数是相对于最长使用期限来说,即如果设置警告期限为 7,则当距离密码最长使用期限的前 7 天,每天登陆时会提示用户密码即将过期。
-i DAYS:设置用户非活动期限,也是相对于最长使用期限来说,要叫宽限期,超过最长使用期限后的指定的时间里,还可以使用原来账户密码登陆,但登陆后只能先修改密码,而无法执行其他操作。
-S:可以查看指定用户的一些简单信息
修改用户使用期限命令:chage
鉴于此命令主要是针对密码时效性,所以以下所涉及到的日期,均按 / etc/shadow 中的字段号称呼。
chage - change user password expiry information
格式:chage [options] LOGIN
常用选项:
-l :查看指定账户详细信息。
-d LAST_DAY:指定账户最近修改密码日期,格式为 "YYYY-MM-DD",如果设置为 0 则该账户下次登录时立即修改密码。第 3 字段
-m MIN_DAYS:修改账户最短使用期限,即在此时间段之内无法修改账户密码,相对于第 3 字段的时长。
-M MAX_DAYS:修改账户最长使用期限,也是相对于第 3 字段时长。
-W WARN_DAYS:修改账户过期前的警告时间,相对于第 5 字段时长。
-I INACTIVE:修改账户非活动时间,相对于第 5 字段时长,即到达账户最长使用期限之后,还可以在设置的非活动时间之内登录系统,但是,登录系统的第一件事情就是改密码,因为你也干不了别的,不信你试试~~!
-E EXPIRE_DATE:这个就厉害了,决定指定账户的 "死亡" 日期,也就是算着时间 "过日子" 吧,到日子就 "死"╮(╯﹏╰)╭,指定格式为 "YYYY-MM-DD",设置为 - 1 时表示取消失效时间,呐~ 指定账户又 "复活" 了!
创建用户组命令:groupadd
格式:groupadd [options] group
常用选项:
-g:指定创建用户组的组 ID。
-r:使用此选项可以创建系统用户组。
删除用户组命令:groupdel
格式:groupdel [options] GROUP
删除命令比较简单直接使用 groupdel 后跟要删除的组名即可。
====**** 我是分割线 ****========**** 我是分割线 ****====
1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。
使用 who 命令即可查看当前所有登录系统的用户,过滤重复登录的用户则使用 cut 命令现将用户名取出,然后使用 sort 命令来将重复的过滤掉,如果想记录每个用户登录的次数则可使用,uniq 命令来实现。
- ~]# who |cut -d' ' -f1|sort -u
- ~]# who |cut -d' ' -f1|uniq -c #可以记录用户登录次数
2、取出当前系统上被用户当做其默认 shell 最多的那个 shell。
当前用户相关信息存储在 / etc/passwd 文件中,查看相关相关 shell 使用 cut 命令截取 passwd 中第七个字段,然后使用 sort 命令进行排序,使用 uniq 命令 "-c" 参数对其进行统计获取每个 shell 被使用的次数,最后再通过 sort 进行逆序排序后,通过 head 将默认 shell 最多的显示出来。
- ~]# cat / etc / passwd | cut - d: - f7 | sort | uniq - c | sort - n - r | awk 'NR == 1 {
- print $NF
- }'
3、将 / etc/passwd 中的第三个字段数值最大的后 10 个用户的信息全部改为大写后保存至 / tmp/maxuser.txt 中。
sort 命令可以按列来进行排序,排序完成之后使用 tail 命令取出数值最大的 10 个用户,最后使用 tr 命令将输出的信息转换为大写然后将转换后的内容使用重定向至 / tmp/maxuser.txt 文件中。
- ~]#cat /etc/passwd |sort -t: -k3 -n|tail -10|tee /tmp/maxuser.txt #使用tee命令是将内容重定向至文件中的同时再向屏幕输出一份,以便观察。
4、取出当前主机 IP 地址,提示:对 ifconfig 命令的结果进行切分。
ifconfig 命令是查看当前主机网络相关信息的命令,观察输出的内容不难发现 IP 地址在多个空格开头后跟 inet 的行中,中间包含了 IP 地址、子网掩码、广播地址。
其中获取到的 IP 地址还会包含了本地回环地址,可以将其使用 grep 过滤掉,最后 awk 命令取出本机 IP 地址。
- ~]# ifconfig | grep - o 'inet . * ' | tr - d "addr:" | awk ' {
- printf "IP: %s\n",
- $2
- }'grep - v "127" #本次测试是在centos 7系统下完成,其中tr - d 是为了兼容cenots6.7中获取到的数据会有"addr: ",所以要将其删除后显示。
方法二、目前 ifconfig 命令已逐渐退出历史舞台,在 centos7 中默认都不会安装此命令,现在推荐使用功能更强大的 IP 命令,在 Centos6 中也是支持此命令的,现在使用 IP 命令配合相关命令来获取本机 IP 地址来看看其区别。
- ~]# ip addr show | grep - o "inet .*" | grep - E - o "^[^/]+\>" | grep - v "127" | awk ' {
- printf "IP: %s\n",
- $2
- }' #相对来说更方便一点
5、显示 / var 目录下一级子目录或文件的总个数。
统计目录个数使用 wc 命令,wc 命令不止可以统计行数,还可以统计字符数以及文件大小,本题是通过管道将 ls 命令输出的内容传给 wc 命令来统计个数。
- ~]# ls /
- var | wc - l
6、取出 / etc/group 文件中第三个字段数值最小的 10 个组的名字。
本题的方法与题 3 类似,只是取完内容之后通过 cut 命令获得组名。
- ~]# cat /etc/group |sort -t: -k3 -n|head -10|cut -d: -f1
7、将 / etc/fstab 和 / etc/issue 文件的内容合并为同一个后保存至 / tmp/etc.test 文件中。
通过 cat 命令读入两个文件,然后通过输出重定向来将内容存储在 / tmp/etc.test 中。
- ~]# cat /etc/fstab /etc/issue >/tmp.etc.test
8、请总结描述用户和组管理类命令的使用方法并完成以下练习:
总结开篇已经给出,请参照开篇描述~~
(1) 创建组 distro,其 GID 为 2016;
- ~]# groupadd -g 2016 distro
(2) 创建用户 mandriva,其 ID 号为 10005;基本组为 distro;
- ~]# useradd -u 10005 -g 2016 mandriva
(3) 创建用户 megeia,其 ID 号为 1100,家目录为 / home/linux;
- ~]# useradd -u 1100 -d /home/linux megeia
(4) 给用户 mageia 添加密码,密码为 mageedu;
- ~]# echo "mageedu"|passwd --stdin mageia
(5) 删除 mandriva,但保留其家目录;
- ~]# userdel mandriva
(6) 创建用户 slackware,其 ID 号为 2002,基本组 distro,附加组 peguin;
- ~]# groupadd peguin
- ~]# useradd -u 2002 -g 2016 -aG peguin slackware
(7) 修改 slackware 的默认 shell 为 / bin/tcsh;
- ~]# usermod -s /bin/tcsh
(8) 为用户 slackware 新增附加组 admins;
- ~]# groupadd -r admins
- ~]# usermod -aG admins slackware
(9) 为用户 slackware 添加密码,且要求密码最短使用期限为 3 天,最长为 180 天,警告为 3 天;
- ~]# echo "slackpwd" |passwd --stdin slackware -n 3 -x 180 -w 3
方法二修改完密码后使用 chage 命令进行使用日期修改
- ~]# chage -m 3 -M 180 -W 3 slackware
(10) 添加用户 openstack,其 ID 号为 3003,基本组为 clouds,附加组为 peguin 和 nova;
- ~]# groupadd clouds
- ~]# groupadd nova
- ~]# useradd -u 3003 -g clouds -G peguin,nova
(11) 添加系统用户 mysql,要求其 shell 为 / sbin/nologin;
- ~]# useradd -r -s /sbin/nologin mysql
(12) 使用 echo 用命令,非交互式为 openstack 添加密码;
- ~]# echo "openstackpwd" |passwd --stdin openstack
9、复制 / etc/skel 目录为 / home/tuser1,要求 / home/tuser1 及其内部文件的属组和其他用户均没有任何访问权限。
- ~]# cp -r /etc/skel /home/tuser1
- ~]# chmod -R go=--- /home/tuser1
10、显示 / proc/meminfo 文件中以大写或小写 S 开头的行,用两种方式;
- ~]# grep -i "s" /proc/meminfo
- ~]# grep "^[sS]" /proc/meminfo
11、显示 / etc/passwd 文件中其默认 shell 为非 / sbin/nologin 的用户;
- ~]# grep -v "/sbin/nologin" /etc/passwd
12、显示 / etc/passwd 文件中其默认 shell 为 bin/bash 的用户;
- ~]# grep "bin/bash" /etc/passwd
13、找出 / etc/passwd 文件中的一位数或两位数;
- ~]# grep -E "[0-9]{1,2}" /etc/passwd
14、显示 / etc/rc.d/rc.sysinit 文件中以 #开头,后面跟至少一个空白字符,而后又有至少一个非空白字符的行;
- ~]# grep -E "^#[[:space:]]+[^[:space:]].*" /etc/rc.d/rc.sysinit
15、打出 netstat -tan 命令执行结果以'LISTEN',后跟空白字符结尾的行;
- ~]# netstat -tan |grep -E "LISTEN[[:space:]]{0,}$"
16、添加用户 bash,testbash,basher,nologin(此一个用户的 shell 为 / sbin/nologin),而后找出当前系统上其用户名和默认 shell 相同的用户的信息;
- ~]# useradd bash
- ~]# useradd testbash
- ~]# useradd basher
- ~]# useradd -s /sbin/nologin nologin
- ~]# grep -E "^\<(bash|testbash|basher|nologin)\>.*\1$" /etc/passwd
来源: http://www.bubuko.com/infodetail-1869618.html