首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >限制用户更改xscreensaver设置

限制用户更改xscreensaver设置
EN

Server Fault用户
提问于 2015-03-04 02:05:22
回答 2查看 1.6K关注 0票数 1

我想知道人们想出的任何解决方案,限制用户更改系统范围内的xscreensaver配置。我的部分工作是管理系统,这些系统要求桌面在大约10分钟内锁定,并且只能用密码解锁。我想使用一个屏幕保护程序,考虑到x屏幕保护程序非常安全,有一个成熟的代码库,这是一个合理的选择。

我在/etc/X11/app-defaults/XScreenSaver*中创建了适当的设置,但是问题是用户仍然可以通过运行xscreensaver或编辑~/.xscreensaver来更改他们的个人偏好。

据我所知,有一种简单的方法可以做到这一点:从/usr/bin/xscreensaver中删除可执行权限--演示,并将~/.xscreensaver的所有权更改为root。

如果这是唯一实用的方法,我将如何在用户初次登录时(在redhat和debian/ubuntu中)创建具有根所有权的~/..xscreensaver?

EN

回答 2

Server Fault用户

回答已采纳

发布于 2015-03-10 00:36:50

看来这不太可能。最后,为了强制某些设置,我确实稍微修改了xscreensaver的源代码。我试着用最小的侵入性方法来完成这一点,只需对源代码进行最小的修改。这仍然允许用户配置屏幕保护程序的许多部分,而不是关于屏幕锁定和超时的部分。

在源树中找到文件驱动程序/prefs.c,并在其中查找函数write_init_file。在该函数中,可以找到以下几行:

代码语言:javascript
复制
if (!pr || !*pr)          ;
CHECK("timeout")          type = pref_time, t = p->timeout;
CHECK("cycle")            type = pref_time, t = p->cycle;
CHECK("lock")             type = pref_bool, b = p->lock_p;
CHECK("lockTimeout")      type = pref_time, t = p->lock_timeout;
(..)
CHECK("mode")             type = pref_str,
                          s = (p->mode == ONE_HACK ? "one" :
                               p->mode == BLANK_ONLY ? "blank" :
                               p->mode == DONT_BLANK ? "off" :
                               p->mode == RANDOM_HACKS_SAME
                               ? "random-same"
                               : "random");

并更改为类似于下面的源示例。这将防止将这些设置保存到用户主目录中的.xscreensaver文件中。然后,只要系统宽默认设置为任意设置,xscreensaver就会继续使用这些设置来代替在.xscreensaver文件中配置的设置。

代码语言:javascript
复制
if (!pr || !*pr)          ;
CHECK("timeout")          continue; /* don't save */
CHECK("cycle")            continue; /* don't save */
CHECK("lock")             continue; /* don't save */
CHECK("lockTimeout")      continue; /* don't save */
(..)
CHECK("mode")             type = pref_str,
                          s = (p->mode == ONE_HACK ? "one" :
                               p->mode == BLANK_ONLY ? "blank" :
                               p->mode == DONT_BLANK ? "blank" : /* prevents xscreensaver from being disabled, will force to blank */
                               p->mode == RANDOM_HACKS_SAME
                               ? "random-same"
                               : "random");

查找名为load_init_file的函数并更改行:

代码语言:javascript
复制
else if (s && !strcasecmp (s, "off"))         p->mode = DONT_BLANK;

至:

代码语言:javascript
复制
else if (s && !strcasecmp (s, "off"))         p->mode = BLANK_ONLY;

现在,找到正确命名的函数stop_the_insanity,它将一些首选项的值设置为正常值,例如超时>15秒将强制为15秒。这是一个很好的地方,以确保当用户手动编辑.xscreensaver文件而不是使用xscreensaver演示这些值不会被xscreensaver使用,但是我们的“理智”值将被使用。

在函数stop_the_insanity中添加类似的内容,如果需要,可以使用自己的值。注意,时间的值是秒*1000。在这种情况下,用户将模式设置为"off“,我们已经将其强制回到上面的空白状态。

代码语言:javascript
复制
if (p->timeout > 600000) p->timeout = 600000;
if (p->lock_timeout > 0) p->lock_timeout = 0;
if (! p->lock_p) p->lock_p = True;

关于在初次登录时创建具有根所有权的.xscreensaver,我认为这是不可能的,也是不可取的。您可以在/etc/profile.d中创建一个脚本,它将在用户登录时创建一个空的.xscreensaver。但是,上述的改变使得没有必要这样做。

票数 0
EN

Server Fault用户

发布于 2015-03-10 03:15:59

如果用户的主目录位于本地磁盘上,或者托管在具有sudo/root权限的Linux NFS服务器上,则可以将每个~/..xscreensaver文件设置为“不可变”。

代码语言:javascript
复制
sudo chattr +i /home/username/.xscreensaver

这将防止用户修改它,也不会删除/移动/重命名它。

参考资料:http://sattia.blogspot.com/2015/01/how-to-make-file-immutable-on-linux.html

票数 1
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/672882

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档