【Linux】用户管理

发布于:2025-05-11 ⋅ 阅读:(19) ⋅ 点赞:(0)

1. Intro

1.1 保存用户信息的文件

# /etc/passwd:用户基本信息,一行一个账户
username:password:UID:GID:GECOS:home_directory:shell

# /etc/shadow:用户密码和加密密码信息,root才能访问
username:encrypted_password:last_change:min_days:max_days:warning_days:inactive_days:expiration_date:reserved

# /etc/group:用户组信息,用户组信息,一行一个用户组
group_name:password:GID:users

# /etc/gshadow:用户组的加密密码和组管理信息,只有 root 用户可以访问
group_name:encrypted_password:admin_list:member_list

1.2 用户组

用户组:用户的集合。一个用户可以属于多个用户组,一个用户组可包含多个用户。从一个用户所属的多个组中指定一个用户组作为主用户组,其他组为其附加用户组。
主用户组:创建用户时所指定的用户组,如没有指定,则系统默认创建同用户名的用户组(gid和uid通常相同),并将其作为主用户组。文件的权限分为三部分:owner、group、other,创建文件的用户是owner,该用户的主用户组是该文件的group。对文件而言,除了owner和group内的用户,其他用户都是other。
附加用户组:用户所属的除了主用户主之外的用户组。user1属于用户组grp1,文件的group为grp2,user1想以grp1权限访问文件,则只需要把grp2加到自己的附加用户组列表即可。

2. 单个用户管理

2.1 查看用户

# 查看当前用户
whoami
id
lslogins -u
echo $USER

# 查看系统所有用户
cut -d: -f1 /etc/passwd  # -d指定分隔符,-f指定提取第几个字段(-f1表示提取分割后的第一个字段)
getent passwd | cut -d: -f1
lslogins | awk '{print $2}'

# 查看系统所有当前登录用户
who | awk '{print $1}'
w | awk 'NR>2 {print $1}'  # NR是awk内置变量表示行号(NR>2:当前行号大于2)
users

2.2 创建用户

用户被创建后,在系统文件/etc/passwd, /etc/shadow, /etc/group,/etc/gshadow中新增与该用户相关的记录,会在主目录中新增文件(.bashrc,.bash_profile,.profile)。

<< C
useradd [op] username

-c comment 指定一段注释性描述。
-d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。
-m 创建用户主目录,系统不会自动创建
-g 用户组 指定用户所属的用户组。
-G 用户组,用户组 指定用户所属的附加组。
-s Shell文件 指定用户的登录Shell。
-u 用户号 指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号。
C

# case1:创建用户sam
useradd –d /home/sam -m sam

# case2:创建用户gem,它同时属于adm组和root组,因而它有这两个组的权限
useradd -s /bin/sh -g group –G adm,root gem

2.3 删除用户

<< C
userdel [op] username

-r: -r:删除用户主目录
C
# case1:删除用户sam
userdel -r sam


1.4 修改用户

<<C
usermod [op] username

op和useradd中的相同
C

# case1: 用户sam登录shell改为/bin/ksh,主目录改为/home/z,用户组改为developer
usermod -s /bin/ksh -d /home/z –g developer sam

1.5 切换用户

# 切换到root,需要输入root密码
su -  # -:模拟一个完全登录的会话,即会加载目标用户的环境变量等配置信息
su - root

# 切换到普通用户,需要输入sam密码
su - sam

# 使用sudo来切换用户,只需要输入当前用户密码,而不需要输入目标用户密码,要求当前用户要有sudo权限
sudo -i  # 切换到root,-i使用交互式shell
sudo -i -u sam # 切换到sam,-u指定用户名

1.7 用户密码修改

创建用户后没有密码,需要给用户设置密码。

<<C
passwd [op] username

-l 锁定口令,即禁用账号。
-u 口令解锁。
-d 使账号无口令。
-f 强迫用户下次登录时修改口令。
C

# case1: 当前登录用户为sam,修改sam的密码
passwd 
Old password:****** 
New password:******* 
Re-enter new password:*******

# case2: root修改其他用户密码
passwd sam

# case3:锁定用户sam,让系统不允许sam登录
passwd -l sam

# case4: 移除sam的密码,让用户登录sam时无需密码
passwd -d sam

2. 用户组管理

2.1 用户组管理

# 查看所有用户组和gid
getent group | cut -d: -f1,3
cat /etc/group | cut -d: -f1,3

groups  # 查看当前用户所属的用户组
groups username  # 查看指定用户所属的用户组
id  # 查看当前用户UID、GID 以及所属的附加用户组
id username  # 查看指定用户UID、GID 以及所属的附加用户组

groupadd -g 1001 group0  # 添加用户组
# -g 101: 指定gid=101
# group0: group名
groupdel group0  # 删除用户组

groupmod -n group1 group0  # 将用户组group0改名为group1
groupmod -g 1002 group0  # 更改用户组的gid

gpasswd -a user0 group0  # 将用户user0添加到用户组group0
gpasswd -d user0 group0  # 将用户user0从用户组group0中删除

usermod -aG group0 user0  # 将用户user0添加到gruop0附加用户组

newgrp root  # 变更用户的主用户组为root组,前提是root组是当前用户的主用户组或者附加用户组

参考

ref:https://www.runoob.com/linux/linux-user-manage.html


网站公告

今日签到

点亮在社区的每一天
去签到