一、用户和组管理
(1)用户user
linux用户:Username/UID
管理员:root,0
普通用户:1-60000自动分配
系统用户1-499,1-999
登录用户:500+ 1000+
(2)组group
组:多个用户的组合
作用:简化授权 l
inux 组:groupname
管理员组:root,0
普通组: 系统组1-499,1-999
普通组500+ 1000+
linux:用户名/组名;可以同名 uid/gid
用户名:uid
组名:gid
一个组对多个用户;一个用户对多个组;多对多的关系 当创建一个新用户,默认会创建一个相同名称的组并且把这个组作为它的主组对应新用户
(3)安全上下文
运行中的程序:进程 以进程发起者的身份运行: root:/bin/cat shiguoqing:/bin/cat 进程所能够访问资源的权限取决于进程的运行者的身份
(4)组的类别
linux用户的主要组 用户必须属于一个切只有一个组 组名同用户名,切仅包含一个用户,私有组 用户的附加组 一个用户可以属于零个或多个辅助组
二、用户和组的配置文件
(1)cat /etc/passwd:用户信息及其属性
root❌0:0:root:/root:/bin/bash
第一字段:用户名
第二字段:密码
第三字段:UID 用户身份编号
第四字段:GID 登录所在组编号
第五字段:用户名全称
第六字段:用户的家目录所在位置
第七字段:用户所用SHELL 的类型
(2)cat /etc/shadow:用户密码/相关属性 (限管理员查看)
root:$1$.TZS2yu$uQ3.5XLbdEhLkak9HKqZx/:16042:0:99999:7:空白:空白:空白
第一字段:用户名
第二字段:密码
第三字段:上次修改口令的时间
第四字段:两次修改口令间隔最少的天数
第五字段:两次修改口令间隔最多的天数
第六字段:提前多少天警告用户口令将过期
第七字段:在口令过期之后多少天禁用此用户
第八字段:用户过期日期
第九字段:保留字段
chage username(用户):更改口令属性及相关设置
Minimum Password Age [0]: 最短口令有效期
Maximum Password Age [99999]: 最长口令有效期
Last Password Change (YYYY-MM-DD) [-1]: 修改的口令时间
Password Expiration Warning [7]: 提前几天过期前通知
Password Inactive [-1]: 在过期几天后锁定账户
Account Expiration Date (YYYY-MM-DD) [-1]: 账户最长使用有效期
chage -l username(用户):查看用户相关信息
chage -d0 username(用户):设置口令过期,下次登录必须更改口令
(3)cat /etc/group:组/属性
root❌0:root
第一字段:用户组名称;
第二字段:用户组密码;
第三字段:GID
第四字段:用户列表,每个用户之间用,号分割
(4)cat /etc/gshadow:组密码/ 相关属性 (限管理员查看)
root:空白:空白:root
第一字段:用户组
第二字段:用户组密码
第三字段:用户组管理者
第四字段:组成员,如果有多个成员,用,号分割;
getent passwd username:只查看一个用户 getent shadow username:只查看一个用户密码信息
修改shell类型:chsh -s /sbin/nologin shiguoqing (nologin:不能登录的账户Shell类型,一般给进程和服务用) 改回:chsh -s /bin/bash shiguoqing
【误删改uid为0的用户,恢复方法】 重启→按e键→在linux16尾部输入:init=/bin/bash →ctrl+x 启动→cd /root ;mount -o rw,remount / ; nano etc/pswd→然后更改该目录下root uid权限→重启
openssl rand -base64 12:随机生成一段16位口令
用户管理命令
一、查看和更改组
(组/用户 密码) getent gshadow:查看组密码 getent group :查看组 (组:密码 :编号 :成员) nano etc/group:修改组 (多个成员用逗号隔开;gshadow也要修改才行)
!!:禁用口令 ! :有口令
groupmems -l -g(更改/查看组成员) -a liu -g wang:把liu用户加到wang组(附加组) -d liu -g wang:把liu用户移除wang组
nano cat /etc/login.defs 修改密码策略值
etc/default/useradd 创建用户时,目录默认属性
二、用户和组管理命令
useradd 创建用户
usermod 修改用户
userdle 删除用户
groupadd 创建组
groupmod 修改组
groupdel 删除组
(1)用户创建 useradd
useradd [options] username
-u username:指定username的UID #useradd -u 1200 username
-o :忽略user的UID的唯一选项 (配合-u)useradd -u 1202 -o shi
-d :指定家目录 iseradd -d /data/hudir shi:创建shi用户到/data/hudir家目录下
-r :创建系统账号(系统默认不生成家目录)默认用较小ID
-s:指定shell类型(etc/bash)useradd shi -s /sbin/nologin
-c:添加描述 -g 主组 useradd -g shi shi1:把shi作为shi1用户的主组
-N :把users作为自己的主组
-G :附加组 useradd -g shi -G guo,qing shi1(拿shi作为主组,guo,qing,作为附加组,并创建shil用户)
-m 强制创建家目录 (比如系统用户) -M 不创建加目录(比如普通用户)
练习题:
1、创建用户gentoo,附加组为bin和root,默认shell为/bin/csh,注释信息为 “Gentoo Distribution”。
useradd gentoo -G bin,root -s /bin/csh - c "GentooDistribution"
2、创建下面的用户、成员关系
名字为webs 的组 usergroup webs
用户nginx 使用webs 作为附属组 ! useradd -G webs nginx
用户varnish,也使用webs 作为附属组 ! useradd -G wbs varnish
用户mysql,不可交互登录系统,且不是webs 的成员,nginx,varnish, mysql密码都是magedu
useradd -s /sbin/nologin mysql
echo passwd | passwd --stdin nginx
varnish
mysql
用户和组管理
(2) usermod 修改用户
usermod [OPTION] username -u UID:新UID -g GID:新基本组 -aG root wang:把wang账号加入root组 -G 新附加组,原来的附加组将会被覆盖;若保留原有,则要同时使用-a选项 清空附加组 usermod " " wang -s 修改shell类型usermod -s /sbin/nologin guo -c 新的注释信息 -U **:解禁用户密码 (空口令不能解禁) -L 给用户加锁 -l newuser user:把user用户改名为newusesr
注意:usermod 和 useradd 命令的选项非常类似,因为它们都是用于定义用户信息的。需要注意的是,useradd 命令用于在添加新用户时指定用户信息,而 usermod 命令用于修改已经存在的用户的用户信息,干万不要搞混。
(3) 删除用户:userdel
userdel [OPTION]... login -r mysql 删除mysql用户 (邮件也必须删除 rm -rf /var/spool/mail/mysql)
(4)查看用户相关的ID信息:id
id [OPTION]... [USER] 无选项无参数,默认显示当前用户所有相关的ID信息
-u:UID -g:GID -G:所有组(包括基本组和附加组)
(5)切换用户或以其他用户身份执行命令:su
su options... [user [args...]] 切换用户的方式:
su UserName:非登录式切换,即不会读取目标用户的配置文件
su - UserName:登录式切换,会读取目标用户的配置文件;完全切换,连带环境变量一起切换
Note:root su至其他用户无须密码;非root用户切换时需要密码
换个身份执行命令:su - UserName -c 'COMMAND'
用户 命令
选项: -c: -, --login, -l:“su -l UserName”相当于“su - UserName” -s:指定shell
(6) 给用户添加密码:passwd
passwd [OPTIONS] UserName:修改指定用户的密码,仅root用户有权限
passwd:修改自己的密码,用户具有权限使用该命令 常用选项:
-l username:锁定指定用户
-u username:解锁指定用户
-e username:强制用户下次登录修改密码
-n mindays:指定最短使用期限
-x maxdays:最大使用期限
-w warndays:提前多少天开始警告
-i inactivedays:非活动期限(密码过期后的宽限期)
--stdin:从标准输入接收用户密码:echo "PASSWORD" | passwd --stdin USERNAME 注意,要想给其他用户设定密码,只有两种用户可行:一种是 root 用户;另一种是 root 通过 sudo 命令赋予权限的普通用户。也就是说,普通用户只能修改自己的密码,而不能设定其他用户的密码。
(7)修改用户属性:chage
chage [OPTION]... LOGIN
-d LAST_DAY 设定最近一次修改密码时间
-E, --expiredate EXPIRE_DATE 账户过期期限
-I, --inactive INACTIVE 非活动期限
-m, --mindays MIN_DAYS 密码最小使用天数
-M, --maxdays MAX_DAYS 密码最大使用天数
-W, --warndays WARN_DAYS 警告天数
示例: chage -d 0 tom 下次登录强制重设密码 chage -m 0 -M 42 -W 14 -I 7 tom chage -E 2016-09-10 tom
(8)组创建:groupadd
groupadd [OPTION]... group_name -g GID:指明GID号;[GID_MIN, GID_MAX] -r:创建系统组,ID号从500或1000开始递减创建
CentOS 6:ID<500
CentOS 7:ID<1000
(9)组属性修改:groupmod
groupmod [OPTION]... group
-n group_name:新名字
-g GID:新的GID
注意,用户名不要随意修改,组名和 GID 也不要随意修改,因为非常容易导致管理员逻辑混乱。如果非要修改用户名或组名,则建议大家先删除旧的,再建立新的。
(10)组删除:groupdel
groupdel GROUP
注意,要删除的组不能是其他用户的初始组,也就是说这个组中没有初始用户才可以删除。如果组中有附加用户,则删除组时不受影响。
(11)添加用户进组和组密码:gpasswd
gpasswd [OPTION] GROUP
-a username:将username添加至指定组中
-d username group:删除用户username的以当前组为组名的附加组
-A user1,user2,...:设置有管理权限的用户列表
注意,也可以使用usermod命令把用户加入某个组,不过usermod命令的操作对象是用户,命令是"usermod -G grouptest lamp",把用户名作为参数放在最后;而gpasswd命令的操作对象是组,命令是"gpasswd -a lamp grouptest",把组名作为参数放在最后。
newgrp 临时切换基本组
[root@localhost ~]# newgrp 组名
举个例子,我们已经有了普通用户lamp,默认会建立lamp用户组,lamp组是lamp用户的初始组。我们再把lamp用户加入group1组,那么group1组就是lamp用户的附加组。当lamp用户创建文件test1时,test1文件的属组是lamp组,因为lamp组是lamp用户的有效组。通过newgrp 命令就可以把lamp用户的有效组变成group1组,当lamp用户创建文件test2时,就会发test2 文件的属组就是group1组。
当用户属于多个组时,在创建文件时哪个组身份生效。使用 newgrp 命令可以在多个组身份之间切换。
如果用户本不属于此组,则需要组密码 groups username:查看用户属于什么组
(12)其它命令
chfn(修改用户详细信息相当于useradd -c)
chsh(改默认shell)