当 su 到 ssh 会话中的另一个用户时,Android 常规用户登录会丢失组信息
Posted
技术标签:
【中文标题】当 su 到 ssh 会话中的另一个用户时,Android 常规用户登录会丢失组信息【英文标题】:Android regular user login loses group information when su to another user in an ssh session 【发布时间】:2012-12-31 16:17:51 【问题描述】:我在做什么:
我已经构建了 GNU emacs 以在手机上本地使用。 我在手机上以守护程序模式运行 emacs,因此我随时使用 emacsclient 连接到它,以继续处理常规文件、运行进程等。从手机终端登录时,我目前是用户10157,一切正常:
$ id
uid=10157(10157) gid=10157(10157) 组=10157(10157),1015(1015),1023(1023),1028(1028),3003(3003)
当我通过 ssh 从 PC 连接到手机时(我在手机上使用 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 下 su 作为这个用户时,我可以继续访问网络?
【问题讨论】:
#justsaying 多么巧合:“27ca8cd Merge “ping: remove group check” by Nick Kralevich - 14 天前”android.googlesource.com/platform/external/ping 我很确定问题出在您的超级用户应用程序上。检查我的答案。 @mcandre 而不是 I'm pretty sure it's a problem in the AndroidManifest. 【参考方案1】:当我运行命令时:
busybox --list
我在列表中没有看到 su。
su --help
在帮助文本中显示 Superuser.apk。这意味着 su 由超级用户应用程序提供。
我按照您描述的步骤操作,我可以作为另一个用户使用,并且仍然拥有互联网权限,如下所示。
我安装了以下应用程序。
BusyBox v1.18.5-Stericson 超级用户 v3.0.7 终端模拟器 v1.0.45 SSHDroid v1.9.6建议: 我认为问题出在您设备上的 su 上。你可以试试这个。 https://play.google.com/store/apps/details?id=com.noshufou.android.su
如果我只使用 adb shell 而不运行 SSHDroid,我仍然可以作为另一个具有 Internet 权限的用户。
注意:BusyBox id 命令并不总是显示组信息。
【讨论】:
@mcandre 我可以确认这一点。su
二进制文件可以在 /system/bin/su
或 /system/xbin/su
中找到,它不是 BusyBox 的一部分。您从哪里获得您的 su
- Superuser、SuperSu 或其他?
@appsroxcom 是的,我正在使用来自 Superuser 应用程序的 su
。您能否提供一个使用用户名而不是 ID 的示例?
@appsroxcom 再看看你的截图。缺少组。像这样。 i.imgur.com/9hSXwQe.png当我su - <sameuser>
时,我失去了这些群体。
@mcandre,没关系。但是当你 su - 根据su
的标准手册页(来自 linux 机器)
使用 - 时,必须将其指定为最后一个 su 选项。其他形式(-l 和 --login)没有这个限制。
基于此,试试
$ su 10157 -
【讨论】:
在我的设置中,我什至没有使用su -
,我使用的是su someuser
。
您需要使用-
来“提供与用户直接登录时所期望的环境相似的环境。”
BusyBox su -l u0_a41
删除我手机上的群组,su u0_a41 -
也是如此。【参考方案3】:
我可能在这里遗漏了一些东西,因为这似乎太明显了,但为什么不只是 'sudo -u 10157' 你的 emacs 程序呢?
您仍然可以访问网络,并且您的 emacs 可以正常工作。还是我错过了什么重要的事情?
【讨论】:
我需要保留家长的组权限,否则我将无法访问 SD 卡。可悲的是,BusyBoxsu
正在 Android 中删除组权限。【参考方案4】:
权限不是可以通过su -
继承的环境变量。
另外,gid为hard coded,安装后无法更改与各个APP uid的关联。
10157 应该是 DigiSSHd 应用程序的 uid,因此您可以在将 AndroidManifest.xml 更改为需要正确的 permission 后尝试重建它。
您可以找到有用的东西here 和here。
BusyBox 也应如此(请参阅here)。
但是,您可以通过通过此类应用程序启用 NETWORK 访问来打开一些安全漏洞。
【讨论】:
以上是关于当 su 到 ssh 会话中的另一个用户时,Android 常规用户登录会丢失组信息的主要内容,如果未能解决你的问题,请参考以下文章
用ssh远程登录服务器时,怎么直接以root用户登录?(需要修改配置,如果不想修改,可以先用普通用户登录再su切换到root用户)