Shell脚本 中运行sudo命令

在shell脚本中有时需要使用sudo进行提权,运行包含这类脚本的文件时通常需要我们在终端输入sudo密码,但是在一些无人值守的应用中显然就不太适合了。本文通过构建一个多用户的ubuntu操作环境,来展示脚本中需要使用sudo命令时的应用场景。

我们都知道在linux的多用户下,用户之间是不能相互访问彼此的家目录的,如果要想访问其他用户的家目录必须使用sudo命令来提权。首先我在A用户的家目录下新建了一个脚本文件,我想使用这个脚本文件列出用户B家目录。

使用adduser命令新建一个测试用户,在ubuntu中推荐大家使用adduser命令,而不是useradd命令。

adduser tom

执行上述命令后,在终端会以非常友好的提示帮助我们新建一个用户。
在这里插入图片描述
通过上述命令新建用户后,重启系统,用刚刚新建的用户登录系统。如果新建用户而未重启系统登录的话该用户的家目录是没有子目录的,只有重启登录后才会建全该用户家目录下的子目录。

接下来我们在当前用户目录下新建一个测试脚本文件,这个脚本用来列出新建用户tom的家目录。

vim ~/test.sh

使用vim命令新建一个test.sh文件,添加以下内容。

#!/bin/bash

sudo ls -l /home/tom

在这里插入图片描述
test.sh脚本文件赋可执行权限。

sudo chmod +x test.sh

在这里插入图片描述
新打开一个终端,执行test.sh脚本文件(注意要新开一个终端)。

在这里插入图片描述
你会发现终端停留在输入sudo密码界面了,如果我们脚本中包含提权才能进行的命令的话这种脚本会卡在输入密码这一步上,需要手动输入sudo密码脚本才能往下执行,这当然不是我们希望的,如果想让非root用户不输入密码就能执行sudo命令的话需要修改/etc/sudoers文件。

首先修改/etc/sudoer属性,添加可写属性(以下命令在root用户下执行)。

chmod 640 /etc/sudoers

sudoers文件的最后一行添加以下内容。

alfiy     ALL=(ALL) NOPASSWD: /usr/bin/ls

在这里插入图片描述
修改完成后,保存退出,同时为了系统安全需要将sudoers文件的属性重新改成440.

在这里插入图片描述
新开一个终端,执行test.sh脚本,你会发现脚本不会卡在输入密码那里了。
在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

alfiy

欢迎请博主喝瓶矿泉水

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值