【Linux】用户管理

文章目录

  • [1. Intro](#1. Intro)
    • [1.1 保存用户信息的文件](#1.1 保存用户信息的文件)
    • [1.2 用户组](#1.2 用户组)
  • [2. 单个用户管理](#2. 单个用户管理)
    • [2.1 查看用户](#2.1 查看用户)
    • [2.2 创建用户](#2.2 创建用户)
    • [2.3 删除用户](#2.3 删除用户)
    • [1.4 修改用户](#1.4 修改用户)
    • [1.5 切换用户](#1.5 切换用户)
    • [1.6 用户密码修改](#1.6 用户密码修改)
  • [2. 用户组管理](#2. 用户组管理)
    • [2.1 用户组管理](#2.1 用户组管理)
  • [3. sudo权限管理](#3. sudo权限管理)
    • [3.1 安装sudo](#3.1 安装sudo)
  • 参考

1. Intro

1.1 保存用户信息的文件

shell 复制代码
# /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 查看用户

shell 复制代码
# 查看当前用户
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)。

shell 复制代码
<< 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 删除用户

shell 复制代码
<< C
userdel [op] username

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

1.4 修改用户

shell 复制代码
<<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 切换用户

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

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

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

1.6 用户密码修改

创建用户后没有设置口令,账户处于锁定状态无法登录,需要给用户设置口令解除锁定状态后才可以登录使用。

shell 复制代码
<<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 用户组管理

bash 复制代码
# 查看所有用户组和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组是当前用户的主用户组或者附加用户组

3. sudo权限管理

sudo可以许授权用户以超级用户(root)或其他用户的身份执行命令。sudo权限由文件/etc/sudoers管理,使用visudo命令将以安全方式打开和编辑该文件。

3.1 安装sudo

centos:7的docker容器中没有安装sudo,需要先安装sudo

参考

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

相关推荐
风行無痕1 小时前
Ubuntu Linux系统配置账号无密码sudo
linux·服务器·ubuntu
爆农2 小时前
centos搭建dokcer和vulhub
linux·运维·centos
重启就好3 小时前
【Ansible】模块详解
linux·服务器·ansible
o0o_-_3 小时前
【瞎折腾/mi50 32G/ubuntu】mi50显卡ubuntu运行大模型开坑(三)安装风扇并且控制转速
linux·运维·ubuntu
Huazzi.4 小时前
Ubuntu 22虚拟机【网络故障】快速解决指南
linux·网络·学习·ubuntu·bash·编程
熙曦Sakura4 小时前
【Linux网络】HTTP
linux·网络·http
轻颂呀4 小时前
Linux中常见开发工具简单介绍
linux
promise5245 小时前
JVM之jcmd命令详解
java·linux·运维·服务器·jvm·bash·jcmd
XiaoCCCcCCccCcccC5 小时前
Linux网络基础 -- 局域网,广域网,网络协议,网络传输的基本流程,端口号,网络字节序
linux·c语言·网络·c++·网络协议
果子⌂5 小时前
Linux系统入门第十二章 --Shell编程之正则表达式
linux·运维·服务器