一. 练习
1.1 如何知道一个用户是否在linux系统里存在?
1 2 3
| 1、如何知道一个用户是否在linux系统里存在? cat /etc/passwd 或者 id命令
|
1.2 如何禁用一个用户登陆linux系统
1 2 3
| 2、如何禁用一个用户登陆linux系统 使用usermod -L 锁定用户 usermod -s /sbin/nologin root
|
1.3 如何知道一个用户属于哪些组
1 2 3 4
| 3、如何知道一个用户属于哪些组 使用id命令查看 使用groups命令查看 查看/etc/group里用户所属的组
|
1.4 如何知道哪些用户现在已经登录在linux里? 哪些用户曾经登陆过linux系统?
1 2 3 4 5 6 7 8 9 10 11 12 13
| 4、如何知道哪些用户现在已经登录在linux里? 哪些用户曾经登陆过linux系统? 使用w命令查看用户登录情况 使用last命令查看曾经登录过的用户 示例:w who 看当前登录的用户
[root@localhost ~] 09:37:40 up 8:32, 5 users, load average: 0.00, 0.01, 0.05 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root tty1 四09 6:28 0.09s 0.09s -bash root pts/3 192.168.136.1 09:29 4.00s 0.05s 0.03s w [root@localhost ~] root tty1 2020-11-05 09:31 root pts/3 2020-11-06 09:29 (192.168.136.1)
|
1.5 如何给用户重新设置密码
1.6 linux的root密码忘记了怎么办
1 2 3 4 5 6 7
| 6、linux的root密码忘记了怎么办 进入单用户模式 1、开机,按任意键停住启动界面,然后选择对应的内核,按 e 进行编辑 2、找到linux16这一行,在最后输入 rd.break 3、按 Ctrl-x 启动,然后按照以下操作破解 root 密码 示例:忘记root用户密码怎么办? 答:进入单用户模式
|
https://blog.csdn.net/qq_37960324/article/details/84589565
https://www.cnblogs.com/jsjrj01/p/10301603.htm
1.7 如何将已经登录在系统里的用户踢出去?并且防止它再次登陆?
1 2 3 4
| 7、如何将已经登录在系统里的用户踢出去?并且防止它再次登陆? 1.踢出可疑的root登录用户,马上修改密码 2.sshd---》/etc/hosts.deny hosts.allow -->ip 3./etc/ssh/sshd_config -->DenyUsers -->用户
|
1.8 怎么把普通用户变成root用户
1 2 3
| 8、怎么把普通用户变成root用户 1.(不推荐)修改 /etc/passwd 文件,找到要修改的普通用户,把用户ID修改为 0 2.sudo 权限
|
1.9
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| · 创建目录/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;
1、mkdir -p /tech/cali /tech/sanle 2、groupadd -g 1001 cali groupadd -g 1002 sanle groupadd -g 200 tech 3、useradd -g cali -G tech -d /tech/cali/b1 b1 useradd -g cali -G tech -d /tech/cali/b2 -e 2020-11-6 b2 4、useradd -g sanle -G tech -d /tech/sanle/a100 a1 useradd -g sable -G tech -d /tech/sanle/a200 -s /bin/ksh a2 5、echo 123456|passwd a1 --stdin echo 123456|passwd a2 --stdin ---------------------------------------------------------------- 示例:过期账户不能登录 ----------------------------------------------------------------------------------------------------------- [root@sanchuang-linux ~] [root@sanchuang-linux ~] [sanle3@sanchuang-linux ~]$
|
二. /etc/group文件
/etc/group文件
#注:/etc 存放配置文件的地方
/etc/group文件 # 注:可以查看哪些账户的次要组是
组帐号:
GID:(Group Identify,组标识号)
Linux组帐号
与用户相关的默认组,在/etc/passwd文件的第四个字段定义
用户可以同时属于其他的组,在/etc/group文件的第四个字段定义
用户的主要组的名称和GID相关
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152
| 示例 --------------------------------------------------------------------------------------------------------------------------------- [root@sanchuang-linux ~] [root@sanchuang-linux ~] [root@sanchuang-linux ~] [root@sanchuang-linux ~] sanchuang4:x:1100:sanchuang13 sanchuang5:x:1200:sanchuang10,sanchuang12
=========================================================================================================== 示例:怎样查看一个组里有哪些用户 ---------------------------------------------------------------------------------------------------------------------------------
[root@sanchuang-linux ~] 1200 sanchuang10,sanchuang12 [root@sanchuang-linux ~] 1200 sanchuang10,sanchuang12 -------------------------------------------------------------------------------------------- [root@sanchuang-linux ~]
group_name=$1
group_msg=`awk -F: -v group_awk=$group_name '$1==group_awk{print $3,$4}' /etc/group` echo $group_msg [root@sanchuang-linux ~] 1200 sanchuang10,sanchuang12 -------------------------------------------------------------------------------------------- [root@sanchuang-linux ~] [root@sanchuang-linux ~] [root@sanchuang-linux ~] [root@sanchuang-linux ~] 1200 [root@sanchuang-linux ~] 1200[@] [root@sanchuang-linux ~] 1200 sanchuang10,sanchuang12 [root@sanchuang-linux ~] 2 [root@sanchuang-linux ~] 4 [root@sanchuang-linux ~] 1200 [root@sanchuang-linux ~] sanchuang10,sanchuang12 ----------------------------------------- group_name=$1
group_msg=`awk -F: -v group_awk=$group_name '$1==group_awk{print $3,$4}' /etc/group`
group_lst=($group_msg) group_id=${group_lst[0]} group_user_1=${group_lst[1]} -------------------------------------------------------------------------------------------- [root@sanchuang-linux ~]
group_name=$1
group_msg=`awk -F: -v group_awk=$group_name '$1==group_awk{print $3,$4}' /etc/group`
group_lst=($group_msg) group_id=${group_lst[0]} group_user_1=${group_lst[1]}
group_user_2=`awk -F: -v group_id=$group_id '$4==group_id{print $1}' /etc/passwd|tr "\n" ","` echo $group_user_2$group_user_1 [root@sanchuang-linux ~] sanchuang13,sanchuang10,sanchuang12 -------------------------------------------------------- [root@sanchuang-linux ~] sanchuang13:x:1034:1200::/home/sanchuang13:/bin/bash =========================================================================================================== 总结:查看组中有哪些成员
https://blog.csdn.net/imzoer/article/details/8738581 [root@sanchuang-linux ~]
group_name=$1 group_msg=`awk -F: -v group_awk=$group_name '$1==group_awk{print $3,$4}' /etc/group` group_lst=($group_msg) group_id=${group_lst[0]} group_user_1=${group_lst[1]} group_user_2=`awk -F: -v group_id=$group_id '$4==group_id{print $1}' /etc/passwd| tr "\n" ","` echo $group_user_2$group_user_1 [root@sanchuang-linux ~] sanchuang13,sanchuang10,sanchuang12
-------------------------------------------------------------------------------------------- 命令行 [root@sanchuang-linux ~] sanchuang5:x:1200:sanchuang10,sanchuang12 [root@sanchuang-linux ~] 1200 [root@sanchuang-linux ~] 1200 sanchuang10,sanchuang12 [root@sanchuang-linux ~] sanchuang13 group_user_2=`awk -F: -v group_id=$group_id '$4==group_id{print $1}' /etc/passwd| tr "\n" ","`
-------------------------------------------------------------------------------------------- 字符串截取 [root@sanchuang-linux ~] [root@sanchuang-linux ~] 1200 [root@sanchuang-linux ~] sanchuang10,sanchuang12 [root@sanchuang-linux ~] sanchuang10,sanchuang12 [root@sanchuang-linux ~] 1200 --------------------------- 字符串截取:
line=`head -n1 /etc/passwd` echo "字符串为:$line" echo '字符串为:$line' echo "截取前4个字符:" echo ${line:0:4} echo "截取后9个字符:" echo ${line:0-9} echo "从倒数第九个字符开始截取4个字符" echo ${line:0-9:4} echo "从左向右截取最后一个:后的字符" echo ${line##*:} echo "从左向右截取第一个:后的字符" echo ${line#*:} echo "从右向左截取最后一个:后的字符" echo ${line%%:*} echo "从右向左截取第一个:后的字符" echo ${line%:*} echo "字符串长度" echo ${#line} -------------------------------------------------------------------------------------------- for循环获取 [root@sanchuang-linux lianxi] result=`awk -F: '$1=="sanchuang5"{print $3,$4}' /etc/group` for i in $result do echo $i done [root@sanchuang-linux lianxi] 1200 sanchuang10,sanchuang12 [root@sanchuang-linux ~] ------------------------------------------------------------ [root@sanchuang-linux ~] 1200 sanchuang10,sanchuang12
|
三. group操作
3.1 groupadd groupdel
groupadd命令
格式:groupadd [-g GID] 组帐号名
groupdel命令
格式:groupdel 组帐号名
1 2 3 4 5 6 7
| 示例:groupadd groupdel -------------------------------------------------------------------------------------------- [root@sanchuang-linux ~] [root@sanchuang-linux ~] sanle:x:5000: [root@sanchuang-linux ~] [root@sanchuang-linux ~]
|
3.2 groupmod newgrp
groupmod命令
用途:设置组名和组id
格式:groupmod [选项]... 组帐号名
常用命令选项
newgrp改变有效组
有效组:(用的很少)
新建文件或者文件夹的时候,使用的gid
gid使用哪个组,哪个就是有效组
当前用户新建文件或者文件夹的时候,默认使用的gid对应的组 就是有效组
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| 示例:newgrp改变有效组 -------------------------------------------------------------------------------------------- [root@sanchuang-linux lianxi] -rw-r--r--. 1 root root 86 9月 25 14:23 abcd.txt -rw-r--r--. 1 root root 158 9月 25 09:47 backup_log.sh
--------------------------------------------------- [root@sanchuang-linux lianxi] [root@sanchuang-linux lianxi] [root@sanchuang-linux lianxi] -rw-r--r-- 1 root sanchuang4 0 11月 6 11:25 bb --------------------------------------------------- [root@sanchuang-linux lianxi] [root@sanchuang-linux lianxi] [sanchuang10@sanchuang-linux ~]$ ll 总用量 0 -rw-r--r-- 1 sanchuang10 sanchuang4 0 11月 6 11:27 cc [sanchuang10@sanchuang-linux ~]$ newgrp sanchuang 密码: newgrp: failed to crypt password with previous salt: 无效的参数
|
3.3 Linux组帐号
Linux组帐号
与用户相关的默认组,在/etc/passwd文件的第四个字段定义
用户可以同时属于其他的组,在/etc/group文件的第四个字段定义
用户的主要组的名称和GID相关
四. gpasswd命令
gpasswd命令
用途:设置组帐号密码(极少用)、添加/删除组成员
格式:gpasswd [选项]... 组帐号名
1 2 3 4 5 6 7 8 9 10 11 12
| 示例:删除组成员root -------------------------------------------------------------------------------------------- [root@localhost ~] 正在将用户“root”从“market”组中删除
示例:设置组账号密码 -------------------------------------------------------------------------------------------- [root@sanchuang-linux ~] 正在修改 sanchuang 组的密码 新密码: 请重新输入新密码: [root@sanchuang-linux ~]
|
五. linux加密
Linux加密
默认采用sha512算法
采用哈希算法–》散列值求取
把任意长度的输入,映射成固定长度的输出,该输出就是散列值
是一种单向加密技术
hash算法:md5 sha1 sha2 sha256 sha512
如何判定密码正确?
# 注:把输入的密码用同样的方式进行加密,再判定输入的密文和文件里的密文是否一致
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| 示例:md5sum -------------------------------------------------------------------------------------------- [root@sanchuang-linux ~] f447b20a7fcbf53a5d5be013ea0b15af - [root@sanchuang-linux ~] bcdd6694d1ece311bd7bd668da54b9b9 - [root@sanchuang-linux ~] 7373d8394616d74ba2c42402266ae3aa -
[root@sanchuang-linux tmp] 816ba8dd29e68f3450d8748096227d42 douban [root@sanchuang-linux tmp] 9a44802fc09e1b84dc94740c40aa6450 sucai8
示例:撞库 加盐 --------------------------------------------------------------------------------------------
[root@sanchuang-linux ~] f447b20a7fcbf53a5d5be013ea0b15af - [root@sanchuang-linux ~] f447b20a7fcbf53a5d5be013ea0b15af -
[root@sanchuang-linux ~] 15465f7aa2929cca95ed7efb97ffeba0 -
示例 -------------------------------------------------------------------------------------------- root:$6$i4J5vzOUIMpchLRj$nTCbYWgA5cpv34Set6R2ZmC1AYYHGHnQafNbA9fkFsTR0E9GG1BJP5o3OTMuC4kGUqsomCI/G8FdEVELI/aeq0::0:99999:7:::
密码字段:$加密算法id$盐值$真正的密文 加密底层使用内核的crypt函数实现
python实现(sha512) >>> import crypt >>> crypt.crypt('123456','$6$i4J5vzOUIMpchLRj') '$6$i4J5vzOUIMpchLRj$nTCbYWgA5cpv34Set6R2ZmC1AYYHGHnQafNbA9fkFsTR0E9GG1BJP5o3OTMuC4kGUqsomCI/G8FdEVELI/aeq0' ----------------------------------------- $6 代表sha512算法 $i4J5vzOUIMpchLRj 盐值 $nTCbYWgA5cpv……aeq0 真正的密文
哈希算法用途:用来判定文件md5值是否改变
|
六. /etc/login.defs文件
/etc/login.defs文件
对账户初始的属性设置
设置普通用户的UID和GID范围等
1 2 3 4 5 6 7 8
| 示例 [root@sanchuang-linux ~] MAIL_DIR /var/spool/mail PASS_MAX_DAYS 99999 PASS_MIN_DAYS 0 PASS_MIN_LEN 5 PASS_WARN_AGE 7 UID_MIN 1000
|
七. useradd命令在后台到底做了哪些工作?
useradd命令在后台到底做了哪些工作?
![](https://cdn.jsdmirror.com/npm/mycpen-blog@0.0.0-eiatuounvz/img/loading.png)
八. /etc/skel/*文件
*/etc/skel/文件
主要控制用户初始配置文件
登陆的时候:
.bash_profile
~/.bash_profile --> ~/.bashrc --> /etc/bashrc
进入新bash环境:
~/.bashrc --> /etc/bashrc
--------------------------------------------------------------------------------------------
#注:登录的时候都会执行 .bash_profile
#注:登录的时候都会执行 .bashrc # 注:.bash_profile里面调用了.bashrc
#注:登录的时候 先执行.bash_profile,.bash_profile里面调用了.bashrc
#注:进入了一个新的bash环境,执行.bashrc
#注:到新bash环境下,执行了.bashrc,不执行.bash_profile。登录时执行.bash_profile
用户环境设置
#注:/etc/bashrc 系统用户的环境设置,别名设置,其他的函数
/etc/bashrc 相当于全局配置,此文件只能root用户修改 # 注:/etc/bashrc 只有root用户才能修改
~/.bashrc 个人配置,个性化配置,自己家目录下有权限修改 # 注:家目录下的.bashrc文件
/etc/profile 系统全局用户环境配置
~/.bash_profile 个人配置
原因:
全局配置,影响所有用户。
家目录下配置,影响当前用户。
/etc/目录下的环境配置修改,属于全局配置,家目录下属于个人用户配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| 示例:家目录下配置 -------------------------------------------------------------------------------------------- [root@sanchuang-linux ~]
if [ -f /etc/bashrc ]; then . /etc/bashrc fi PATH=$PATH:$HOME/bin
export PATH
[root@localhost ~]
alias rm='rm -i' alias cp='cp -i' alias mv='mv -i' if [ -f /etc/bashrc ]; then . /etc/bashrc fi [root@sanchuang-linux ~] alias ls='ls --color=auto' /usr/bin/ls
============================================================================================ 示例:/etc/skel/*文件
[root@sanchuang-linux ~] [root@sanchuang-linux skel] 总用量 24 drwxr-xr-x. 2 root root 62 9月 16 13:23 . drwxr-xr-x. 90 root root 8192 11月 6 15:15 .. -rw-r--r--. 1 root root 18 11月 9 2019 .bash_logout -rw-r--r--. 1 root root 141 11月 9 2019 .bash_profile -rw-r--r--. 1 root root 312 11月 9 2019 .bashrc
============================================================================================ 示例:.bash_history 记录存放上次注销前使用的历史命令 .bash_history 存放当前用户的命令历史,第一次登录用户,操作命令的时候,不会生成此文件 第一次登陆退出后会自动将内存里的历史记录写到.bash_history文件里
[root@sanchuang-linux ~]
[root@sanchuang-linux ~]
|
九. 每次登录或退出sanchuang的时候,打印日志到/tmp/sanchuang_log
每次登录或退出sanchuang的时候,打印日志到/tmp/sanchuang_log
1 2 3 4 5 6 7 8 9
| 步骤 1.在sanchuang用户下,修改.bash_profile文件,添加 now_date=`date` echo $now_date"login..." >> /tmp/sanchuang_log 2.在sanchuang用户下,修改.bash_logout文件,添加 now_date=`date` echo $now_date"logout..." >> /tmp/sanchuang_log 3.监控文件变化,新增末尾行 $ tail -f /tmp/sanchuang_log
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| 示例 -------------------------------------------------------------------------------------------- [root@sanchuang-linux log] 上一次登录:五 11月 6 14:59:23 CST 2020pts/1 上 [sanchuang@sanchuang-linux ~]$ vim ~/.bash_profile now_date=`date` echo $now_date"login..." >> /tmp/sanchuang_log [sanchuang@sanchuang-linux ~]$ tail -f /tmp/sanchuang_log 2020年 11月 06日 星期五 15:05:26 CSTlogin... [sanchuang@sanchuang-linux ~]$ vim ~/.bash_logout now_date=`date` echo $now_date"logout..." >> /tmp/sanchuang_log [sanchuang@sanchuang-linux ~]$ tail -f /tmp/sanchuang_log 2020年 11月 06日 星期五 15:05:26 CSTlogin... 2020年 11月 06日 星期五 15:07:33 CSTlogout...
|
十. Shell启动配置文件的区别
Shell启动配置文件的区别
/etc/profile: 配置全局环境变量,影响所有用户
~/.bash_profile : 配置个人环境,影响一个用户
/etc/bashrc : 配置全局的别名或者shell选项,影响所有用户
**~/.bashrc **: 配置个人别名或者shell选项,影响一个用户
十一. .bash_history
.bash_history
存放当前用户的命令历史,第一次登录用户,操作命令的时候,不会生成此文件
第一次登陆退出后会自动将内存里的历史记录写到.bash_history文件里
十二. bash的启动脚本初始化
bash的启动脚本初始化
![](https://cdn.jsdmirror.com/npm/mycpen-blog@0.0.0-eiatuounvz/img/loading.png)
![](https://cdn.jsdmirror.com/npm/mycpen-blog@0.0.0-eiatuounvz/img/loading.png)
十三. 用户和组账户查询
用户和组账户查询
id命令
who、w、users命令
groups命令
last、lastlog命令使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| 示例:w who -------------------------------------------------------------------------------------------- [root@sanchuang-linux ~] 15:26:24 up 6:11, 6 users, load average: 0.00, 0.01, 0.05 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root tty1 - 四15 58:07 0.07s 0.07s -bash root pts/0 192.168.0.42 14:28 0.00s 0.18s 0.01s w root pts/1 192.168.0.42 14:28 12:24 0.07s 0.01s -bash
-------------------------------------------------------------- [root@sanchuang-linux ~] root tty1 2020-11-05 15:13 root pts/0 2020-11-06 14:28 (192.168.0.42) root pts/1 2020-11-06 14:28 (192.168.0.42) ------------------------------------------------------------------ [root@sanchuang-linux ~] root root root root root root --------------------------------------------------------------------------------- [root@sanchuang-linux ~] sanchuang10 : sanchuang4 sanchuang5 [root@sanchuang-linux ~] uid=1032(sanchuang10) gid=1100(sanchuang4) 组=1100(sanchuang4),1200(sanchuang5) -------------------------------------------------------------------------------- [root@sanchuang-linux ~] root tty1 Wed Sep 16 13:41 - 13:41 (00:00) root pts/0 192.168.136.1 Wed Sep 16 13:29 - 13:40 (00:11) reboot system boot 4.18.0-193.el8.x Wed Sep 16 13:26 - 13:42 (00:15) [root@sanchuang-linux ~] 用户名 端口 来自 最后登陆时间 root pts/0 五 11月 6 15:18:46 +0800 2020 bin **从未登录过** shutdown **从未登录过**
|
十四. 终端设备名称
终端设备名称
名称 设备
ttyn 虚拟控制台
pts/n 伪终端
:0 X服务器