目录
1.2.1、内核怎么识别用户是普通用户还是root用户呢(进程的组成)
1.3.1、使用命令"mkdir xxxx",这背后发生什么?
2.4.2、 /etc/passwd里是nologin的shell类型的用户
4.3.3、passwd -l + 用户名 和passwd -u + 用户名
4.4、passwd -l 和 usermod -L 的区别
6.2.1、gpasswd -a和usermod -G的区别
1、用户和用户组的关系
每个账户有一个唯一的UID;每个组也有一个唯一的GID,多个账户可以属于用一个组。
1.1、id
[root@fttsaxf menu]# id root
uid=0(root) gid=0(root) 组=0(root)
# uid是用户的id号,gid是组的id号。一个用户至少属于一个组,默认情况下用户组名和用户名同名
1.2、用户和组的用途
为linux系统里的资源管控服务的。资源管理:文件的访问、读取、执行等操作。
1.2.1、内核怎么识别用户是普通用户还是root用户呢(进程的组成)
进程=PCB+程序代码+程序产生的数据。
PCB是进程控制块(process control block),是一个数据结构,里边有pid号,ppid号、euid(有效的uid)、egid、程序代码在内存里的指针、优先级、程序的状态等信息。PCB是内核管控进程的唯一凭证。一般来说uid和euid是一样的。
如上边这个例子中:cali用户若想要对"/lianxi/a.txt"做修改,并不会被允许。因为kernel会检查这个申请修改的用户的euid和egid号,看是否有对这个文件的修改权限。若是没有,就会拒绝这个用户的申请。用户的身份会嵌入到进程里,内核对进程进行限制。
1.3、进程的状态
进程:是正在运行的程序("活得"),存在内存中。
程序:存在在磁盘里的代码("死"的)
1.3.1、使用命令"mkdir xxxx",这背后发生什么?
首先bash在磁盘里找到"mkdir",然后加载到内存中,申请空间,存放程序代码。又因为内核是管理进程的,所以内核会特意在内存中开一个空间(PCB)在记录有哪里进程。
可以把pcb理解为一个字典
1.3.2、进程最基本的状态(三态或者五态)
就绪状态(sleeping)、运行状态(running)、阻塞状态(stopped)
阻塞也是在内存中
在三态模型中,进程状态分为三个基本状态,即运行态,就绪态,阻塞态。在五态模型中,进程分为新建态、终止态,运行态,就绪态,阻塞态。
1.4、cpu的调度问题
FIFO:先进先出
加权调度
图片解释:左下角这些数字是权重
2、新建和删除用户
useradd,新建用户
userdel -r ,删除用户
[root@fttsaxf ~]# ls /etc/passwd*
/etc/passwd /etc/passwd-
[root@fttsaxf ~]# ls /etc/shadow*
/etc/shadow /etc/shadow-
[root@fttsaxf ~]# diff /etc/passwd /etc/passwd-
36d35
< dfjalsk:x:1013:1013::/home/dfjalsk:/bin/bash
# /etc/passwd,用来存放用户信息的;/etc/shadow,用来存放用户密码的。passwd和passwd-是有差别的。
/etc/shadow- 和 /etc/passwd- 是passwd和shadow的备份文件,总是和原文件少一次操作(可以是新建也可以是删除)
[root@fttsaxf ~]# userdel -r dfjalsk
[root@fttsaxf ~]# diff /etc/passwd /etc/passwd-
35a36
> dfjalsk:x:1013:1013::/home/dfjalsk:/bin/bash
2.1、/etc/passwd文件介绍
用途:用来保存用户账号的基本信息。
每一行对应一个用户的账号
[root@fttsaxf ~]# id fja
uid=1011(fja) gid=1011(fja) 组=1011(fja)
[root@fttsaxf ~]# cat /etc/passwd|tail -1
fja:x:1011:1011::/home/fja:/bin/bash # ":",这个是分隔符
# 默认情况下新建一个用户,会新建一个同名的组。uid和gid会在前一个用户的基础上+1,所以这个号码不会重复
小练习
# 查找出linux系统里的用户的uid大于1000的用户,显示出它的名字、uid、家目录和shell
[root@fttsaxf ~]# cat /etc/passwd|awk -F ":" '$3>1000 {print $1,$3,$6,$7}'
bangyou 1002 /home/bangyou /bin/bash
fdd 1003 /home/fdd /bin/bash
2.2、用户的shell类型
/sbin/nologin ,这个用户是不能够登录系统的,也就是说不能够用ssh登录
/bin/bash ,默认的用户shell,这个是正常的shell
/sbin/halt ,登录就关机
/bin/sync ,是将内存里的缓存刷新到磁盘里的
/sbin/shutdown,登陆就关机
2.2.1、更改用户的shell类型
useradd -s,指定新建用户的shell类型
usermod -s,更改已存在用户的shell类型
[root@fttsaxf ~]# useradd -s /sbin/nologin liuxing
[root@fttsaxf ~]# cat /etc/passwd | grep liuxing
liuxing:x:1012:1012::/home/liuxing:/sbin/nologin
[root@fttsaxf ~]# echo 123456|passwd liuxing --stdin # 给liuxing设置密码为123456
更改用户 liuxing 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@fttsaxf ~]# su - liuxing
上一次登录:三 2月 23 16:34:24 CST 2022pts/0 上
This account is currently not available.
[root@fttsaxf network-scripts]# cat /etc/passwd|grep xiaohui
xiaohui:x:7798:7797::/home/xiaohui:/sbin/nologin
[root@fttsaxf network-scripts]# usermod -s /bin/bash xiaohui
[root@fttsaxf network-scripts]# cat /etc/passwd|grep xiaohui
xiaohui:x:7798:7797::/home/xiaohui:/bin/bash
在另一台机子里使用
[root@fttsaxf ~]# ssh liuxing@xxx.xxx.xxx.xxx # 用另外一台机子登录liuxing用户
liuxing@xxx.xxx.xxx.xxx's password:
此账户目前不可用
Connection to xxx.xxx.xxx.xxx closed.
以上验证了,当一个用户的shell是/sbin/nologin的时候,是不能够登录系统的,su(本地切换登录)和ssh(远程登录)都不行。每次新建一个用户,其实就会在/etc/passwd文件的末尾追加一行用户的信息(一切皆文件的思想)
2.3、小练习
# 第一题
[root@fttsaxf ~]# cat /etc/passwd|awk -F ":" '$3>1000 && $1 ~ /ca/ && $7 ~ /bash/{print $1,$3,$7}'
caohx 1005 /bin/bash
califeng 1008 /bin/bash
cali123 1009 /bin/bash
# ~,内容匹配,模糊匹配
[root@fttsaxf ~]# cat /etc/passwd|egrep ".*ca.*bash"|awk -F ":" '$3>1000{print $1,$3,$7}'
caohx 1005 /bin/bash
califeng 1008 /bin/bash
cali123 1009 /bin/bash
# .* 在正则表达中代表任意字符
#第四题
ps aux ,静态查看
top,动态查看,q退出
2.4、用户的分类
只有UID为0的用户才是root用户,并不是看名字的。
普通用户就是我们用useradd建立的用户。超级用户是系统安装好就有的,不需要新建,默认只有一个超级用户。 程序用户:用来启动程序或者登陆程序的用户,用来实现功能的。
现在我们用的centos7,超级用户的UID为0、程序用户(System accounts)的UID为201~999、普通用户的UID大于等于1000。login.defs,这个文件中可以看到。
2.4.1、修改uid
在/etc/passwd中修改用户的uid为0
2.4.2、 /etc/passwd里是nologin的shell类型的用户
是不能够用ssh远程登陆系统的,但是并不代表不能够登录服务。
ssh方式登录的时候会去/etc/passwd文件里检查用户的shell,如果是nologin就不允许登录。ftp方式登陆的时候也会去/etc/passwd文件里检查用户,但是只是检查是否存在,不看shell是否是nologin
2.4.3、登录程序用户客户端
第一步:安装启动vsftpd服务
[root@fttsaxf ~]# yum install vsftpd -y
第二步:重启vsftpd服务
当出现拒绝连接的时候,使用"service vsftpd restart",重新启动这个服务就可以了。
第三步:安装客服端命令
[root@fttsaxf ~]# yum install ftp lftp -y
第四步: 清除防火墙规则
[root@fttsaxf ~]# iptables -F # 消除规则
[root@fttsaxf ~]# service firewalld stop 停止防火墙服务
第五步:登录
[root@fttsaxf ~]# cat /etc/passwd | grep ftp # 查看ftp
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
[root@fttsaxf ~]# ls /var/ftp
pub
2.4.4、ftp命令
其实大部分和linux命令是一样的,若是你不知道有哪些命令可以使用help
ftp ,这个用户是匿名用户,不需要输入密码的,就可以登录。可以不用本地用户。
本地用户:useradd新建的用户,登录需要密码
centos8里vsftp服务器默认不允许匿名登录(ftp登录),但是可以本地用户登录
若是想要在centos8中允许匿名用户登录的配置,该怎么做
第一步:修改配置文件
[root@fttsaxf ~]# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=yes # 将no修改为yes
第二步:刷新服务
[root@fttsaxf ~]# service vsftpd restart
2.4.5、使用ftp与windows传东西
我们可以在浏览器或者计算机里输入下面的地址
ftp://(你自己的ip地址)/
使用上边这个命令的时候一定要把"2.4.3、登录程序用户客户端",这些步骤都弄完才能在计算机里边输入这个命令。要把防火墙关闭,不然就会出现这种情况
下边是在计算机输入ftp的操作
3、useradd
3.1、useradd -g 和-G
-g 主要组(主业)
-G 次要组(副业)
3.2、userdel
删除用户
3.2.1、userdel -r
删除用户的时候,把用户的家目录和邮箱都删除。邮箱在"/var/spool/mail"里边
若是不使用"-r",则会出现如下结果
图片解释:主目录就是家目录。因为新建用户的时候,会在"/home/你的用户名"中存入你的用户名的一个文件夹和"/var/spool/mail/你的用户名"中存入你这个用户的邮件地址。所以直接只用userdel只是会把"/etc/passwd"中你要删除的这个用户的基本信息删除,并不会再"/home"和
"/var/spool/mail"中进行操作。所以再次新建这个用户名的普通用户的时候,就会提醒已经存在这个用户了。但是图中这个"hutianying"这个普通用户是之前创建的,我们后来又创建了一些用户的。所以就会出现再次新建这个用户的时候,提示用户已经存在。若是我们直接新建,然后再用userdel删除,再新建就不会有这个提示了。这一切都是与uid和gid有联系的。下面会讲到
例如,图片中的a.txt,在新建的时候会在磁盘上开辟一块空间存放在用户的属性信息。
当"hutianying"这个用户创建了a.txt这个文件的时候,a.txt这个文件就会显示,这个文件是1100的uid用户创建的,当把"hutianying"删掉之后,再创建一个用户,又把"1100"分配到新用户"cali",那么就会认为这个a.txt文件是Cali创建的。操作系统中只认UID
那么是否会删除这个用户在其他目录里新建的文件或者文件夹?
答案是不会的
图片解释:"zhangwuji6"是这个文件的创建者,当使用"userdel -r"命令后,这个用户就不存在了。但是这个在其他目录下的文件会残留下来,所以这个"3355"是"zhangwuji6"的UID号
3.2.2、文件系统
文件由目录项、inode、block组成。目录项由文件名和inode组成。用户的UID和GID等信息就存放在"inode" 里边。"inode"会根据UID去"/etc/passwd"里边查找是否有该UID的用户名,若是查到了,这个文件就会显示这个UID的用户名,若是没有查到,这个文件就会显示这个用户之前的UID。
3.3、useradd -d、-u、-s和-c
指定家目录、UID号、登录的shell和用户注释的描述信息
passwd里边放置的是主要组
4、usermod
格式:usermod [选项]...用户名
常用命令选项
4.1、usermod -U
修改用户UID。其实就是把"/etc/passwd"这个文件修改。
4.2、usermod -L
-L,lock。禁用用户,不能够使用ssh登录linux系统
其本质就是修改了"/etc/shadow"文件
4.2.1、如何知道一个用户是否设置密码?
"/etc/shadow"用于保存密码子串、密码有效期等信息。每一行对应一个用户的密码记录。
"!!","*",说明没有设置密码,要是后边有密文,就是说明该用户设置了密码。
图片解释:"*",是程序用户
使用usermod -L后,其实就是在密码字段前边加一个"!"。我们也可以自己去"/etc/shadow"里边手动修改
[root@fttsaxf ~]# cat /etc/shadow|grep fzt|awk -F ":" '{print $2}'
!$6$2kWPED2M$Qlfoo36Rd1EcGwc7rc0c7ro7Sx2SuPeLwPd1JXehYkLKIeDd/cFDyuoLPbZuHXO.QGLj7C4N8CUxzV.5Ddqcr1
4.2.2、 usermod -g + 用户组 + 用户名
更改用户的gid
4.3、passwd
图片解释:直接使用passwd + 用户名,这是交互式设密码。因为有密码复杂度检测,所以输入"12345",会提示密码少于8个字符,但是重新输入"12345",又可以设置成功。因为我们是root用户,仍然可以强制设置成功。
这是非交互式设置密码,写脚本使用比较好。
4.3.1、passwd -S + 用户名
查看账号密码状态
[root@fttsaxf ~]# useradd fdd
[root@fttsaxf ~]# cat /etc/shadow|tail -1
fdd:!!:19049:0:99999:7:::
[root@fttsaxf ~]# echo 123456|passwd fdd --stdin
更改用户 fdd 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@fttsaxf ~]# cat /etc/shadow|tail -1
fdd:$6$OkiM036g$7k6BcEjQJOungiVDKBYy0D4BsZx43MI.QL76nDlKauCpn2tt.6kAqOTP0KederI1C62OROlt7/GZ54IEgdnM91:19049:0:99999:7:::
[root@fttsaxf ~]# passwd -S fdd
fdd PS 2022-02-26 0 99999 7 -1 (密码已设置,使用 SHA512 算法。)
[root@fttsaxf ~]# usermod -L fdd
[root@fttsaxf ~]# passwd -S fdd
fdd LK 2022-02-26 0 99999 7 -1 (密码已被锁定。)
4.3.2、passwd -d + 用户名
清除密码,本质上就是在"shadow"文件里删除密码字段的内容
另外,空密码是不允许远程ssh登录的,但是可以本地登录。下图为本地登录(使用"exit"命令之后出现的画面)
下边是ssh登录尝试(不允许登录)
建议不要把用户密码清空
4.3.3、passwd -l + 用户名 和passwd -u + 用户名
[root@fttsaxf ~]# passwd -l fzt # 禁用
锁定用户 fzt 的密码 。
passwd: 操作成功
[root@fttsaxf ~]# cat /etc/shadow|grep fzt
fzt:!!$6$2kWPED2M$Qlfoo36Rd1EcGwc7rc0c7ro7Sx2SuPeLwPd1JXehYkLKIeDd/cFDyuoLPbZuHXO.QGLj7C4N8CUxzV.5Ddqcr1:19049:0:99999:7:::
[root@fttsaxf ~]# passwd -u fzt # 启用
解锁用户 fzt 的密码。
passwd: 操作成功
[root@fttsaxf ~]# cat /etc/shadow|grep fzt
fzt:$6$2kWPED2M$Qlfoo36Rd1EcGwc7rc0c7ro7Sx2SuPeLwPd1JXehYkLKIeDd/cFDyuoLPbZuHXO.QGLj7C4N8CUxzV.5Ddqcr1:19049:0:99999:7:::
4.4、passwd -l 和 usermod -L 的区别
在这个用户设置密码的前提下,"passwd -l"是在这个用户的密文的前边加一个"!";"usermod -L"是在这个用户的密文的前边加两个"!"。被禁用的用户不能够登录系统
4.5、用户和组的小练习
# 第一题
[root@fttsaxf ~]# groupadd nongda
[root@fttsaxf ~]# groupadd gongda
[root@fttsaxf ~]# groupadd wenli
# 第二题
[root@fttsaxf ~]# useradd -d /home/yueyang -s /sbin/nologin -u 7788 -g wenli -c "sanchuang student" chenlin
# 三四题以此类推
# 第五题
[root@fttsaxf ~]# echo 123456abc|passwd chenlin --stdin
更改用户 chenlin 的密码 。
passwd:所有的身份验证令牌已经成功更新。
# 第六题
[root@fttsaxf ~]# cat /etc/passwd|grep chenlin
chenlin:x:7788:1016:sanchuang student:/home/yueyang:/sbin/nologin
[root@fttsaxf ~]# id chenlin
uid=7788(chenlin) gid=1016(wenli) 组=1016(wenli)
# 第七题
[root@fttsaxf ~]# usermod -s /sbin/nologin zhangcz # 或者直接修改/etc/passwd文件,且只有root用户能够修改这个文件
# 第八题
[root@fttsaxf ~]# usermod -u 9900 -g gongda huangtao
# 第九题
[root@fttsaxf ~]# userdel -r zhangcz
# 第十题
[root@fttsaxf ~]# groupdel gongda
groupdell: 不能够移除用户"huangtao"的主组
# 如果某个用户的主要组属于gongda,这个组是不能够被删除的,除非没有用户属于gongda组,就可以删除。所以我们可以改变"huangtao"这个用户的主要组
5、/etc/shadow
/etc/passwd是用来存放用户信息的;/etc/shadow是用来存放密码的。
图片解释:
序号皆为对应的字段
- 用户名。
- 密码密文,如果为空表示不能使用密码登录系统。密文字段:$加密算法id$盐值$真正的密文
- 上次修改密码的天数(从1970年1月1日开始计算,到修改密码时的天数)
- 修改密码时间间隔的最短天数,在这段时间内不允许修改密码,如果是0,表示可以随时修改密码。
- 修改密码时间间隔的最长天数,超过这个天数后密码失效,系统将强制用户修改密码。例如,99999表示最长可以99999天不修改密码。
- 密码失效前多少天提示用户需要修改密码,上面例子中7表示密码失效前7天开始提示用户需要修改密码。
- 密码过期后多少天帐户将会被禁用。
- 帐户失效的日期,从1970年1月1日开始计算,超过这个日期,帐户将无法使用。
- 最后一项为保留字段,还没有被使用。
使用"chage + 用户名"可以修改指定用户的最短修改密码间隔、最长密码有效期、密码失效天数等信息。例如:
[root@fttsaxf ~]# chage fzt
正在为 fzt 修改年龄信息
请输入新值,或直接敲回车键以使用默认值
最小密码年龄 [0]:
最大密码年龄 [99999]:
最近一次密码修改时间 (YYYY-MM-DD) [2022-02-26]:
密码过期警告 [7]:
密码失效 [-1]:
帐户过期时间 (YYYY-MM-DD) [-1]:
5.1、用户登录的时候,到底是如何验证用户名和密码的呢?
登录的时候输入密码,经过SHA512加密之后得到密文,然后与"/etc/shadow"里这个用户的密文作比较,如果一样就是登录成功。 光得到密文并不能够得到这个用户的密码。
# SHA512这是centos7里的哈希加密算法,用来的密码字符串
[root@fttsaxf ~]# cat /etc/login.defs |grep ENCRYPT
ENCRYPT_METHOD SHA512
Hash,是把任意长度的输入(又叫做预映射pre-image)通过散列算法变成固定长度的输出,该输出就是散列值。
密码字段:$加密算法id$盐值$真正的密文,加密底层使用内核的crypt函数实现
5.2、批量添加用户脚本(shell和python实现)
"""
编写一个脚本,批量添加20个用户,用户名例如:user01到user20,用户名的密码是user+5个随机的字符,将用户名和密码保存到一个文件,文件为/lianxi/username_passwd.txt,保存格式如下:
user01 --》userabcd3
user02 --》userhjcd9
"""
###########随机取数的模块(python)实现################
>>> import string
>>> string.printable
'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~ \t\n\r\x0b\x0c'
>>> string.ascii_letters
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
>>> string.digits
'0123456789'
######################
#!/bin/bash
>username_passwd.txt
# 20个用户
for i in $(seq -w 20)
do
if id user$i >/dev/null ;then
echo "user$1 exists"
else
# 新家用户
useradd user$1
# 获得密码
r_strings=echo user$1|md5sum|cut -c -5
# 拼接密码字符串,然后给用户设置密码
echo user$r_strings|passwd user$i --stdin &>/dev/null
echo "user$i user$r_strings " >>username_passwd.txt
fi
done
############################
# python中实现运行shell命令的代码
import subprocess
import random
# 我们可以核心代码用shell写,然后用python来运行
subprocess.run("bash creat_userv2.sh",shell=True)
#####随机生成一串字符,并且随机取n个数###########
>>> import string
>>> str = string.printable
>>> import random
>>> random.choices(str,k=5)
['t', '1', '2', 'v', '#']
>>> ''.join(random.choices(str,k=5))
'c(z]f'
######################在linux中使用python的代码
import subprocess
import random
import string
def add_user(num):
#输入判断
if (isinstance(num, str) and num.isdigit()) or isinstance(num, int):
num = int(num)
else:
raise ValueError('num参数必须是合法整数!')
with open('username_passwd','a+',encoding='utf-8') as f:
for i in range(num):
username = f"user{i}"
# 随机从字符串中取5个字符,然后拼接
passwd = f'user{"".join(random.choices(string.printable, k=5))}'
subprocess.run('useradd %s &>/dev/null' % username,shell=True)
subprocess.run('echo %s | passwd --stdin %s &>/dev/null' % (passwd,username), shell=True)
f.write(f'用户:{username} 密码:{passwd}\n')
num = input('请输入需要的数量:')
add_user(num)
#####################
5.2.1、subprocess的返回值
>>> a = subprocess.run('mkdir abc',shell=True)
>>> a.returncode
0
>>> a = subprocess.run('mkdir abc',shell=True)
mkdir: 无法创建目录"abc": 文件已存在
>>> a.returncode
1
6、组
存放在"/etc/group"
组账号:1、主要组(私有组),放在"/etc/passwd"文件的第四个字段定义;2、次要组(附属组),放在"/etc/group"文件的第四个字段
图片解释:-G,指定次要组
6.1、有效组
有效组:新建文件或者文件夹的时候使用的gid,gid使用的哪个组,哪个组就是有效组。
切换有效组(newgrp),用户只有属于多个组才能够切换,且用户只能够有一个有效组,gid对应的组。
🍓[查看组中有哪些成员]🍓
[root@fttsaxf script]# cat group_member.sh
#!/bin/bash
group_name=$1
# $3和$4这个组的gid和它为附属组的成员
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
6.2、gpasswd
6.2.1、gpasswd -a和usermod -G的区别
gpasswd可以将一个用户添加到很多组里,usermod只能是一个次要组,不能很多次要组
6.3、/etc/login.defs 文件
对帐户初始的属性设置,设置普通用户的UID和GID范围等
了解即可,一般不用修改这个文件。
# 下面是挑选出一些内容进行讲解
#QMAIL_DIR Maildir # 定义用户的邮箱位置
MAIL_DIR /var/spool/mail
"""
定义了一些东西,定义了邮箱,密码日期,长度等;是否创建家目录;密码加密的算法;删除用户的时候,如果对应的组没有成员了,将这个组也删除。
"""
6.4、总结练习
#第一题:
[root@fttsaxf ~]# groupadd mingjiao
[root@fttsaxf ~]# groupadd tiandihui
#第二题:
[root@fttsaxf ~]# gpasswd -a zhangwuji mingjiao
正在将用户“zhangwuji”加入到“mingjiao”组中
[root@fttsaxf ~]# id zhangwuji
uid=7789(zhangwuji) gid=7789(zhangwuji) 组=7789(zhangwuji),1017(mingjiao)
#第三题:
#第四题:
[root@fttsaxf ~]# useradd linghuchong -g mingjiao -G tiandihui
[root@fttsaxf ~]# id linghuchong
uid=7790(linghuchong) gid=1017(mingjiao) 组=1017(mingjiao),1018(tiandihui)
#第五题:
#⭐⭐任何字符串在单引号中都是只是一个符号,没有特殊作用,"!"有特殊作用。
[root@fttsaxf ~]# echo '123!@cali' | passwd linghuchong --stdin
更改用户 linghuchong 的密码 。
passwd:所有的身份验证令牌已经成功更新。
#第六题:
#第七题:
/etc/shadow第二个字段前边加"!";或者修改/etc/passwd为文件,将这个用户的shell改为/sbin/nologin
#第八题:
#第九题:
#第十题:
#直接修改/etc/passwd文件,或者usermod —U
#第十一题:
id()
#第十二题:
# 首先需要新建gaibnag组,指定gid为600 ————》group -g 600 gaibang
# 还要新建 mkdir /hongqigong 父目录,因为taohuadao需要新建在这个目录下,如果父目录不存在会报错,导致新建的用户没有家目录
[root@fttsaxf ~]# useradd qiaofeng -c "qiaobang master" -s