繁体   English   中英

Python扩展用户无法在Solaris和AIX上通过su工作

[英]Python expand user doesn't work over su on Solaris and AIX

我的脚本需要以root身份执行,对于某些任务,如someuser ,我还需要获取someuser $HOME路径,这就是问题所在。

对于该工作(查找用户主目录),我正在使用os.path.expanduser

如前所述,脚本需要使用su更改其用户并运行代码以使用户返回首页:

test_home.py

from os.path import expanduser

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

print user_home()

主脚本使用su调用test_home.py

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

很好。 但是对于AIX和Solaris,该脚本不会获取someuser $HOME ,而是获取root $HOME

AIX :以root用户身份执行

su someuser -c /tmp/test_home.py
/

Solaris :以root用户身份执行

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

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

  1. 红色的帽子
  2. SLES
  3. HP-UX
  4. 艾克斯
  5. 的Solaris
  6. 德比安

问题仅在AIX和Solaris上。 有谁知道为什么?

更新

--l使用login可以正常工作,但是我不能在脚本上使用su - 关于如何克服这一点的任何想法?

我试图不使用像上面这样的shell方法,但是我没有选择了

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

在使用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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM