简介 Linux 系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统
项
目录
用户基本信息
存储在 /etc/passwd
用户密码信息
存储在 /etc/shadow
用户群组基本信息
存储在 /etc/group
用户群组信息信息
存储在 /etc/gshadow
用户目录默认位于
/home/用户名
邮箱
/var/spool/mail/用户名
Linux 系统中,每个用户的 ID 细分为 2 种,分别是
用户ID(User ID,简称 UID)
组 ID(Group ID,简称 GID)
这与文件有拥有者和拥有群组两种属性相对应
用户 相关目录 /etc/passwd 一行记录对应着一个用户,每行记录以 :
分隔,其格式如下
1 seafile:x:1005:1005:seafile:/home/seafile:/bin/bash
含义
1 用户名:密码:UID:GID:注释信息:家目录:Shell
项
注释
用户名
用户的名称
密码
X
表示占位符,也可以是密码
UID(用户ID)
用户识别代码
GID(组ID)
用户所属组
注释信息
可以完善用户的基本信息
家目录
系统登录用户后的工作目录
Shell
用户登录系统所使用的Shell
/etc/shadow 栗子
1 seafile:$6$YqkEsOcfKPptyhnS$YD0ym4BZ52pzcCnU ....:16781:0:99999:7:::
含义如下
1 用户名:密码:上一次修改密码的时间:密码最小使用期限:最长使用期限:警告时间:帐户过期时间:保留字段
用户名:用户的名称,对应 /etc/passwd 文件中
密码:Centos6 中使用MD5加密算法,Centos7 中使用sha1的算法
第一个 $
后面加密算法类型
第二个 $
后面表示 salt
盐值
第三个 $
后面表示密码的提取码(参照加密类型)
上一次修改密码的时间:指用户上次修改密码的时间
计算方法:从Linux元年 1970年01月01日0点0分 到目录所经过的秒数
密码最小使用期限:指用户修改密码后,需要到多少天后方可更改密码,0
表示禁用
密码最长使用期限:指用户的密码到多少天后需要修改密码
警告时间:指用户密码到期前多少天提示用户修改密码,0
和空字段
表示禁用此功能
帐户过期时间:批帐户在密码过期后多少天还未修改密码,将被停用
相关命令 添加用户 语法
选项
注释
-b, –base-dir
设置主目录的基目目
–btrfs-subvolume-home
-c, –comment
备注
-d, –home-dir
指定用户Home目录
-D, –defaults
显示或更改默认的配置
-e, –expiredate
指定帐号的的过期日期
-f, –inactive
指定在密码过期后多少天禁用帐号
-g, –gid
指定用户所属的群组
-G, –groups
指定用户所属的附加群组
-k, –skel
使用此目录作为骨架目录
-K, –key
不使用 /etc/login.defs
中的默认值
-l, –no-log-init
不记录最近登录和登录失败信息
-m, –create-home
建立Home目录
-M, –no-create-home
不创建Home目录
-N, –no-user-group
取消建立以用户名称为名的群组
-o, –non-unique
允许重复使用群组识别码
-p, –password
设置密码
-r, –system
建立系统账号
-R, –root
把根目录换成指定目录
-P, –prefix
-s, –shell
指定用户的shell,默认值为 /bin/sh
-u, –uid
指定用户ID
-U, –user-group
建立以用户名称为名的群组
-Z, –selinux-user
创建不允许登录的用户
1 useradd user01 -s /bin/nologin
创建用户并指定home目录
1 useradd user02 -d /home/user02
删除用户 语法
选项
注释
-f, –force
强制执行
-r, –remove
删除用户的同时删除与用户相关的所有文件
-R, –root
把根目录换成指定目录
-P, –prefix
-Z, –selinux-user
为用户删除所有的 SELinux 用户映射
删除用户,但不删除其家目录及文件
删除用户,其家目录及文件一并删除
修改用户 语法
选项
注释
-b, –badnames
设置主目录的基目目
-c, –comment
修改用户帐号的备注文字
-d, –home
修改用户登入时的目录
-e, –expiredate
修改帐号的有效期限
-f, –inactive
修改在密码过期后多少天即关闭该帐号
-g, –gid
修改用户所属的群组
-G, –groups
修改用户所属的附加群组
-a, –apend
把用户追加到某些组中,仅与 -G
使用
-l, –login
修改用户帐号名称
-L, –lock
锁定用户
-m, –move-home
删除HOME目录
-o, –non-unique
允许重复使用群组识别码
-p, –password
设置密码
-R, –root
把根目录换成指定目录
-P, –prefix
-s, –shell
修改用户登入后所使用的Shell
-u, –uid
修改用户ID
-U, –unlock
解锁用户
-v, –add-subuids
-V, –del-subuids
-w, –add-subgids
-W, –del-subgids
-Z, –selinux-user
更改登录目录
1 usermod -d /home/hnlinux user01
改变用户的 UID
修改用户名xx为yy
设置密码 语法
选项
注释
-a, –all
-d, –delete
删除指定帐户的密码
-e, –expire
-k, –keep-tokens
仅在过期后修改密码
-i, –inactive
过期后停止用户账号
-l, –lock
停止账号使用
-n, –mindays
-q, –quiet
-r, –repository
-R, –root
把根目录换成指定目录
-S, –status
查询用户密码的状态
-u, –unlock
解锁被指定帐户
-x, –maxdays
设置密码的有效期
–stdin
从标准输入管道读入新的密码
栗子 1 echo '密码' | passwd --stdin 用户名
批量设置 可以使用 chpasswd
命令从标准输入中读取一定格式的用户名、密码来批量更新用户的密码
1 2 echo 用户名:密码 | chpasswdchpasswd < test.txt
选项
注释
-c, –crypt-method
指定加密方式
-e, –encrypted
输入的密码是加密后的密文
-m, –md5
当被支持的密码未被加密时,使用MD5加密代替DES加密
-R, –root
-s, –sha-rounds
生成用户名列表文件,或者自己导入
1 2 3 4 5 6 7 $ echo user{1..5} | xargs -n 1 useradd -s /bin/bash $ tail -n 5 /etc/passwd user1:x:1002:1002::/home/user1:/bin/bash user2:x:1003:1003::/home/user2:/bin/bash user3:x:1004:1004::/home/user3:/bin/bash user4:x:1005:1005::/home/user4:/bin/bash user5:x:1006:1006::/home/user5:/bin/bash
以 用户名:密码
的格式将新添加的用户写入 pwd.txt
1 2 3 4 5 6 7 $ echo user{1..5}:pwd $((RANDOM+10000000 )) | tr " " "\n" >pwd.txt $ cat pwd.txt user1:pwd10023079 user2:pwd10007409 user3:pwd10017693 user4:pwd10000887 user5:pwd10004436
批量设置密码
0x03 用户组 每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理。不同 Linux 系统对用户组的规定有所不同,如Linux下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建
用户组的管理涉及用户组的添加、删除和修改。组的增加、删除和修改实际上就是对 /etc/group
文件的更新
相关目录 /etc/group 构成
含义如下
组名:组的名称,默认同名用户名
密码:组的密码
GID:组的识别号
User_list:该组下的用户,使用 ,
隔开
/etc/gshadow 构成
1 root:$6$PLRAi /Z/svr$PRelPtvLuGJqvFG3D8fbjYHDho2RQUe93glO .::
含义如下
组名:组名称,同步 /etc/group 文件中
密码
第一个 $
后面加密算法类型
第二个 $
后面表示 salt
盐值
第三个 $
后面表示密码的提取码(参照加密类型)
组管理者:可以对此组成员有操作权限,用逗号隔开
User_list:用户的列表,使用逗号 ,
隔开
相关命令 添加组 语法
选项
注释
-f, –force
强制执行
-g, –gid
指定新用户组的组标识号(GID)
-K, –key
覆盖配置文件 /ect/login.defs
-o, –non-unique
配合 -g
使用,允许重复使用群组识别码
-p, –password
设置组密码
-r, –system
创建系统账号,ID小于500
-R, –root
把根目录换成指定目录
-P, –prefix
栗子 新建组group1
新建组group2,并指定组标识号
删除组 语法
选项
注释
-R, –root
把根目录换成指定目录
-P, –prefix
-f, –force
强制执行
栗子 删除组group1
查看group1组是否删除成功
1 $ sudo more /etc/group | grep group1
通过查看 /etc/group
配置文件里面不存在group1组,说明已经被删除了
修改组 语法
选项
注释
-g, –gid
修改组ID
-o, –non-unique
允许重复使用群组识别码
-n, –new-name
将用户组的名字改为新名字
栗子 将组group2的组标识号修改为102
将组group2的标识号改为10000,组名修改为group3
1 groupmod –g 10000 -n group3 group2
设置组密码 语法
选项
注释
-a, –add 用户名 组名
添加用户到组
-d, –delete 用户名 组名
把用户从组内删除
-r, –remove-password
删除组的密码
-A, –administrators
设置组的管理员列表
-M, –members
设置组的成员列表
-R, –restrict
将对组的访问权限限制为其成员
栗子 为group1组用户设置密码
将user01用户加入到group1组
1 gpasswd -a user01 group1
将user01用户从group1组删除
1 gpasswd -d user01 group1
移除group1用户组的组密码
0x04 扩展 用户查询相关命令
id 查询用户信息,例如用户归属那个用户组,及uid和gid等
选项
注释
-g, –group
显示用户所属群组的ID(GID)
-G, –groups
显示用户所属附加群组的ID
-n, –name
显示用户,所属群组或附加群组的名称
-r, –real
显示实际ID
-u, –user
显示用户ID
查询用户信息
1 2 $ id uid=1000(pi) gid=1000(pi) groups =1000(pi),10(wheel),996(docker)
w 查看谁登录了,并且做了什么,切换的不行,从新登录的才行
选项
注释
-f, –from
显示用户从哪登录
-h, –no-header
不打印头信息
-s, –short
短输出格式
-u, –no-current
当显示当前进程和cpu时间时忽略用户名
-i, –ip-addr
显示IP地址而不是主机名
who 查看哪些用户在登录,终端及登录时间,来源主机
选项
注释
-a, –all
显示全面信息
-b, –boot
显示系统最近启动时间
-d, –dead
显示死掉的进程
-l, –login
显示系统登录进程
-H, –heading
带有列标题打印用户名,登录终端和登录时间
-q, –count
只显示登入系统的帐号名称和总人数
-s, –short
此参数将忽略不予处理,仅负责解决who指令其他版本的兼容性问题
-w, –mesg
显示用户的信息状态栏
-t, –time
显示系统上次锁定时间
-u, –users
显示已登录用户列表
打印用户登录信息
1 2 3 4 5 6 7 $ who -H -a NAME LINE TIME IDLE PID COMMENT EXIT system boot 2022-02-28 22:02 LOGIN tty1 2022-02-28 22:03 680 id =tty1 root + pts/0 2022-02-28 22:03 . 1258 (192.168.6.1) run-level 3 2022-02-28 22:03 root + pts/1 2022-02-28 22:12 01:00 2500 (192.168.6.1)
打印系统最近启动时间
1 2 $ who -b system boot 2022-02-28 22:02
users 显示当前登录系统的所有用户的用户列表。每个显示的用户名对应一个登录会话。如果一个用户有不止一个登录会话,那他的用户名将显示相同的次数
last 显示的用户曾经加目前登录以及退出登录列表
执行 last
读取位于 /var/log/wtmp 的文件
执行 lastb
读取位于 /var/log/btmp 的文件
语法
1 2 last [选项] [用户名] lastb [选项] [用户名]
选项
注释
-a, –hostlast
将主机名/IP地址,显示在最后一列
-d, –dns
将IP地址转换成主机名称
-f, –file
指定记录文件
-i, –ip
只显示指定IP的登录情况
-n, –limit
显示列数
-R, –nohostname
不显主机名称/IP
-s, –since
-t, –until
-p, –present
-w, –fullnames
-x, –system
显示系统关闭、用户登录和退出的历史
栗子 显示近期用户或终端的登录情况
1 2 3 4 $ last root pts/1 192.168.6.1 Mon Feb 28 22:12 still logged in root pts/0 192.168.6.1 Mon Feb 28 22:03 still logged in reboot system boot 3.10.0-1160.59.1 Mon Feb 28 22:02 - 23:45 (01:42)
第一列:用户名 或 reboot
(启动或重启操作)
第二列:终端位置
pts/x:从SSH远程连接的用户
tty:直接连接到计算机或者本地连接的用户
system boot
:表示启动或者重启操作
第三列信息:登录IP/内核
第四列:开始时间,日期格式为 date +"%a %b %d"
第五列:结束时间
still login in
:还未退出
down
:正常关机
crash
:强制关机
第六列:持续时间
mkpasswd mkpasswd(make password)可以随机生成字符串
选项
注释
-m, –method=
指定算法
-5
使用 md5crypt
加密,相当于 -m md5crypt
-S, –salt=
加盐值
-l
指定长度
-d
数字的个数
-c
小写字母个数
-C
大写字母个数
-s, –stdin
特殊字符个数
-R, –rounds=
加密循环次数
-P, –password-fd=
栗子 使用 mkpasswd 生成密码
1 2 3 4 5 mkpasswd -l 12 mkpasswd -l 12 -s 0 mkpasswd -l 12 -s 0 -d 4 mkpasswd -l 12 -s 0 -d 4 -C 5 mkpasswd -l 12 -s 0 -d 4 -c 5
给用户yang设置密码
在脚本里,给用户 yang 设置密码
1 echo "7126115683.q" | passwd --stdin yang
如果后面不加用户yang,就是直接给root设置密码