我想知道人们想出的任何解决方案,限制用户更改系统范围内的xscreensaver配置。我的部分工作是管理系统,这些系统要求桌面在大约10分钟内锁定,并且只能用密码解锁。我想使用一个屏幕保护程序,考虑到x屏幕保护程序非常安全,有一个成熟的代码库,这是一个合理的选择。
我在/etc/X11/app-defaults/XScreenSaver*中创建了适当的设置,但是问题是用户仍然可以通过运行xscreensaver或编辑~/.xscreensaver来更改他们的个人偏好。
据我所知,有一种简单的方法可以做到这一点:从/usr/bin/xscreensaver中删除可执行权限--演示,并将~/.xscreensaver的所有权更改为root。
如果这是唯一实用的方法,我将如何在用户初次登录时(在redhat和debian/ubuntu中)创建具有根所有权的~/..xscreensaver?
发布于 2015-03-10 00:36:50
看来这不太可能。最后,为了强制某些设置,我确实稍微修改了xscreensaver的源代码。我试着用最小的侵入性方法来完成这一点,只需对源代码进行最小的修改。这仍然允许用户配置屏幕保护程序的许多部分,而不是关于屏幕锁定和超时的部分。
在源树中找到文件驱动程序/prefs.c,并在其中查找函数write_init_file。在该函数中,可以找到以下几行:
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文件中配置的设置。
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的函数并更改行:
else if (s && !strcasecmp (s, "off")) p->mode = DONT_BLANK;至:
else if (s && !strcasecmp (s, "off")) p->mode = BLANK_ONLY;现在,找到正确命名的函数stop_the_insanity,它将一些首选项的值设置为正常值,例如超时>15秒将强制为15秒。这是一个很好的地方,以确保当用户手动编辑.xscreensaver文件而不是使用xscreensaver演示这些值不会被xscreensaver使用,但是我们的“理智”值将被使用。
在函数stop_the_insanity中添加类似的内容,如果需要,可以使用自己的值。注意,时间的值是秒*1000。在这种情况下,用户将模式设置为"off“,我们已经将其强制回到上面的空白状态。
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。但是,上述的改变使得没有必要这样做。
发布于 2015-03-10 03:15:59
如果用户的主目录位于本地磁盘上,或者托管在具有sudo/root权限的Linux NFS服务器上,则可以将每个~/..xscreensaver文件设置为“不可变”。
sudo chattr +i /home/username/.xscreensaver这将防止用户修改它,也不会删除/移动/重命名它。
参考资料:http://sattia.blogspot.com/2015/01/how-to-make-file-immutable-on-linux.html
https://serverfault.com/questions/672882
复制相似问题