Java c++;在爪哇
我发现了一个例子,说明了在用户的uid中基于pwd的用法 在java中,我有一个类似的需求,即作为需要这种实现的不同用户运行脚本 <> > C++中的代码片段如下:Java c++;在爪哇,java,c++,unix,pwd,Java,C++,Unix,Pwd,我发现了一个例子,说明了在用户的uid中基于pwd的用法 在java中,我有一个类似的需求,即作为需要这种实现的不同用户运行脚本 > C++中的代码片段如下: static void su(const char* user) { struct passwd* pwentry=getpwnam(user); if(!pwentry) COUT<<"su:getpwnam:couldnot get pwd entry for user %s",user;
static void su(const char* user)
{
struct passwd* pwentry=getpwnam(user);
if(!pwentry)
COUT<<"su:getpwnam:couldnot get pwd entry for user %s",user;
uid_t new_uid=pwentry->pw_uid;
struct passwd* pwentry_nmsadm=getpwnam("nmsadm");
if(!pwentry_nmsadm)
cout<<"su:getpwnam:could not get pwd for nmsadm");
gid_t new_gid=pwentry->pw_gid;
if(chdir(pwentry->pw_dir)<0)
cout<<"su:chdir";
uid_t current_uid=geteuid();
gid_t current_gid=getegid();
if(current_gid!=new_gid)
{
if(setgid(new_gid)<0)
cout<<"su:setgid";
}
if(current_uid!=new_uid)
{
if(setuid(new_uid)<0)
cout<<"su: setuid";
}
static void su(const char*user)
{
结构passwd*pwentry=getpwnam(用户);
如果(!pwentry)
COUTJava没有提供这种现成的功能,因为它既依赖于系统,又会破坏Java的安全概念
一些可能的解决办法可以是:
- 使用JNI包装器调用C++方法,这样您就可以在C++
中做所有需要的事情
- 使用
ssh
以不同的用户身份启动脚本
- 使用
sudo
以其他用户身份启动脚本
另见
- (特定于Windows,但有一个答案提到了JNI方法)
感谢您的指导,但我不能使用ssh或sudo,因为我无法将pwd传递给它们以执行所需的操作