Linux用户管理

创建用户的配置项

创建用户的配置项在 /etc/login.defs 中
如果想自定义创建用户,编辑/etc/login.defs文件.

配置/etc/login.defs https://blog.csdn.net/omaidb/article/details/122560846

配置文件信息文件名称
用户信息文件/etc/passwd
密码文件/etc/shadow
用户组文件/etc/group
用户组密码文件/etc/gshadow
用户配置文件/etc/login.defs , /etc/default/useradd
新用户信息文件/etc/skel
登录信息/etc/motd

创建用户是是否创建home文件

# RHEL系统默认是创建home目录的
[localhost root ~] #cat /etc/login.defs |grep -i home
#   home directory.  If you _do_ define both, MAIL_DIR takes precedence.
# If useradd should create home directories for users by default
CREATE_HOME     yes

用户管理(增删改查)


用户作用:

  • 1.登录操作系统
  • 2.利于访问控制
唯一标识:UID 范围:0---60000
管理员root的UID永远为0
系统用户UID一般为1---999
创建的第二个系统用户UID就是1,第三个就是2
普通用户UID 一般(Centos7/RHEL8)从1000开始,再创建的普通用户UID就是1001

# 创建用户后默认会有一个邮件
用户邮件在/var/spoolmail/用户名 下

添加用户:useradd

新建用户时,系统自动从 /etc/skel 模板目录复制到home的新用户目录下
用户信息保存在/etc/passwd 文件中
用户密码保存在/etc/shadow 文件中

在这里插入图片描述


指定用户shell—重点

useradd -s /bin/指定shell
正常账户的默认终端是 /bin/bash
不允许登陆tty的终端是 /sbin/nologin,只允许以服务运行
useradd -s 指明用户所使用的shell,可以使用的所有常规shell列表存储在/etc/shells文件当中


useradd参数详解

在这里插入图片描述

- 添加用户:useradd test1
         - 新建用户会创建以用户名命名的组
         - -g 指定该用户的主属组
            - 一个用户永远只有一个主属组
               - 创建的时候可以指定,也可以后期修改
         - -G 指定该用户的附属组
            - 一个用户可以有多个附属组
               - 同时主属组也会添加到附属组
         - -d<登入目录>
            - 指定用户登入时的起始目录。
               - useradd -d </home/addusername>
         - -c<备注>
            - 加上备注文字。备注文字会保存在passwd的备注栏位中。
         - -D  变更预设值.
         - -e<有效期限>
            - 指定帐号的有效期限。
         - -f<缓冲天数>
            - 指定在密码过期后多少天即关闭该帐号
         - -m
            - 自动建立用户的登入目录。
         - -M
            - 不要自动建立用户的登入目录。
         - -n
            - 取消建立以用户名称为名的群组.
         - -r
            - 建立系统帐号。
         - -s
            指定用户登入后所使用的shell,可以使用的所有常规shell列表存储在/etc/shells文件当中
         - -u
            - 指定用户ID。
         - 也可以这样写useradd -g ko -G ls Augus<br />*** Augus是所添加的用户
         - 常见语法
            - useradd -D [-b][-e <有效期限>][-f <缓冲天数>][-g <群组>][-G <群组>][-s ]
            - useradd [-mMnr][-c <备注>][-d <登入目录>][-e <有效期限>][-f <缓冲天数>][-g <群组>][-G <群组>][-s ][-u ][用户帐号]

useradd示例


创建普通用户

# 正常账户的默认终端是 /bin/bash
# 创建正常账户user1
useradd user1

# 创建user3并为账户添加备注
useradd -c 用户3 user3

# 查看用户的备注信息
[root@localhost ~]# cat /etc/passwd |grep user3
user3:x:1000:1000:用户3:/home/user3:/bin/bash

创建服务用户

不允许登陆tty的终端是 /sbin/nologin,只允许以服务运行

useradd创建服务账户/创建服务账号

# 创建服务账户user2
useradd -M -s /sbin/nologin user2
-M:不创建家目录
-s:指定用户登陆时使用的shell,nologin就是登陆不了

添加用户:adduser

Ubuntu下有adduser命令,可以交互式创建用户
Centos下的adduseruseradd功能一致

新建用户时,系统自动从 /etc/skel 模板目录复制到home的新用户目录下
用户信息保存在/etc/passwd 文件中
用户密码保存在/etc/shadow 文件中

  • useraddadduser的区别
    • 在CentOs下useraddadduser是没有区别的,都是在创建用户,在home下自动创建目录,没有设置密码,需要使用passwd命令修改密码。
  • 在Ubuntu下useraddadduser有所不同
    • 1、useradd在使用该命令创建用户是不会在/home下自动创建与用户名同名的用户目录,而且不会自动选择shell版本,也没有设置密码,那么这个用户是不能登录的,需要使用passwd命令修改密码。
      • 1.1 、Ubuntu下使用useradd不会创建home目录,shell默认是/bin/sh,不会从/etc/skel 复制模板文件
    • 2、adduser在使用该命令创建用户是会在/home下自动创建与用户名同名的用户目录,系统shell版本,会在创建时会提示输入密码,更加友好。
  • 添加用户:adduser + 用户名

