linux中利用sudo命令、密码同时输入运行root权限的程序

在linux中,我们最常用的从普通用户切换root用户的命令有su、sudo命令

sudo systemctl start httpd
密码:<输入的密码不可见>

在输入sudo命令的时候,经常第一次需要输入密码,才能运行具有root权限的可执行程序。

由于sudo命令具有15分钟保存密码的功能,所以当在15分钟以内运行root权限的可执行程序是不需要重新输入密码的

(前提是同一个终端窗口)

先看下sudo命令操作选项

sudo - 以其他用户身份执行一条命令

usage: sudo -h | -K | -k | -V
usage: sudo -v [-AknS] [-g group] [-h host] [-p prompt] [-u user]
usage: sudo -l [-AknS] [-g group] [-h host] [-p prompt] [-U user] [-u user]
            [command]
usage: sudo [-AbEHknPS] [-r role] [-t type] [-C num] [-g group] [-h host] [-p
            prompt] [-u user] [VAR=value] [-i|-s] [<command>]
usage: sudo -e [-AknS] [-r role] [-t type] [-C num] [-g group] [-h host] [-p
            prompt] [-u user] file ...

选项:
  -A, --askpass               使用助手程序进行密码提示
  -b, --background            在后台运行命令
  -C, --close-from=num        关闭所有 >= num 的文件描述符
  -E, --preserve-env          在执行命令时保留用户环境
  -e, --edit                  编辑文件而非执行命令
  -g, --group=group           以指定的用户组或 ID 执行命令
  -H, --set-home              将 HOME 变量设为目标用户的主目录。
  -h, --help                  显示帮助消息并退出
  -h, --host=host             在主机上运行命令(如果插件支持)
  -i, --login                 以目标用户身份运行一个登录
                              shell;可同时指定一条命令
  -K, --remove-timestamp      完全移除时间戳文件
  -k, --reset-timestamp       无效的时间戳文件
  -l, --list                 
                              列出用户权限或检查某个特定命令;对于长格式,使用两次
  -n, --non-interactive       非交互模式,不提示
  -P, --preserve-groups      
                              保留组向量,而非设置为目标的组向量
  -p, --prompt=prompt         使用指定的密码提示
  -r, --role=role             以指定的角色创建 SELinux 安全环境
  -S, --stdin                 从标准输入读取密码
  -s, --shell                 以目标用户运行
                              shell;可同时指定一条命令
  -t, --type=type             以指定的类型创建 SELinux 安全环境
  -U, --other-user=user       在列表模式中显示用户的权限
  -u, --user=user             以指定用户或 ID
                              运行命令(或编辑文件)
  -V, --version               显示版本信息并退出
  -v, --validate              更新用户的时间戳而不执行命令
  --                          停止处理命令行参数

  -S, --stdin                 从标准输入读取密码

执行一个shell命令通常会自动打开三个标准文件,stdin(standard input)、stdout(standard output)、stderr(standard error)

标准输入文件 (stdin):通常对应终端的键盘

标准输出文件(stdout)以及标准错误输出文件(stderr),这两个文件都对应终端的屏幕

 

本人当前从事测试软件的开发工作,当我写个shell脚本,但是我是在终端上运行的这个脚本,在这个脚本中有几行代码

要运行具有root权限才能运行的可执行程序,下面这个方法就是针对于在普通用户权限下去运行带有root权限的命令或者

脚本程序。

这个就是利用管道的方法。将密码输入到stdin里,sudo命令就会从stdin里读取密码

echo 密码 | sudo -S 命令

echo "123456" | sudo -S systemctl start httpd

不过这段命令安全性不是很高,所以需要对其进行加密一下

 

 

Logo

更多推荐