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

时间:2016-03-05 23:25:28

标签: python solaris aix su

我的脚本需要以let newString = (textField.text! as NSString).stringByReplacingCharactersInRange(range, withString: string)执行,对于某些任务root,我还需要获取someuser someuser路径,这就是问题所在。

对于那份工作(找到用户家),我使用$HOME

如上所述,脚本需要使用os.path.expanduser更改其用户并运行代码以使用户回家:

test_home.py

su

主脚本使用from os.path import expanduser def user_home(): home = expanduser("~") return home print user_home() 调用 test_home.py

su

非常好。但是对于AIX和Solaris,脚本没有# su someuser -c /tmp/test_home.py /home/someuser someuser,而是获得$HOME root

AIX :以root身份执行

$HOME

的Solaris :  以root身份执行

su someuser -c /tmp/test_home.py
/

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

  1. RedHat的
  2. SLES
  3. HP-UX
  4. AIX
  5. 的Solaris
  6. 的Debian
  7. 它只在AIX和Solaris上出现问题。有谁知道为什么?

    更新

    使用登录时su someuser -c /tmp/test_home.py shell-init: error retrieving current directory: getcwd: cannot access parent directories: Permission denied /root -有效,但我无法在我的脚本上使用-l。有关如何克服这个问题的任何想法吗?

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

    su -

2 个答案:

答案 0 :(得分:0)

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

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$

答案 1 :(得分:0)

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)