题目要求
让普通用户使用sudo命令编写一个脚本,脚本内容如下:
(1)新建一个名为 test 的用户,设置默认 shell 为 /bin/sh,默认 home 目录为 /tmp/test,默认组为 mail,同时设置密码为123456。
(2)校验以上设置是否成功。
注意:脚本要分别在本地和云端成功运行。
编程平台
本地
本地操作系统:Windows 10
本地虚拟机运行平台:VMware Workstation Pro 14
本地虚拟机镜像:CentOS-7-x86_64-Minimal-1908.iso
云端
云服务器提供商:阿里云计算有限公司
Linux发行版本及版本号:CentOS 7.6 64位
代码实现
#! /bin/bash
# 设置环节
# 新建用户并设置默认shell、默认home目录和默认组
sudo useradd -s /bin/sh -d /tmp/test -g mail test
# 设置用户密码
echo 123456 | sudo passwd test_201727010619 --stdin
# 校验环节
# 查看/etc/passwd中是否有符合条件的用户名、home目录和shell信息,并记录结果到ush
ush=`cat /etc/passwd | cut -d: -f1,6,7 | grep 'test:/tmp/test:/bin/sh' | wc -l`
# 查看是否有符合条件的默认组信息,并记录结果到gro
gro=`sudo groups test | grep mail | wc -l`
# 查看是否能用密码123456登录新建用户
get_user(){ # 定义切换用户函数,用于使用密码登陆待检测用户
su - test << EOF
${test_pwd} # 输入密码
whoami # 查看当前用户名
EOF
}
test_pwd=123456 # test用户的登陆密码
user=`get_user > /dev/null` # 执行切换函数,并保存返回的字符串信息
pass=0 # 记录密码检查结果
if [[ ${user} =~ "test" ]];then # 判断是否能成功登陆test用户,即查看get_user函数中whoami的返回值是否为test
pass=1
fi
# 检查三个校验变量是否都为1,是则说明校验通过
if [ $ush -eq 1 -a $gro -eq 1 -a $pass -eq 1 ];then
echo 1
else
echo 0
fi
如果文章内容出错或者您有更好的解决方法,欢迎到评论区指正和讨论!