Linux学习笔记之常用用户管理类命令
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux学习笔记之常用用户管理类命令相关的知识,希望对你有一定的参考价值。
开始这个话题之前应该先了解下/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
本文出自 “积小流,成江海” 博客,谢绝转载!
以上是关于Linux学习笔记之常用用户管理类命令的主要内容,如果未能解决你的问题,请参考以下文章