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
不过这段命令安全性不是很高,所以需要对其进行加密一下