rel*_*let 5 shell ssh apt repository
我正在尝试通过 ssh 设置一个私有存储库。我的sources.list.d/
包含条目
deb ssh://user@host:/repo ./
Run Code Online (Sandbox Code Playgroud)
user 是主机上的仅证书帐户。apt-get update
工作正常。
但是,我想限制对下载存储库的访问,即禁用外壳访问。如果我将用户 shell 设置为 rssh,仅允许 scp 和 sftp,则更新会中断。
来自/var/log/syslog
:
user user attempted to execute forbidden commands
command: /bin/sh
Run Code Online (Sandbox Code Playgroud)
为什么 apt 需要在存储库机器上访问 shell,有没有办法避免这种情况?
我注意到有一个 apt-transport-sftp 的 github 存储库,我可能会查看它,但为了用户方便,我宁愿坚持使用更常见的包。
你没有办法避免这种情况。
使用默认的 ssh 方法,apt
需要登录到远程服务器,调用/bin/sh
以获取 shell 访问权限,并使用一些 GNU 实用程序(例如find
, )进行一些工作dd
。
apt源代码证实了这一点:
157 Args[i++] = "/bin/sh";
158 Args[i] = 0;
159 execvp(Args[0],(char **)Args);
160 exit(100);
Run Code Online (Sandbox Code Playgroud)
(令人惊讶的是apt
仍然使用find
with-follow
选项,该选项标记为已弃用)