Python扩展用户不能在Solaris和AIX上使用su

2024-06-28 02:04:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我的脚本需要以root的形式执行,对于someuser这样的一些任务,我还需要获得someuser$HOME路径,这就是问题所在。你知道吗

对于那个作业(find user home),我使用os.path.expanduser。你知道吗

如前所述,脚本需要使用su更改他的用户,并运行代码将用户带回家:

试验_主页.py你知道吗

from os.path import expanduser

def user_home():
    home = expanduser("~")
    return home

print user_home()

主脚本调用测试_主页.pysu

# su someuser -c /tmp/test_home.py
/home/someuser

非常好。但是对于AIX和Solaris,脚本不会得到someuser$HOME,而是得到root$HOME。你知道吗

AIX:以根用户身份执行

su someuser -c /tmp/test_home.py
/

Solaris: 以根用户身份执行

su someuser -c /tmp/test_home.py
shell-init: error retrieving current directory: getcwd: cannot access parent directories: Permission denied
/root

我已经在几个发行版上测试了此代码:

  1. 红帽
  2. 系统性红斑狼疮
  3. HP-UX公司
  4. 艾克斯
  5. Solaris系统
  6. 德比安

问题是它只在AIX和Solaris上。有人知道为什么吗?你知道吗

更新

使用带有--l的login可以工作,但是我不能在脚本上使用su -。有没有想过如何克服这个问题?你知道吗

我试着不使用上面提到的shell方法,但是我已经没有选择了

cat /etc/passwd | grep someuser | cut -d: -f 6


Tags: 用户pytest脚本homeosroottmp
2条回答

我也遇到了同样的问题,在使用sudo或su之后,它给了根主目录,我用下面的方法修复了这个问题:

akjha-mn2:~ akjha$ python test1
/Users/akjha
akjha-mn2:~ akjha$ sudo python test1
Password:
/Users/akjha
akjha-mn2:~ akjha$ cat test1
#!/bin/env python
import os
user1=os.getlogin()
home=os.path.expanduser("~{0}".format(user1))
print home
akjha-mn2:~ akjha$
import socket
import os
import time
import sys
import pwd


###############################################################################
# Set uid and gid
###############################################################################

def set_uid_gid( uid, gid ):
    os.setgid(gid)
    os.setuid(uid)
###############################################################################
# Set effective uid and gid
###############################################################################
def set_effective_uid_gid( uid, gid ):
    os.setegid(gid)
    os.seteuid(uid)

###############################################################################
# Get uid and gid
###############################################################################

def get_uid_gid():
    uid = os.getuid()
    gid = os.getgid()
    return( uid, gid )
###############################################################################
def get_euid_egid():
    uid = os.geteuid()
    gid = os.getegid()
    return( uid, gid )

###############################################################################
def get_uid_gid_for_user( username):
    pwd_obj = pwd.getpwnam(username)
    uid = pwd_obj.pw_uid
    gid = pwd_obj.pw_gid
    return( uid, gid)

#Switch to <SOMEUSER>
def switch_user():
    (original_uid , original_gid) = get_uid_gid()
    (analyst_uid , analyst_gid) = get_uid_gid_for_user("<SOMEUSER>")
    set_effective_uid_gid(analyst_uid ,analyst_gid)
    os.system('python run_this_script,py')
    #Switch back to root/original
    set_uid_gid(original_uid , original_gid)

相关问题 更多 >