一.用户基本概述
1.用户基本概述
(1)用户指的是用户指的是使用计算机系统的个体或实体,其能够正常登录Linux或Windows系统
(2)Linux与Windows系统的用户区别 :在Windows系统中可以创建多个用户,但不允许同一时刻多个用户登陆系统,但Linux系统则允许同一时刻多个用户同时登陆,登陆后相互之间操作并不影响。
(3)系统上的每一个进程(运行的程序),都需要一个特定的用户运行,通常在公司是使用普通用户管理服务器,因为root权限过大,容易造成故障。
2.查看用户
[root@bqj-haiguang-11e102e1e22 ~]# id #查看当前所登陆的用户信息
# uid:用户id,系统只能识别uid,不能识别名字,人看名字
# gid:组id
uid=0(root) gid=0(root) groups=0(root)
[root@bqj-haiguang-11e102e1e22 ~]# id oldboy #查看其它用户的信息
uid=1000(oldboy) gid=1000(oldboy) groups=1000(oldboy)
3.用户信息存放位置
Linux系统会将用户的信息存放在/etc/passwd,记录了用户的信息,但没有密码信息(使用占位符表示),密码被存放在/etc/shadow中。
:密码占位符。在传统的 Unix 系统中,密码会以加密形式存储在 /etc/shadow 文件中,而 /etc/passwd 中则使用 x 来代表密码已经被加密并存储在 /etc/shadow 文件中。
:用户ID(UID)。在 Linux 系统中,0 通常用于表示超级用户(root)。
:组ID(GID)。这个字段表示用户所属的基本组的组ID。在这里也是 0,意味着这个用户的基本组是超级用户组(root)。
:用户的家目录路径。对于超级用户(root),家目录通常位于 /root。
:用户的默认 shell。这里指定了 /bin/bash,表示用户登录后将使用 bash shell。
实际示例如下:
[root@bqj-haiguang-11e102e1e22 ~]# head -1 /etc/shadow
root:$y$j9T$Pff5qDWotwS6dGP6hjF8JE2b$b8wHuK2n8crvsUbdT.mjzNGxVxZI5.Ubq0w3jXcCJK4::0:99999:7:::
$y$前缀通常表示使用了yescrypt加密算法。yescrypt是一种现代的密码哈希函数。对于安全目的,密码哈希算法通常是单向的,这意味着它们是不可逆的。这意味着无法直接从哈希值还原出原始密码。相反,验证密码是否正确的方法是使用相同的哈希算法对用户提供的密码进行哈希,然后将结果与存储的哈希进行比较。
4.系统对用户的约定
n 普通用户拥有受限的权限,不能执行系统关键操作,通常用于一般用户的日常使用。
n 系统用户是专门用于系统服务和进程的用户账号,不具备登录系统的权限。
n 在 CentOS 7 中,系统用户的UID范围是1-999,在 CentOS 6 中是1-499。
n 在 CentOS 7 中,可登录用户的UID范围是1000-65535,在 CentOS 6 中是500-65535。
二、用户相关命令
1、新增用户
[root@bqj-haiguang-11e102e1e22 ~]# ls -l /usr/sbin/useradd
ls -l /usr/sbin/adduser
-rwxr-xr-x. 1 root root 171776 Mar 15 10:01 /usr/sbin/useradd
lrwxrwxrwx. 1 root root 7 Mar 15 10:01 /usr/sbin/adduser -> useradd
(1)使用语法
用法1:useradd -D #查看创建用户的默认值
用户2:seradd -D [选项] 可以指定选项进行配置修改。
用法3:useradd [选项] 用户名 #根据选项创建用户
(2)参数说明
-b,–base-dir BASE_DIR新帐户主目录的基本目录
useradd -b /home/users username
创建一个名为 testuser 的新用户,他的主目录将会是 /home/users/testuser。
-c,–comment COMMENT设置新账户的注释信息,通常是用户的全名或其他相关信息。注释信息也被称为 GECOS 字段。
useradd -c "John Doe" username
使用 -c 选项并指定了用户的注释信息为 "John Doe"。然后,在 useradd 命令中指定了用户名 username。
useradd -d /custom/home/testuser username
对于用户 testuser,他的主目录将会是 /custom/home/testuser,而不是默认的基础目录下的路径。
-e,–expiredate EXPIRE_DATE新帐户的到期日期
useradd -e 2025-12-31 username
在这个示例中,我们使用 -e 选项并指定了账户到期的日期为 2025 年 12 月 31 日。然后,我们在 useradd 命令中指定了用户名 username。一旦账户到了指定的到期日期,用户将无法再登录系统。
-f,–inactive INACTIVE新帐户的密码不活动期
在这个示例中,我们使用 -f 选项并指定了密码不活动期限为 30 天。然后,我们在 useradd 命令中指定了用户名 username。这意味着如果用户在 30 天内没有更改密码,他们的账户将被禁用。
在这个示例中,我们使用 -g 选项并指定了主组的名称 groupname 或 ID 1001。然后,在 useradd 命令中指定了用户名 username。
useradd -G group1,group2 username
在这个示例中,我们使用 -G 选项并指定了附加组列表为 group1,group2。然后,在 useradd 命令中指定了用户名 username。这样,用户 username 将会被添加到 group1 和 group2 这两个附加组中。
useradd -k /etc/skel_custom username
在这个示例中,我们使用 -k 选项并指定了替代的框架目录为 /etc/skel_custom。然后,在 useradd 命令中指定了用户名 username。
-K,–key KEY=VALUE覆盖/etc/login.defs默认值
useradd -K PASS_MAX_DAYS=30 username
在这个示例中,我们使用 -K 选项并指定了 PASS_MAX_DAYS=30,表示将新用户的密码最大使用天数设置为 30 天。然后,在 useradd 命令中指定了用户名 username
-l,–no-log-init不要将用户添加到lastlog和faillog数据库
在这个示例中,我们使用 -l 选项来创建一个新用户,但是不将该用户添加到 lastlog 和 faillog 数据库中。然后,在 useradd 命令中指定了用户名 username。
在这个示例中,我们使用 -m 选项来创建一个新用户,并且创建了一个与用户名相同的主目录作为新用户的家目录。然后,在 useradd 命令中指定了用户名 username。这样,当用户 username 被创建时,系统会自动为其创建一个主目录 /home/username(假设默认的主目录基础目录是 /home),并将其设置为新用户的家目录。当你使用 useradd 命令创建用户时,默认会创建用户的主目录。因此,-m 选项通常不需要显式地指定,除非你有特殊的需求或者要覆盖默认行为。
-o,–non-unique允许创建具有重复(非唯一)UID的用户
用户数据迁移:当你需要从一个系统迁移用户数据到另一个系统时,可能会遇到两个系统上的用户UID不一致的情况。为了保持数据一致性,你可能需要在目标系统上创建具有相同UID的用户。
解决权限问题:在某些情况下,可能会出现权限问题,例如当一个用户在不同的系统上拥有不同的UID,但是需要访问相同的文件或目录时。为了解决这些权限问题,你可能需要在不同的系统上创建具有相同UID的用户。
-R 选项允许你指定一个目录,该目录将被用作 chroot 环境的根目录。chroot 是一种操作系统级别的安全功能,它允许你将进程的根目录更改为另一个目录,从而限制进程对系统资源的访问。
在 useradd 命令中,-R 选项通常用于指定一个目录,该目录将被用作新用户的家目录的根目录。这样,新用户的家目录将被限制在指定的目录中,并且无法访问其他系统资源。
useradd -R /home/chroot_dir username
在这个示例中,我们使用 -R 选项并指定了目录 /home/chroot_dir,该目录将被用作新用户的家目录的根目录
在这个示例中,我们使用 -s 选项并指定了登录 shell 为 /bin/bash,这意味着当用户 username 登录系统时,他们将会使用 Bash 作为其默认的命令行解释器。
在这个示例中,我们使用 -u 选项并指定了UID为 1001。然后,在 useradd 命令中指定了用户名 username。
-Z,–selinux-user SEUSER为SELinux用户映射使用特定的SEUSER
-Z 选项用于为 SELinux 用户映射指定特定的 SEUSER。在 SELinux(Security-Enhanced Linux)中,每个用户都有一个与之关联的 SELinux 用户(SEUSER),用于确定用户对系统资源的访问权限。
使用 -Z 选项,你可以为新用户显式地指定一个特定的 SEUSER。
在这个示例中,我们使用 -Z 选项并指定了 SEUSER 为 staff_u。然后,在 useradd 命令中指定了用户名 username。
这样,当用户 username 被创建时,他们将与 staff_u 这个 SELinux 用户关联。
2.修改用户信息
# -u 指定要修改用户的UID
# -g 指定要修改用户基本组
# -G 指定要修改用户附加组,使用逗号隔开多个附加组, 覆盖原有的附加组,-aG追加
# -d 指定要修改用户家目录 -md 旧家搬新家
# -s 指定要修改用户的bash shell
# -c 指定要修改用户注释信息
# -l 指定要修改用户的登陆名
# -L 指定要锁定的用户
# -U 指定要解锁的用户
#1.检查此前创建的用户信息
[root@lxy ~]# grep "lxy" /etc/passwd
lxy:x:5001:503:2019 new student:/home/lxy:/bin/bash
#2.修改lxy用户uid、gid,附加组 -a表示追加
[root@lxy ~]# groupadd -g 5008 network_sa
[root@lxy ~]# groupadd -g 5009 devops
[root@lxy ~]# usermod -u 6001 -g5008 -a -G 5009 lxy
#3.修改lxy用户的注释信息, 用户家目录, 登录shell, 登录名 -l:改名字,-md,把环境也带过去
[root@lxy ~]# usermod -c "2019 new student" -md /lxy -s /bin/sh -l change_lxy lxy
#检查是否修改成功
[root@lxy ~]# grep "lxy" /etc/passwd
lxy_lqz:x:6001:5008:2019 new student:/lxy:/bin/sh
[root@lxy ~]# id change_lxy
uid=6001(change_lxy) gid=5008(network_sa) groups=5008(network_sa),503(sa),5009(devops)
[root@lxy ~]# ll -d /lxy
drwx------. 2 lxy_lqz network_sa 4096 2014-09-23 00:13 /lxy
#4.锁定用户[扩展]
[root@lxy ~]# echo "123" |passwd --stdin change_lxy
[root@lxy ~]# usermod -L change_lxy #锁定后会无法登陆系统
#5.解锁用户[扩展]
[root@lxy ~]# usermod -U change_lxy
3.删除用户
默认删除用户不删除用户的家目录
-r 删除家目录
-f 强制删除
默认情况下,用户登录状态下是不能删除用户,强制删除用户以后,用户还是可以用的
#选项 -r 删除用户同时删除它的家目录
#1.删除user1用户,但不删除用户家目录和 mail spool
[root@lxy ~]# userdel user1
[root@lxy ~]# ls /var/spool/mail/
#2.-r参数可以连同用户家目录一起删除(慎用)
[root@lxy ~]# userdel -r user1
4.其他
1. 使用finger命名查询用户信息以及登录信息(yum install finger),示例: finger UserName
2. 使用chfn命令修改用户信息(其实是修改注释),示例: chfn UserName(yum install util-linux,在ctyun系统中,命令为lchsh)
3. 使用chsh命令修改用户登录Bash Shell,示例: chsh UserName(yum install util-linux,在ctyun系统中,命令为lchsh)