我正在尝试制作一个界面,以便更容易在屏幕上设置 ACL。设置 ACL 相当容易,但是,我找不到显示或转储现有 ACL 的方法。查看此列表的存档后,我发现我不是唯一一个遇到这种情况的人。但是,上一个问题关于这个问题似乎从来没有得到答复。
目前有没有办法在屏幕上看到现有的 ACL?更好的是,有没有办法将它们转储到文件/标准输出?
答案1
根据本指南介绍多用户屏幕,目前没有 Screen 内部 ACL 的接口。这与屏幕手册;既不是命令也不多用户会话部分提供任何其他与 ACL 相关的命令。以下是完整列表:
- 阿克拉德- 添加对所有窗口具有完全权限的用户。
- 離開- 添加具有更灵活权限的用户或更改现有用户的权限。
- 阿克德尔- 将用户从屏幕知识中移除。
- 访问控制组- 将用户添加到组或仅描述用户的组成员身份。
- 阿克拉马斯克- 为尚未创建的窗口设置默认权限。
- 清除- 与 Esc 类似,但为所有用户设置命令字符。
- 写锁- 为新窗口设置默认的写锁设置。
- 多用户- 启用或禁用多用户模式。
- 苏- 以不同的用户身份进行操作。
- 写锁- 为当前窗口设置写锁模式。
我不熟悉 Screen 的内部结构,但如果你想以这些命令允许的方式以外的方式访问 Screen ACL,你需要检查来源直接。您的项目听起来对 Screen 社区非常有益,所以我祝您实施顺利。
如果你看看src/acls.h
,你会看到结构aclusergroup
和acluser
;还有一个结构acl
在src/screen.h
。这些是基本的数据结构;看起来屏幕 ACL 本质上是一个aclusergroup
节点的链接列表,其中acluser
节点包含大多数有趣的数据。
src/acls.c
包含 ACL 操作代码;例如,acladd
和aclchg
命令都由函数处理UserAcl()
(第 864 行)。
该结构如下所示:
/* in screen.h */
struct acl
{
struct acl *next;
char *name;
};
/* in acls.h */
/*
* How a user joins a group.
* Here is the node to construct one list per user.
*/
struct aclusergroup
{
struct acluser *u; /* the user who borrows us his rights */
struct aclusergroup *next;
};
/* ... */
/*
* A User has a list of groups, and points to other users.
* users is the User entry of the session owner (creator)
* and anchors all other users. Add/Delete users there.
*/
typedef struct acluser
{
struct acluser *u_next; /* continue the main user list */
char u_name[20+1]; /* login name how he showed up */
char *u_password; /* his password (may be NullStr). */
int u_checkpassword; /* nonzero if this u_password is valid */
int u_detachwin; /* the window where he last detached */
int u_detachotherwin; /* window that was "other" when he detached */
int u_Esc, u_MetaEsc; /* the users screen escape character */
#ifdef COPY_PASTE
struct plop u_plop; /* internal copy-paste buffer */
#endif
#ifdef MULTIUSER
int u_id; /* a uniq index in the bitfields. */
AclBits u_umask_w_bits[ACL_BITS_PER_WIN]; /* his window create umask */
struct aclusergroup *u_group; /* linked list of pointers to other users */
#endif
} User;
使用 screen 进行编译时似乎包含了 ACL 代码MULTIUSER
(虽然我不确定它是在命令行还是在其他头文件中定义),因此搜索该关键字可以帮助您找到特定的多用户代码。