菜鸟笔记
提升您的技术认知

linux pkexec允许授权用户以其他身份执行程序

ubuntu官方开发网站 http://manpages.ubuntu.com/

pkexec命令(详细介绍见如下网址)
http://manpages.ubuntu.com/manpages/bionic/man1/pkexec.1.html
pkexec 以其他用户身份执行的命令

pkexec [--user username] PROGRAM [ARGUMENTS...]
pkexec允许授权用户以其他用户身份执行PROGRAM。如果用户名不是指定,则程序将以管理超级用户
root身份执行。

成功完成后,返回值就是PROGRAM的返回值。如果呼叫过程未授权或无法通过以下方式获得授权
认证或发生错误时,pkexec退出,返回值为127。由于用户关闭了身份验证对话框,因此无法获得授权,
pkexec退出,返回值为126。

以另一个用户身份执行程序是一项特权操作。默认情况下是必需的授权(请参阅“必需的授权”一节)
需要管理员身份验证。此外,将显示给用户的身份验证对话框要执行的程序的完整路径,
以便用户知道会发生什么:


jin@jin:~/work$ ls 
1.sh  2.sh  test.sh  zfcheck  zfcheck.tar.gz
jin@jin:~/work$ cat 1.sh 
#! /bin/bash
echo "hello,world"
jin@jin:~/work$ cat test.sh 
#! /bin/bash
pkexec /home/jin/work/1.sh
$(pwd)
jin@jin:~/work$ whoami
jin
jin@jin:~/work$ ./test (输入密码之后)
hello,world
./test.sh:行4: /home/jin/work: 是一个目录
jin@jin:~/work$ vim test.sh (修改一下如果使用的是相对路径./1.sh)
jin@jin:~/work$ ./test.sh (仍然需要输入密码,但是此时没有执行1.sh)
Error executing ./1.sh: No such file or directory
./test.sh:行4: /home/jin/work: 是一个目录
jin@jin:~/work$ su root
密码:
root@jin:/home/jin/work# ./test.sh 
hello,world
./test.sh:行4: /home/jin/work: 是一个目录
root@jin:/home/jin/work# 



可以看到我们现在是以普通用户创建了两个脚本,在test.sh中使用pkexec去调用全路径的1.sh脚本,会有系统默认的弹框出现输入root密码,如果是以相对路径的话不会成功。
当然,如果我们切换为root用户是不会有弹窗的,更不用说输入密码(x86_64方得,银河麒麟aarch64上测试)