修改用户usermod

  • 修改用户名方法
    • (1)以root登录
    • (2)$ usermod -l 新用户名 旧用户名
      • (1)将/etc/passwd下的用户名栏从旧用户名修改为新用户名,其他部分不变
      • (2)将/etc/shadow下的用户名栏从旧用户名,修改为新用户名,其他部分不变
      • (3) 将/var/mail下的用户名栏修改为新用户名
    • (3) $ usermod -c 注解 修改后的新用户名
      • (1)相当于将/etc/passwd下的注解栏修改为新用户名,其他部分不变
    • (4) $ groupmod -n 新组名(新用户名) 旧组名(旧用户名)
      • (1)将原来的用户组名修改为新用户组名,只修改组名,组标识号不变
      • (2)相当于修改了文件/etc/group
      • (3)相当于修改了 /etc/gshadow
    • (5) $ usermod -md /home/新用户名目录 新用户名
      • (1)将/etc/passwd下的登入目录栏,修改为/home/新用户名目录,其他部分不变
      • (2)将原来的用户目录/home/旧用户名目录 ,修改为新的用户目录/home/新用户名目录

删除用户 userdel

  • -r 递归删除该用户所有资料和账户信息
  • -f 强制删除
  • 删除完用户名不会删除用户的组
    • 使用userdel -r -f 会删除用户组

强制删除用户

使用userdel删除用户时不会删除home目录
可以使用userdel - f username 强制删除用户,即使用户在登陆状态下也删除
userldel -r username 会删除用户的home目录和配置文件

# 强制删除用户,即使用户在登陆状态下也删除
userdel - f username

# 会删除用户的home目录和配置文件
userldel -r username

# Linux文件权限为1000,是无属主文件,也就是原有用户被删除了
可以使用
tail -5 /etc/passwd
和
tail -5 /etc/shadow
查看用户是否删除

# tail用来查看最后十条log,和cat效果是一样的
# userdel -r -f 合起来用
userdel -rf username

查看用户信息


id

id username
# id命令查看用户信息
[root@qiaofei ~]# id qiaofei
uid=1000(qiaofei) gid=1000(qiaofei)=1000(qiaofei),10(wheel)

getent

# getent命令用来查看系统的数据库中的相关记录。
# 在passwd中查看root的信息
getent passwd root

查看当前系统下有哪些用户

cat /etc/passwd | cut -f 1 -d :
## 示例
[root@localhost ~]# cat /etc/passwd | cut -f 1 -d :
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
operator
games
ftp
nobody
systemd-network
dbus
polkitd
libstoragemgmt
abrt
rpc
sshd
postfix
ntp
chrony
tcpdump

查看哪些用户可以登录系统

# 查看有哪些可登录用户
cat /etc/passwd | grep -v 'nologin' | awk -F ':' '{print $1}'

查看账号和组信息

#查看zhangsan用户的详细信息
id zhangsan 

#查看张三组的信息
groups zhangsan 

切换用户:

  • 例如: su zhangsan

查询当前登录用户

who am i

将登录用户踢下线

# 查看用户的tty编号
last root

在这里插入图片描述

# 踢掉pts/12--结束pts/12的登录进程
pkill -kill -t pts/12

实战案例:如何科学的修改Linux的用户名


修改用户命令:usermod

  • (1)以root登录
  • (2)$ usermod -l 新用户名 旧用户名
    该命令相当于执行了以下命令:
    • (1)将/etc/passwd下的用户名栏从旧用户名修改为新用户名,其他部分不变
    • (2)将/etc/shadow下的用户名栏从旧用户名修改为新用户名,其他部分不变
    • (3) 将/var/mail下的旧用户名栏修改为新用户名
  • (3) $ usermod -c 注解 修改后的新用户名
    • (1)相当于将/etc/passwd下的注解栏修改为新用户名,其他部分不变
  • (4) $ groupmod -n 新组名(新用户名) 旧组名(旧用户名)
    相当于执行了以下命令:
    • (1)将原来的用户组名修改为新用户组名,只修改组名,组标识号不变
    • (2)相当于修改了文件/etc/group
    • (3)相当于修改了/etc/gshadow
  • (5) $ usermod -md /home/新用户名目录 新用户名
    相当于执行了以下命令:
    • (1)将/etc/passwd下的登入目录栏,修改为/home/新用户名目录,其他部分不变
    • (2)将原来的用户目录/home/旧用户名目录 ,修改为新的用户目录/home/新用户名目录
  • (6)$ reboot
# 修改用户名
usermod -l 新用户名 旧用户名

# 修改用户名的注释信息
usermod -c 注释信息 新用户名

# 修改用户名组名
groupmod -n 新组名 旧组名

# 修改home目录
usermod -md /home/新用户名 新用户名