Linux 用户管理

用户

Linux中的用户可以分为管理员用户和普通用户,区分不通用户的身份是通过uid来进行区分。

新增用户

新增用户是通过useradd命令来实现

useradd user_name

常见参数:

#选项
-s   # 指定该用户使用的shell类型
-u   # 指定uid ,不指定默认从1000开始
-r   # 创建系统用户,也就是 UID 在 1~499 之间,供系统程序使用的用户。
       # 由于系统用户主要用于运行系统所需服务的权限配置,因此系统用户的创建默认不会创建家目录

-d   # 指定家目录,这个目录要提前存在
-p   # 指定用户的密码(需要的是加密的密码,明文密码不可以
-m   # 建立用户时建立用户的家目录,如果改目录不存在会自动创建
-g   # 指定用户所属于的主要组
-G   # 指定用户的附加组。我们把用户加入其他组,一般都使用附加组;

说明:创建一个用户,它的默认属性是通过 /etc/default/useradd 这个文件来指定的。

例如

例如:创建一个普通用户,并指定家目录

#创建一个普通用户指定家目录
root@ubuntu1804:~# useradd -m bob 

root@ubuntu1804:~# ll -d /home/bob/
drwxr-xr-x 2 bob bob 4096 Dec  8 14:28 /home/bob//

root@ubuntu1804:~# id bob 
uid=1001(bob) gid=1001(bob) groups=1001(bob)

例如:创建一个用户,不允许登录

useradd -s /sbin/nologin tom

例如:多台服务器,给系统创建系统用户

  1. 先创建组 使用 -g指定gid
  2. 创建系统用户 使用-r表示创建系统用户 使用 -u指定uid 使用-g指定组
#系统用户的uid和gid范围是1-999
root@ubuntu1804:~# groupadd -g 666 bob

root@ubuntu1804:~# useradd -r -s  /sbin/nologin -u 666 -g bob  user1

root@ubuntu1804:~# id user1	
uid=666(user1) gid=666(bob) groups=666(bob)

删除用户

删除用户是通过userdel命令来实现的

userdel user_name

常用参数:

-r 删除用户的所有相关信息

修改用户

修改用户信息是通过usermod命令来实现的

usermod user_name

例如:

# 修改用户的用户名:使用 -l 选项:
usermod -l 新用户名 老用户名

# 修改用户的家目录:使用 -d 选项:
usermod -d /新的/家目录 要修改的用户名

# 修改用户的默认 shell:使用 -s 选项:
usermod -s /bin/bash 要修改的用户名

# 将用户添加到一个或多个附加组中:使用 -aG 选项,-a 选项表示将用户添加到附加组中,而不是替换用户的组
usermod -aG 组名 要修改的用户名

用户组

Linux中的用户组是用来组织用户,并基于组来分配文件和目录的访问权限,用户组常常被用于让多个用户共享某种权限。

每个用户都有一个默认的主组。当用户创建文件或目录时,这些文件或目录的所属组默认设置为该用户的主组。

用户组是通过GID来进行唯一标识

  • 系统组:1-999

  • 普通组:1000+

一个用户只能加入一个主组,这个主组一般是创建用户的时候默认创建一个同名的主要组,但是一个用户可以加入若干个附加组

新增组

新增组一般是通过groupadd命令来实现的。

sudo groupadd group_name

常用参数:

-g:指定gid,未指定系统随机分配
-r:创建系统用户组,系统用户组通常用于管理系统进程和服务

删除组

groupdel group_name

修改组

sudo groupmod group_name

常用参数:

-g:设置用户的gid
-n:--new-name,修改组名

密码管理

创建用户的时候,可以通过 -P参数来指定用户的密码,但是这个密码需要时加密后的才可以,如果没指定密码,用户的密码为空。需要使用相关工具来进行密码的执行。

可以通过openssl工具来生成一个md5加密的哈希,因为useradd的-p参数接受加密的密码哈希作为参数:

#!/bin/bash
User_Name="bob"
Root_Dir="/home/bob"
Password=$(echo -n 'Abc123' | openssl passwd -1 -stdin)

useradd -p "$Password" "${User_Name}" -d "${Root_Dir}"

说明:

  • openssl passwd: 调用 openssl 的 passwd 子命令,用于处理密码哈希

  • -1: 这个参数表示使用 MD5 哈希算法。Linux 密码哈希有多种格式,其中一种流行的格式是基于 MD5 的。使用 -1 选项可以生成这种格式的哈希

  • -stdin: 这意味着命令将从标准输入(stdin)读取密码明文,而不是从命令行参数或交互式提示中读取

通过passwd命令来修改密码

这种方式是交互式输入密码,需要手动输入;

passwd user_name

非交互式

这种方式在ubuntu上不行,因为--stdin选项。这个选项是Red Hat系列Linux发行版(例如Red Hat Enterprise Linux,CentOS等)中特有的

echo redhat | passwd --stdin

解决方法:

使用chpasswd来实现非交互式的密码修改,这种方式ubuntu能用,centos系列也是可以用的。

# root用户
echo "username:password" | sudo chpasswd

原因:使用 sudo 时,只有 echo "tom:Abc123" 命令使用了超级用户权限。管道后的 chpasswd 命令并没有使用超级用户权限,因此它无法更改密码。

解决方法:使用 sudo 启动一个子shell来执行整个命令,sh -c 会启动一个新的 sh shell 实例来执行 -c 参数后面指定的命令

说明:

  • 如果密码过于简单,会提示警告信息,但是默认最终密码还是会被成功设置的;

  • 创建密码默认的一些属性信息,包括密码有效期、uid从多少开始、密码的加密算法等都是通过 /etc/login.defs 这个文件指定的

posted on 2022-06-11 23:50  背对背依靠  阅读(115)  评论(0编辑  收藏  举报