目录
用户和组
用户账户
用户的家目录
组账号
创建用户背后发生了什么?
??小练习:# 截取第七字段并查找出几种
useradd命令
userdel -r 用户名 -->家目录和本地邮件目录全部删除
usermod命令
练习
passwd命令
group相关命令
selinux(security Linux)
关于用户与组的目录与文件
passwd与shadow
组相关文件
/etc/skel
用户默认属性设置文件
linux加密
拓展
who
su 与su - 的区别:
vsftpd服务与本地用户
ftp:文本传输协议
10000台机器如何管理?
练习
用户和组
用户 user -->登陆的人
组? group? -->组织
用户 -- 加入组 -- 继承权限
多个账户可以属于同一个组;一个用户可以加入多个组
为什么要引入这个用户和组?
1、安全性
2、权限管理
3、资源管控:文件的访问、读取、执行
为了对Linux系统里的资源进行管控? -- 谁能访问,谁不能访问
用户账户
[root@kafka01 usergroup]# id root
uid=0(root) gid=0(root) groups=0(root)
UID -- 每个用户的身份证号 --唯一
GID -- 每个组的标识? -- 唯一
?超级用户root(最高权限),超级用户root的UID为0
?程序用户,程序用户的UID1-1000
?普通用户,普通用户的UID大于等于1001
用户的家目录
默认情况下,创建用户时会在/home 目录下创建一个同名文件夹
UID_MIN????????????????? 1000? #普通用户uid最小为1000
UID_MAX???????????????? 60000
小练习:找出/etc/passwd里用户id大于或等于1000的用户名
[root@kafka01 sc3]# awk -F:'$3>=1000{print $1,$3}' /etc/passwd
组账号
主要组(私有组)
与用户相关的默认组,在/etc/passwd文件的第四个字段定义
次要组(附属组)
用户可以属于其他的组,在/etc/group文件的第四字段定义
用户的主要组的名称和GID相关
[root@kafka01 usergroup]# useradd chaochao
[root@kafka01 usergroup]# id chaochao
uid=1001(chaochao) gid=1001(chaochao) groups=1001(chaochao)
[root@kafka01 usergroup]# useradd sc1
[root@kafka01 usergroup]# id sc1
uid=1002(sc1) gid=1002(sc1) groups=1002(sc1)
创建用户背后发生了什么?
/etc/passwd -- 记录用户信息? 当用户登录的时候,会查看这个文件
一行记录一个用户
[root@kafka01 usergroup]# tail -3 /etc/passwd
mysql:x:27:27:MariaDB Server:/var/lib/mysql:/sbin/nologin
chaochao:x:1001:1001::/home/chaochao:/bin/bash
sc1:x:1002:1002::/home/sc1:/bin/bash
使用:进行分割
字段1:用户名
字段2:用户密码字段和密码占位符
字段3:用户id -->唯一,创建的普通用户uid都是在上一个用户的基础上+1
字段4:所属基本组的id -->用户在创建的时候默认会创建一个同名的组,这个组会成为用户的基本组 -g 可以指定
字段5:用户的描述信息‘-->默认是空 -c 可以指定
字段6:家目录 -d 可以指定
字段7:登录shell信息 -s 可以指定
?小练习:# 截取第七字段并查找出几种
sort先排序,让相同文本在一起,然后在做uniq去重(uniq去重只能去重挨在一起的相同项)
[root@kafka01 usergroup]# awk -F: '{print $7}' /etc/passwd|sort|uniq
/bin/bash? #普通的shell
/bin/false #禁止用户登录
/bin/sync? #内存的缓存同步到磁盘
/sbin/halt #
/sbin/nologin
/sbin/shutdown
useradd命令
格式:useradd? [选项]...? 用户名
常用命令选项
-u:指定 UID 标记号
-d:指定宿主目录,缺省为 /home/用户名
-e:指定帐号失效时间
-g:指定用户的基本组名(或GID号)
-G:指定用户的附加组名(或GID号)
-M:不为用户建立并初始化宿主目录
-s:指定用户的登录Shell
-c:用户注释描述信息
-r:?? 新建系统用户,不会有新建家目录
指定登录 -s
[root@sc usergroup]# useradd -s /sbin/nologin sc3?? #禁止登录
[root@sc usergroup]# tail -1 /etc/passwd
sc3:x:1063:1063::/home/sc3:/sbin/nologin
[root@sc usergroup]# echo 123456|passwd sc3 --stdin? #指定密码
更改用户 sc3 的密码 。
passwd:所有的身份验证令牌已经成功更新。
ssh? linux中远程登录命令? xshell
使用sc3用户 远程登录到主机
[root@sc usergroup]# ssh sc3@192.168.0.204 -p 2233
The authenticity of host '[192.168.0.204]:2233 ([192.168.0.204]:2233)' can't be established.
ECDSA key fingerprint is SHA256:JccgoJ9N7Tel3N/Zehpgraddu8nLaQUlepsJrQNX34c.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '[192.168.0.204]:2233' (ECDSA) to the list of known hosts.
sc3@192.168.0.204's password:
Connection closed by 192.168.0.204 port 2233
[root@sc usergroup]# su - sc3
This account is currently not available.
更改用户密码
[root@sc usergroup]# useradd -s /bin/false sc4
[root@sc usergroup]# echo 123456|passwd sc4 --stdin
passwd:所有的身份验证令牌已经成功更新。
[root@sc usergroup]# su - sc4
[root@sc usergroup]# ssh sc4@192.168.0.204 -p 2233
sc4@192.168.0.204's password:
Last login: Tue Aug? 3 11:23:46 2021
Connection to 192.168.0.204 closed.
?
-c 指定描述信息
[root@sc ~]# useradd -c "this is sc5" sc5
[root@sc ~]# tail -1 /etc/passwd
sc5:x:1065:1065:this is sc5:/home/sc5:/bin/bash
-d 指定家目录
[root@sc ~]# useradd -d /tmp/sc6 sc6
[root@sc ~]# tail -1 /etc/passwd
sc6:x:1066:1066::/tmp/sc6:/bin/bash
[root@sc ~]# su - sc6
[sc6@sc ~]$ pwd
/tmp/sc6
-g 指定组
[root@sc ~]# useradd -g sc1 sc7
[root@sc ~]# id sc7
uid=1067(sc7) gid=1061(sc1) 组=1061(sc1)
[root@sc ~]# tail -1 /etc/passwd
sc7:x:1067:1061::/home/sc7:/bin/bash
-u / --uid 指定用户创建id
#-u是短选项
#--uid是长选项
[root@sc ~]# useradd --uid 2000 sc8
[root@sc ~]# tail -1 /etc/passwd
sc8:x:2000:2000::/home/sc8:/bin/bash
-M 不为用户建立并初始化宿主目录
[root@kafka01 home]# useradd -M sc4
[root@kafka01 home]# cd /home
[root@kafka01 home]# ls
admin? chaochao? sc1? sc2? sc3
[root@kafka01 home]# tail -1 /etc/passwd
sc4:x:1005:1005::/home/sc4:/bin/bash
-e:指定帐号失效时间
[root@kafka01 usergroup]# useradd -e "2021-07-01" sc5
[root@kafka01 usergroup]# su - sc5
# 设置sc5密码
[root@kafka01 ~]# passwd sc5
Changing password for user sc5.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.
# 远程连接sc5
[root@kafka01 ~]# ssh sc5@172.26.41.201
The authenticity of host '172.26.41.201 (172.26.41.201)' can't be established.
ECDSA key fingerprint is SHA256:BVYuFBUnGylWL8m6WdJS/lO2N4DpkA8l4AGQsx0L6lw.
ECDSA key fingerprint is MD5:f5:3c:e3:98:ed:dd:d8:66:44:3e:41:e5:e9:d4:5f:2d.
Are you sure you want to continue connecting (yes/no)? ^[[A^[[D^[[C
Please type 'yes' or 'no': yes
Warning: Permanently added '172.26.41.201' (ECDSA) to the list of known hosts.
sc5@172.26.41.201's password:
Your account has expired; please contact your system administrator
Authentication failed.
-g和-G
-g:指定用户的基本组名(或GID号)
-G:指定用户的附加组名(或GID号)
[root@kafka01 ~]# useradd -g sc4 -G sc3,sc5 sc6
[root@kafka01 ~]# id sc6
uid=1007(sc6) gid=1005(sc4) groups=1005(sc4),1004(sc3),1006(sc5)
[root@kafka01 ~]# less /etc/group
sc1:x:1002:
sc2:x:1003:
sc3:x:1004:sc6
sc4:x:1005:
sc5:x:1006:sc6
userdel -r 用户名 -->家目录和本地邮件目录全部删除
[root@kafka01 usergroup]# cd /home
[root@kafka01 home]# ls
admin? chaochao? sc1? sc2? sc3? sc5? sc6
[root@kafka01 usergroup]# userdel -r sc6
[root@kafka01 usergroup]# cd /home
[root@kafka01 home]# ls
admin? chaochao? sc1? sc2? sc3? sc5
[root@kafka01 home]#
usermod命令
格式:usermod? [选项]...? 用户名
常用命令选项
-l:更改用户帐号的登录名称
[root@kafka01 home]# usermod -l sanchuang03 sc3
[root@kafka01 home]# ls
admin? chaochao? sc1? sc2? sc3? sc5
[root@kafka01 home]# tail -1 /etc/passwd
sanchuang03:x:1004:1004::/home/sc3:/bin/bash
[root@kafka01 home]#
-L:锁定用户账户
[root@kafka01 home]# usermod -L sc3
sc3:!!:18842:0:99999:7:::
# 账户锁定其实就是在密码前加一个!
# 这样的话在用户登录的时候就会出现密码不匹配
-U:解锁用户账户
[root@kafka01 home]# usermod -p 123456 sc3
[root@kafka01 home]# usermod -U sc3
[root@kafka01 home]# less /etc/shadow
sc3:123456:18843:0:99999:7:::
以下选项与useradd命令中的含义相同
?-u、-d、-e、-g、-G、-s
练习
1.编写创建sanchuang01-sanchuang25
2.编写批量删除sanchuang01-25,存在就删除不存在就输出不存在
创建:
方法一
[root@kafka01 usergroup]# cat sanchuang.sh
#!/bin/bash
?
for i in $(seq -w 1 25)
do
??? if id sanchuang$i &>/dev/null
??? then
??????? echo "sanchuang$i has exsted"
??? else
??????? useradd sanchuang$i
??????? echo "sanchuang$i 创建成功"
??? fi
done
方法二:
#!/bin/bash
id sanchuang$i? &>/dev/null && echo "用户sanchuang$i已存在" || useradd sanchuang$i
删除:
#!/bin/bash
?
for i in $(seq -w 1 20)
do
??? id sanchuang$i &>/dev/null && userdel -r sanchuang$i &? echo "sanchuang$i 已删除" || echo "sanchuang$i不存在"
done
passwd命令
格式:passwd? [选项]...? 用户名
常用命令选项
-d:清空用户的密码,使之无需密码就可以切换用户
-l:锁定用户帐号
-S:查看用户帐号的状态(是否被锁定)
-u:解锁用户帐号
--stdin:接收别的命令stdout做为stdin标准输入设置密码
root用户可以修改所有用户密码,不要求复杂性
普通用户只能改自己的密码,要求复杂性
[root@mysql-binary mail]# passwd sanchuang2
更改用户 sanchuang2 的密码 。
新的 密码:
无效的密码: 密码少于 8 个字符
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@mysql-binary mail]# passwd -l sanchuang2
锁定用户 sanchuang2 的密码 。
passwd: 操作成功
#usermod和passwd 锁定账户都是修改账户的shadow加密字段信息,使他们登陆的时候密码匹配不上,达到一个锁定状态
#usermod 加一个!
#passwd? 加两个!
group相关命令
groupadd 新建组
groupdel 删除组
[root@kafka01 ~]# groupadd -g 20001 g1
[root@kafka01 ~]# less /etc/group
[root@kafka01 ~]# tail -1 /etc/group
g1:x:20001:
[root@kafka01 ~]# groupdel g1
[root@kafka01 ~]# tail -1 /etc/group
sanchaung09:x:1036:
groupadd命令
格式:groupadd? [-g GID]? 组帐号名
groupdel命令
格式:groupdel? 组帐号名
[root@mysql-binary ~]# groupadd -g 5000 sanle
[root@mysql-binary ~]# less /etc/group
[root@mysql-binary ~]# groupdel sanle
[root@mysql-binary ~]# less /etc/group
groupmod命令
用途:设置组名和组id
格式:groupmod [选项]...? 组帐号名
常用命令选项
-n:修改组名
-g:修改组id
selinux(security Linux)
#linux系统里的一个安全程序
#有很多默认的规则
#比如说 useradd只能在/home创建家目录
# SELINUXTYPE= can take one of three values:
#???? targeted - Targeted processes are protected,
#???? minimum - Modification of targeted policy. Only selected processes are protected.
#???? mls - Multi Level Security protection.
SELINUXTYPE=targeted
?
#水至清则无鱼 -- 睁一只闭一只眼-? selinux-眼睛里容不得沙子
selinux 规则非常多且繁琐,日常工作中一般是关闭的
临时关闭
[sc6@sc ~]$ getenforce?? #获取selinux的状态
Disabled
[sc6@sc ~]$ setenforce 0? #临时设置成宽松状态 0-->临时关闭 1--->代表enforcing
setenforce: SELinux is disabled
永久关闭
[sc6@sc ~]$ vim /etc/selinux/config
SELINUX=disabled
服务器重启才会生效
关于用户与组的目录与文件
passwd与shadow
/etc/passwd 存放用户信息相关文件
/etc/shadow 存放用户密码相关文件
两个备份文件:/etc/passwd-? /etc/shadow-
组相关文件
/etc/group?? -->存放组信息的
/etc/gshadow -->存放组密码的
/etc/group- 和 /etc/gshadow- 备份文件?
/etc/skel
新建用户,复制到用户的家目录
-rw-r--r--.? 1 root root?? 18 Oct 31? 2018 .bash_logout
-rw-r--r--.? 1 root root? 193 Oct 31? 2018 .bash_profile
-rw-r--r--.? 1 root root? 231 Oct 31? 2018 .bashrc
以上三个文件就是三个脚本,三个脚本在特殊时间执行
.bash_logout 用户每次退出登录时执行
.bash_profile 用户每次登陆的时候执行 用于用户个性化环境配置
.bashrc? 用户每次进入新的环境时执行
# 家目录下配置这几个文件,只对当前用户生效
一般用于个性化设置
[sc1@kafka01 ~]$ ls -al
total 24
drwx------? 2 sc1? sc1? 4096 Aug? 4 16:49 .
drwxr-xr-x. 8 root root 4096 Aug? 4 16:23 ..
-rw-------? 1 sc1? sc1??? 44 Aug? 5 09:57 .bash_history
-rw-r--r--? 1 sc1? sc1??? 18 Oct 31? 2018 .bash_logout
-rw-r--r--? 1 sc1? sc1?? 193 Oct 31? 2018 .bash_profile
-rw-r--r--? 1 sc1? sc1?? 231 Oct 31? 2018 .bashrc
.bash_history 记录注销前使用的历史命令
用户默认属性设置文件
/etc/login.defs文件
对账户初始的属性设置
设置普通用户的UID和GID范围等
/etc/login.defs
PASS_MAX_DAYS?? 99999?? #密码默认过期天数
PASS_MIN_DAYS?? 0
PASS_MIN_LEN??? 5
PASS_WARN_AGE?? 7
linux加密
默认采用sha512算法
哈希算法(Hash) --》散列值求取
?? 把任意长度的输入,映射成固定长度的输出,该输出就是散列值
?? 是一种单向加密技术
hash 算法: md5? sha1? sha2? sha256 sha512
less /etc/shaodw
sc2:$6$hd8RxF9i$PpBk2kB7HVmllk8tODKgpQhVekIBWuxnSiS7LP1FxIb2Gsm8jIHb4HJebikz8WYuiJwJ9k2GRjI/dfQvUZ6p30:18842:0:99999:7:::
使用$分割为3个字段:
第一个字段6 表示sha512(哈希)算法
第二个字段 盐值
第三个字段 加密之后的散列值
密码字段: $加密算法id$盐值$真正的密文
加密底层使用内核的crypt函数实现
>>> import crypt
>>> crypt.crypt("123456","$6$hd8RxF9i")
'$6$hd8RxF9i$PpBk2kB7HVmllk8tODKgpQhVekIBWuxnSiS7LP1FxIb2Gsm8jIHb4HJebikz8WYuiJwJ9k2GRjI/dfQvUZ6p30'
>>>
拓展
who
查看本地登录用户和远程登陆用户
su 与su - 的区别:
[root@kafka01 usergroup]# su sc1
[sc1@kafka01 usergroup]$ pwd
/lianxi/usergroup
[sc1@kafka01 usergroup]$ exit
exit
[root@kafka01 usergroup]# su - sc1
Last login: Thu Aug? 5 09:56:17 CST 2021 on pts/0
[sc1@kafka01 ~]$ pwd
/home/sc1
su 切换用户,不切换用户环境,是不改变当前变量
su - 是切换到用户的变量
su只能获得root的执行权限,不能获得环境变量,而su - 是切换到root并获得root的环境变量及执行权限
vsftpd服务与本地用户
#ftp 是一个文件传输服务,主要用于上传和下载文件,实现文件共享
https://www.cnblogs.com/mikeguan/p/7118229.html
1、服务安装
? yum install? vsftpd
2、启动服务
? [root@mysql-binary xulilin]# service vsftpd restart
3、安装客户端
?? yum install lftp ftp -y? #这两个都是ftp的客户端
#centos8里vsftpd服务默认不允许匿名用户登陆
#使用匿名用户(ftp)登陆的话需要,修改/etc/vsftpd/vsftpd.conf里的配置
anonymous_enable=YES
修改完配置文件重启vsftpd服务
登陆上去之后,默认读取系统中ftp这个用户的家目录文件
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
ftp:文本传输协议
ftp常用命令:
上传文件:put
下载文件:get
查看: ls
切换路径:cd
[root@kafka01 sc3]# service vsftpd restart
Redirecting to /bin/systemctl restart vsftpd.service
[root@kafka01 sc3]# ftp 172.26.41.201
Connected to 172.26.41.201 (172.26.41.201).
220 (vsFTPd 3.0.2)
Name (172.26.41.201:root): ftp
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ^C
匿名用户和本地用户都可以登陆ftp服务,他们登陆进去之后只能操作家目录下的文件或者文件夹。
三种用户:
?1、匿名用户
?2、本地用户
?3、虚拟用户
10000台机器如何管理?
环境规范化? -- 操作系统统一、主机名规范
网络划分?
建立在基础设施规范的情况再实施自动化、监控化
练习
1、如何知道一个用户是否在linux系统里存在?
id或/etc/passwd
2、如何禁用一个用户登陆linux系统
usermod -L 锁定
usermod -e 设置失效时间
usermod -s /sbin/nologin (bin/false)
3、如何知道一个用户属于哪些组
id?
/etc/passwd?
/etc/group 第四个字段,展示哪些用户的附属组是这个组
4、如何知道哪些用户现在已经登录在linux里??哪些用户曾经登陆过linux系统?
# 登陆在linux系统
who w users
# 曾经登陆过
last lastlog
5、如何给用户重新设置密码
echo 密码|passwd 用户名
6、linux的root密码忘记了怎么办
进入单用户模式
1、开机,按任意键停住启动界面,然后选择对应的内核,按 e 进行编辑
2、找到root这一行,将ro换成rw?init=/sysroot/bin/bash
3、按 Ctrl-x,进入单用户模式
4、单用户模式下 chroot?/sysroot/
5、LANG=en,修改密码 echo “1234567”|passwd root --stdin或者输入passwd
7、如何将已经登录在系统里的用户踢出去?并且防止它再次登陆?
1.找到进程号(ps、who am i)并且杀掉这个进程号
[root@kafka01 ~]# w
?16:50:21 up 2 days,? 5:33,? 2 users,? load average: 0.00, 0.01, 0.05
USER???? TTY????? FROM???????????? LOGIN@?? IDLE?? JCPU?? PCPU WHAT
root???? pts/0??? 113.246.76.120?? 16:36??? 5.00s? 0.00s? 0.00s w
root???? pts/1??? 113.246.76.120?? 16:50??? 2.00s? 0.00s? 0.00s -bash
[root@kafka01 ~]# pkill -kill -t pts/1
pkill?可以kill掉指定伪终端
2.踢出可疑的root登录用户,马上修改密码
3.sshd—》/etc/hosts.deny hosts.allow -->ip
4./etc/ssh/sshd_config -->DenyUsers -->用户
8、怎么把普通用户变成root用户
①直接修改passwd文件 ,将用户的uid改成0,执行shutdown测试
②usermod -u 0 -o 用户名,要加-o选项,不然提示已存在。
9.创建目录/tech/cali和/tech/sanle,分别用于保存个项目组中用户帐号的宿主目录;
为两个项目组添加组帐号cali、sanle,GID号分别为1001、1002;为技术部添加组帐号tech,GID号为200;
添加2个用户,分别为b1、b2,要求他们的基本组是cali,附加组是tech,宿主目录均使用/tech/cali目录中与帐号同名的文件夹(例如b1用户的宿主目录/tech/cali/b1);其中b2用户帐号设置2012-12-31日后失效;
添加2个用户,分别为a1、a2,要求他们的基本组是sanle,附加组是tech;宿主目录均使用/tech/sanle目录中与帐号同名的文件夹(例如a1用户的宿主目录/tech/cali/a1)?;其中a2用户帐号登录的shell为/bin/ksh
所有新建用户密码都是123456;
[root@chaochao ~]# mkdir -p /tech/cali /tech/sanle
[root@chaochao ~]# groupadd -g 1001 /tech/cali
groupadd:“/tech/cali”不是有效的组名
[root@chaochao ~]# groupadd -g 1001 cali
groupadd:GID “1001”已经存在
[root@chaochao ~]# groupadd -g 1002 cali
[root@chaochao ~]# groupadd -g 1003 sanle
[root@chaochao ~]# groupadd -g 200 tech
[root@chaochao ~]# useradd -g cali -G tech -d /tech/cali/b1 b1
[root@chaochao ~]# useradd -g cali -G tech -d /tech/cali/b2 -e "2012-12-31" b2
[root@chaochao ~]# useradd -g sanle -G tech -d /tech/sanle/a1? a1
[root@chaochao ~]# useradd -g sanle -G tech -d /tech/sanle/a2 -s /bin/ksh a2
[root@chaochao ~]# echo 123456|passwd a1 --stdin
更改用户 a1 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@chaochao ~]# echo 123456|passwd a2 --stdin
更改用户 a2 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@chaochao ~]# echo 123456|passwd b1 --stdin
更改用户 b1 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@chaochao ~]# echo 123456|passwd b2 --stdin
更改用户 b2 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@chaochao ~]# less /etc/passwd
b1:x:1002:1002::/tech/cali/b1:/bin/bash
b2:x:1003:1002::/tech/cali/b2:/bin/bash
a1:x:1004:1003::/tech/sanle/a1:/bin/bash
a2:x:1005:1003::/tech/sanle/a2:/bin/ksh