Linux用户管理及用户信息查询
useradd
创建用户,更改用户信息
1.工作原理流程
使用此命令式,若不加任何参数选项,直接跟用户名,那么系统会首先读取/etc/login.defs(用户定义文件)和/etc/default/useradd(用户默认配置文件)文件中所定义的参数和规则,然后进行添加用户的操作,同时还会读取/etc/passwd(用户文件)和/etc/group(组文件),添加新用户和用户组信息,再向/etc/shadow(用户密码文件)和/etc/gshadow(组密码文件)添加对应的密码信息。同时根据/etc/default/useradd定义的信息简历家目录,并将/etc/skel中的所有文件复制到新用户的家目录中。
2.useradd加-d参数:改变/etc/default/useradd定义的信息,也可以手动修改
例如,用户账号的停止日期,过期日期,使用的shell名称等,具体可参考配置文件
3.useradd不加-d参数:
-c comment # 用户的说明栏
-d # 新用户家目录
-e # 用户终止日期
-f # 用户过期几日后永久停权,0时,用户立即被停权,-1时,关闭此功能
-g # 指定用户的用户组
-g # 定义用户多个不同组的成员
-m # 用户目录若是不存在,自动简历
-m # 布简历用户家目录,一般创建虚拟用户使用
-s # 指定用户的shell程序
-u # 用户的uid值设定
[root@centos7 ~]# useradd ett [root@centos7 ~]# ls -ld /home/ett/ drwx------ 2 ett ett 62 apr 18 15:52 /home/ett/ [root@centos7 ~]# grep -w ett /etc/passwd ett:x:1000:1000::/home/ett:/bin/bash [root@centos7 ~]# grep -w ett /etc/shadow ett:!!:18004:0:99999:7::: [root@centos7 ~]# grep -w ett /etc/group ett:x:1000: [root@centos7 ~]# grep -w ett /etc/gshadow ett:!:: [root@centos7 ~]# useradd -u 901 -g sa xiaolizi useradd: group 'sa' does not exist [root@centos7 ~]# groupadd sa [root@centos7 ~]# useradd -u 901 -g sa xiaolizi [root@centos7 ~]# id xiaolizi uid=901(xiaolizi) gid=1001(sa) groups=1001(sa) [root@centos7 ~]# useradd -m -s /sbin/nologin xiaolizi2 [root@centos7 ~]# grep -w xiaolizi2 /etc/passwd xiaolizi2:x:1001:1002::/home/xiaolizi2:/sbin/nologin
usermod
用于修改系统已经存在的用户的账号信息
用法参数与useradd类似
userdel
删除用户 # 工作中及你浪不要随意删除用户,请在/etc/passed里面采用注释的方式
-f # 强制删除用户,即使用户当前已登录
-r # 删除用户的同事,删除与用户相关的所有文件
[root@centos7 ~]# tail -3 /etc/passwd ett:x:1000:1000::/home/ett:/bin/bash xiaolizi:x:901:1001::/home/xiaolizi:/bin/bash xiaolizi2:x:1001:1002::/home/xiaolizi2:/sbin/nologin [root@centos7 ~]# userdel -r xiaolizi [root@centos7 ~]# userdel -r xiaolizi2 userdel: xiaolizi2 home directory (/home/xiaolizi2) not found [root@centos7 ~]# tail -3 /etc/passwd postfix:x:89:89::/var/spool/postfix:/sbin/nologin chrony:x:998:996::/var/lib/chrony:/sbin/nologin ett:x:1000:1000::/home/ett:/bin/bash [root@centos7 ~]# id ett uid=1000(ett) gid=1000(ett) groups=1000(ett) [root@centos7 ~]# vim /etc/passwd # 将用户注释掉 [root@centos7 ~]# tail -3 /etc/passwd postfix:x:89:89::/var/spool/postfix:/sbin/nologin chrony:x:998:996::/var/lib/chrony:/sbin/nologin #ett:x:1000:1000::/home/ett:/bin/bash [root@centos7 ~]# id ett id: ett: no such user
[root@centos7 tmp]# cat /tmp/xiaolizi.log |awk '{print $1}'|sed -r 's#(.*)#"userdel -r \1";echo -e "`userdel -r \1`">/tmp/userdel.log#g'|bash
groupadd
用于创建新的用户组,用途一般不多,主要是因为useradd创建用户时会默认创建用户组
-g gid # 指定用户组的gid,从500开始
-f # 新增一个账户,强制覆盖一个已经存在的组账号
groupdel
删除用户组
后面直接跟用户组的名称即可
passwd
修改用户密码及密码过期时间等内容
-k # 为密码已经过期的用户更新有效期
-l # 锁定用户,被多订的用户不能登录,,只有root权限才能设置
--stdin # 从标准输入读取密码字符串,免交互
-u # 解除对用户的锁定,只有root权限才能设置
-d # 删除用户密码,使密码为空,仅root用户有权使用该选项
-e # 使用户密码立即过期,在用户下次登录时强制要求用户修改密码
-n # 设置修改密码最短天数
-x # 设置修改密码最长天数
-w # 设置用户在密码过期前收到警告信息天数
-i # 设置密码过期后多少天后禁用账户
-s # 显示用户密码相关的简单描述
[root@centos7 ~]# passwd # 在当前用户下修改密码 changing password for user root. new password: bad password: the password is shorter than 8 characters # 设置密码过于简单会警告,不影响 retype new password: passwd: all authentication tokens updated successfully. # 成功设置密码 [root@centos7 ~]# useradd xiaolizi01 # 创建个新用户 [root@centos7 ~]# passwd xiaolizi01 changing password for user xiaolizi01. new password: bad password: the password is shorter than 8 characters retype new password: passwd: all authentication tokens updated successfully. [root@centos7 ~]# passwd -s xiaolizi01 # 显示账号密码信息 xiaolizi01 ps 2019-04-18 0 99999 7 -1 (password set, sha512 crypt.) [root@centos7 ~]# echo "123456"|passwd --stdin xiaolizi01 # 免交互式设置密码 changing password for user xiaolizi01. passwd: all authentication tokens updated successfully. [root@centos7 ~]# passwd -n 7 -x 60 -w 10 -i 30 xiaolizi01 # 设置用户7天内不能更改密码,60天以后必须修改密码,过期前10天通知用户,过期后30天禁止用户登录 adjusting aging data for user xiaolizi01. passwd: success [root@centos7 ~]# chage -l xiaolizi01 # 查看用户设置的列表 last password change : apr 18, 2019 password expires : jun 17, 2019 password inactive : jul 17, 2019 account expires : never minimum number of days between password change : 7 -n maximum number of days between password change : 60 -x number of days of warning before password expires : 10 -w
# 批量创建用户,随机设置8位密码--------,拼凑命令,交给bash执行 [root@centos7 tmp]# echo stu{01..10}|tr " " "\n"|sed -r 's#(.*)#useradd \1;pass=$((random+10000000));echo "$pass"|passwd --stdin \1;echo -e "\1 `echo "$pass"`">>/tmp/xiaolizi.log#g' |bash changing password for user stu01. passwd: all authentication tokens updated successfully. changing password for user stu02. passwd: all authentication tokens updated successfully. changing password for user stu03. passwd: all authentication tokens updated successfully. changing password for user stu04. passwd: all authentication tokens updated successfully. changing password for user stu05. passwd: all authentication tokens updated successfully. changing password for user stu06. passwd: all authentication tokens updated successfully. changing password for user stu07. passwd: all authentication tokens updated successfully. changing password for user stu08. passwd: all authentication tokens updated successfully. changing password for user stu09. passwd: all authentication tokens updated successfully. changing password for user stu10. passwd: all authentication tokens updated successfully. [root@centos7 tmp]# cat /tmp/xiaolizi.log stu01 10016083 stu02 10012250 stu03 10018657 stu04 10015755 stu05 10010848 stu06 10016321 stu07 10011326 stu08 10022713 stu09 10028841 stu10 10001627
chage
查看或修改用户密码有效期,有些参数用法与passwd相同
-l # 显示账号有效期的信息
-m -w -x相当于passwd里面对应的小写字母作用
chpasswd
用于从标准输入中读取一定格式的用户名,密码来批量更新用户密码,其格式为“用户名:密码”
[root@centos7 tmp]# echo stu{01..10}:$((random+10000000))|tr " " "\n" >/tmp/chpasswd.xt [root@centos7 tmp]# cat /tmp/chpasswd.xt stu01:10027593 stu02:10031643 stu03:10014680 stu04:10030420 stu05:10002831 stu06:10010814 stu07:10026730 stu08:10015381 stu09:10006139 stu10:10008308 [root@centos7 tmp]# chpasswd </tmp/chpasswd.xt [root@centos7 tmp]# su - stu01 [stu01@centos7 ~]$ su - stu02 password: [stu02@centos7 ~]$ whoami stu02
su
从当前用户切换到指定用户或者以指定用户的身份执行命令或程序
-c # 向shell传递单个命令
- # 切换用户是,将用户的家目录,系统环境等重新按切换后的用户初始化
[stu02@centos7 ~]$ whoami stu02 [stu02@centos7 ~]$ su - root password: last login: thu apr 18 16:40:08 cst 2019 from 10.0.0.1 on pts/2 [root@centos7 ~]# whoami root # 使系统在每一次开机时都能自动以普通用户启动指定的服务脚本 [root@centos7 ~]# echo "su - oldboy -c '/bin/sh /service/scripts/deploy.sh'">> /etc/rc.local
visudo
此命令专门用来编辑/etc/sudoers这个文件的,同时提供语法检查,是sudo命令的配置文件
-c # 手动执行语法检查
一般用于授权用户权限的
## allows people in group wheel to run all commands %wheel all=(all) all
sudo
可以让普通用户在执行指定的命令或层序上,拥有超级用户的权限,进行分类,并有针对性的命令授予指定的普通用户
-l # 列出当前用户可执行的命令
-u # 以指定用户的身份执行命令
id
显示指定用户真实有效的uid和gid等信息
[root@centos7 tmp]# id root uid=0(root) gid=0(root) groups=0(root) [root@centos7 tmp]# id xiaolizi01 uid=1001(xiaolizi01) gid=1002(xiaolizi01) groups=1002(xiaolizi01)
w
显示已经登录系统的用户,并显示用户正在执行命令
-h # 不显示前两行标题信息
-u # 忽略执行程序的名称,以及cpu时间的信息
-s # 使用短输出格式
[root@centos7 tmp]# w 18:03:13 up 4:02, 3 users, load average: 0.00, 0.01, 0.05 user tty from login@ idle jcpu pcpu what root tty1 13:45 4:17m 0.02s 0.02s -bash root pts/1 10.0.0.1 15:45 1:43m 0.29s 0.02s -bash root pts/2 10.0.0.1 16:40 1.00s 0.12s 0.00s w [root@centos7 tmp]# w -h root tty1 13:45 4:19m 0.02s 0.02s -bash root pts/1 10.0.0.1 15:45 1:44m 0.29s 0.02s -bash root pts/2 10.0.0.1 16:40 3.00s 0.12s 0.00s w -h [root@centos7 tmp]#
who
显示已登录用户的信息,w的精简版
-a # 显示所有信息
-b # 显示系统的启动时间
-d # 显示已死的进程
-h # 显示标题,默认不显示
-l # 显示登录进程
[root@centos7 tmp]# who root tty1 2019-04-18 13:45 root pts/1 2019-04-18 15:45 (10.0.0.1) root pts/2 2019-04-18 16:40 (10.0.0.1) [root@centos7 tmp]# who -b system boot 2019-04-18 13:44 [root@centos7 tmp]# who -d pts/0 2019-04-18 17:57 1679 id=ts/0 term= 0 exit=0 [root@centos7 tmp]# who -l [root@centos7 tmp]# who -h name line time comment root tty1 2019-04-18 13:45 root pts/1 2019-04-18 15:45 (10.0.0.1) root pts/2 2019-04-18 16:40 (10.0.0.1) [root@centos7 tmp]# who -h -a name line time idle pid comment exit system boot 2019-04-18 13:44 root + tty1 2019-04-18 13:45 04:22 911 run-level 3 2019-04-18 13:45 pts/0 2019-04-18 17:57 1679 id=ts/0 term=0 exit=0 root + pts/1 2019-04-18 15:45 01:47 16283 (10.0.0.1) root + pts/2 2019-04-18 16:40 . 16574 (10.0.0.1) [root@centos7 tmp]#
whoami
显示当前登录的用户名
last
从日志文件/var/log/wtmp读取信息并显示用户最近的登录列表
-n num # 指定显示结果的行数
[root@centos7 ~]# ll /var/log/wtmp -rw-rw-r--. 1 root utmp 29568 apr 18 17:57 /var/log/wtmp [root@centos7 ~]# less /var/log/wtmp "/var/log/wtmp" may be a binary file. see it anyway? [root@centos7 ~]# last root pts/2 10.0.0.1 thu apr 18 16:40 still logged in root pts/1 10.0.0.1 thu apr 18 15:45 still logged in
lastb
从/var/log/btmp中读取信息,并显示登录失败的记录,用于发现系统异常登录
[root@centos7 ~]# lastb root tty1 sat oct 27 00:26 - 00:26 (00:00) (unknown tty1 fri oct 26 23:35 - 23:35 (00:00) btmp begins fri oct 26 23:35:31 2018
lastlog
显示所有用户的最近登录记录,异常记录,从/var/log/lastlog中读取信息
[root@centos7 ~]# lastlog username port from latest root pts/2 thu apr 18 17:16:05 +0800 2019 bin **never logged in** daemon **never logged in** adm **never logged in** lp **never logged in** sync **never logged in** shutdown **never logged in** halt **never logged in** mail **never logged in** operator **never logged in** games **never logged in** ftp **never logged in** nobody **never logged in** systemd-network **never logged in** dbus **never logged in** polkitd **never logged in** tss **never logged in** abrt **never logged in** sshd **never logged in** postfix **never logged in** chrony **never logged in** xiaolizi01 pts/1 thu apr 18 16:17:20 +0800 2019
推荐阅读
-
Spring Boot中使用LDAP来统一管理用户信息的示例
-
恶意程序Korplug利用IE浏览器漏洞盗取有价值信息及用户隐私
-
PHP实现用户认证及管理完全源码
-
Linux下的用户管理总结(含禁止用户和IP登录的方法)
-
linux whois命令参数及用法详解(linux查询域名或IP注册信息)
-
linux w命令参数及用法详解(linux查看在线用户命令)
-
linux userdel命令参数及用法详解(linux删除系统用户命令)
-
linux下管理员强行踢出用户的命令使用方法
-
Linux系统用户管理之/etc/group组文件详解
-
linux useradd(adduser)命令参数及用法详解(linux创建新用户命令)