当su到ssh会话中的另一个用户时,Android常规用户登录会丢失组信息

时间:2013-01-17 07:04:23

标签: android ssh su

我在做什么:

  • 我已经在手机上构建了本机使用的GNU emacs。
  • 我在手机上以守护进程模式运行emacs,所以我随时使用emacsclient连接到它,继续使用常规文件,运行进程等。
  • 从手机终端登录时,我现在是用户10157,一切正常:

    $ id

    uid = 10157(10157)gid = 10157(10157) 基团= 10157(10157),1015(1015),1023(1023),1028(1028),3003(3003)

  • 当我通过ssh通过电脑连接手机(我在手机上使用DigiSSHd)时,它会以普通用户10282身份登录,一切正常:

    $ id

    uid = 10282 gid = 10282组= 1015(1015),1023(1023),1028(1028),3003(3003)

Emacs运行正常等。但是,这样我就无法通过emacsclient连接到在用户10157下运行的emacs进程。这是可取的,因为我不想启动两个emacs进程,因为我想继续工作我在用户10157下的emacs中打开的文件。

因此: $ su - 10157

很好,我可以运行emacs等。但是,我无法访问网站。

$ ping -c1 google.com
You must have internet permissions to use ping.  Aborting.
$ id

uid=10157(10157) gid=10157(10157) groups=10157(10157)

因此,除了其他团体之外,我不再是3003组,这是互联网接入所必需的。

为什么这个组信息被剥离了,我该如何解决这个问题,所以我可以在ssh下作为这个用户继续访问网页?

4 个答案:

答案 0 :(得分:4)

当我运行命令时:

busybox --list

我没有在列表中看到su。

su --help

在帮助文本中显示Superuser.apk。这意味着超级用户应用程序提供了 su

我按照您描述的步骤操作,我可以作为其他用户使用,并且仍然具有互联网权限,如下所示。

terminal

enter image description here

我安装了以下应用程序。

  • BusyBox v1.18.5-Stericson
  • 超级用户v3.0.7
  • 终端仿真器v1.0.45
  • SSHDroid v1.9.6

建议: 我认为问题出在您的设备上。你可以试试这个。 https://play.google.com/store/apps/details?id=com.noshufou.android.su

如果我只使用adb shell而不运行SSHDroid仍然可以作为另一个具有互联网权限的用户使用。

enter image description here

注意:BusyBox id命令不会始终显示组信息。

enter image description here

答案 1 :(得分:2)

根据su的标准手册页(来自linux盒子)

  

当使用 - 时,必须将其指定为最后一个su选项。其他形式(-l和--login)没有此限制。

基于此,尝试

$ su 10157 -

答案 2 :(得分:0)

我可能在这里遗漏了一些东西,因为这似乎太明显但为什么不只是'sudo -u 10157'你的emacs程序?

您仍然可以访问网络并且您的emacs将正常运行。还是我错过了重要的事情?

答案 3 :(得分:0)

权限不是可以通过su -继承的环境变量。

此外,gid是hard coded,安装后无法更改它们与每个APP uid的关联。

10157 应该是 DigiSSHd 应用的uid,因此您可以在更改AndroidManifest.xml后尝试重建它以要求正确的{{3} }。

您可以找到有用的内容permissionhere

同样适用于 BusyBox (请参阅here)。

但是,您可以通过此类应用程序启用NETWORK访问来打开一些安全漏洞。