小编Iva*_*vic的帖子

fstab中nodev和nosuid的解释

当有人描述如何挂载 tmpfs 或 ramfs 时,我经常在网上看到这两个选项。通常也使用 noexec,但我对 nodev 和 nosuid 特别感兴趣。我基本上讨厌在没有真正理解的情况下盲目地重复某人的建议。而且由于我只在网上看到有关此的复制/粘贴说明,因此我在这里询问。

这是来自文档:
nodev - 不要解释文件系统上的块特殊设备。
nosuid - 阻止 suid 和 sgid 位的操作。

但我想要一个实际的解释,如果我把这两个排除在外会发生什么。假设我已经配置了 tmpfs 或 ramfs(没有设置这两个提到的选项),系统上的特定(非 root)用户可以访问(读+写)。该用户可以做什么来损害系统?排除在 ramfs 的情况下消耗所有可用系统内存的情况

security linux fstab

61
推荐指数
1
解决办法
13万
查看次数

ramfs 和 tmpfs 之间的性能差异

我需要为大约 10 GB 的数据设置一个内存存储系统,其中包含许多 100 kb 的单个文件(图像)。将会有大量的读取和相当周期性的写入(添加新文件,删除一些旧文件)。
现在,我知道tmpfs 的行为就像一个常规文件系统,例如,您可以使用df检查空闲/已用空间,这是一个很好的功能。但是,我感兴趣的是ramfs是否会在 IO 操作的速度方面提供一些优势。我知道在使用ramfs时我无法控制消耗的内存大小,并且如果它完全消耗可用 RAM,我的系统可能会挂起,但这在这种情况下不会成为问题。

总而言之,我感兴趣:
- 性能方面,哪个更快:ramfstmpfs(可能是为什么)?
- tmpfs 什么时候使用交换空间?它是否将已保存的数据移动到交换(为当前正在运行的其他程序释放 RAM)或仅在那时没有可用 RAM 时才移动新数据?

linux performance filesystems ramdisk tmpfs

29
推荐指数
3
解决办法
3万
查看次数

以其他用户身份启动脚本

我在 /etc/init.d/ 中创建了一个脚本,它必须从其他(非 root 特权)用户的主目录运行其他几个脚本,就好像他们启动了它们一样。

我使用以下命令启动这些脚本: sudo -b -u <username> <script_of_a_particular_user>

它有效。但是对于继续运行的每个用户脚本(例如一些看门狗),我看到一个相应的父 sudo 进程,仍然活着并以 root 身份运行。这会在活动进程列表中造成混乱。

所以我的问题是:如何从现有的 bash 脚本中以另一个用户身份启动(fork)另一个脚本并将其保留为孤立(独立)进程?

更详细的解释:
我基本上是想为机器上的其他用户提供一种在系统启动或系统关闭时运行东西的方法,方法是运行在其主目录中的各个子目录中找到的可执行文件,名为 .startUp 和 .shutDown。由于我没有找到任何其他方法来做到这一点,因此我编写了完全执行此操作的 bash 脚本,并且已将其配置为 /etc/init.d/ 中的服务脚本(按照框架示例),因此当它运行时使用 start 参数启动 .startUp 目录中的所有内容,当使用 stop 参数运行时,它启动所有用户的 .shutDown 目录中的所有内容。

或者,如果我可以使用一些现有的解决方案来解决这个问题,我也很感兴趣。

更新
我环顾了一下,发现了这个问题:https : //unix.stackexchange.com/questions/22478/detach-a-daemon-using-sudo

那里接受的答案,使用:sudo -u user sh -c "daemon & disown %1",对我有用。但我也试过没有拒绝 %1,结果是一样的。所以这就是我所期望的:

sudo -u <username> bash -c "<script_of_a_particular_user> &"
Run Code Online (Sandbox Code Playgroud)

我现在的另一个问题是,为什么它可以在没有拒绝的情况下工作?无论如何,对于某些潜在的特殊情况,我是否仍然应该离开拒绝电话?

更新 2

显然这也有效:

su <username> -c "<script_of_a_particular_user> &"
Run Code Online (Sandbox Code Playgroud)

这个调用和 sudo 调用有什么区别吗?我知道这可能是一个完全不同的问题。但由于我自己在这里找到答案,也许为了这个话题,有人可以在这里澄清这一点。

更新 3 …

linux debian bash sudo init.d

13
推荐指数
1
解决办法
4万
查看次数

在 yum 更新期间,Python 安装会更新。我需要重新启动正在运行的程序吗?

正如标题所说。如果我运行 yum update(它是一个 CentOS 机器)并且恰好有一个 Python 更新。如果其他用户运行 Python 程序会发生什么。我需要提醒他们重新启动程序吗?或者,如果他们愿意,他们可以基本上无限期地安全地继续运行这些程序吗?

换个方式问:只要有一些进程仍然打开,旧的 Python 版本是否会保留在系统(硬盘驱动器)上。还是更新会立即覆盖现有的 Python 安装/二进制文件?那么现有的进程继续运行只是因为 Python 解释器完全加载到内存中?

linux python centos yum

7
推荐指数
1
解决办法
209
查看次数

为普通用户(非root)提供初始化和关机自动运行功能

我正在托管一个实验/测试 Linux 机器,运行 Debian Wheezy 7.4.0 发行版。不同的用户通过 ssh 登录机器到他们的帐户,如果他们愿意,可以运行开发工具并让他们的程序作为服务在后台运行。

由于这是用于各种目的的测试机器,因此通常需要重新启动整台机器,然后用户必须重新登录并重新启动正在运行的用户空间内容。我想自动化。基本上我想为用户提供一种在机器启动后立即启动东西的方法(在其他所有东西都初始化之后)和一种在系统关闭时启动东西的方法(没有时间限制,基本上停止关闭直到所有这些关闭用户进程已完成)。

到目前为止我已经尝试过:
我已经创建了一个 init bash 脚本,遵循在 /etc/init.d/ 下的“骨架”模板文件中找到的原则(骨架模板源代码:https://gist.github. com/ivankovacevic/9917139 )

我的代码在这里:https : //github.com/ivankovacevic/userspaceServices

基本上,脚本会遍历用户主目录并在名为 .startUp、.shutDown 或 .status 的相应子目录中查找可执行文件。根据当前发生的事件,脚本会使用su执行,就好像用户自己启动了它们一样。

我目前使用这种方法面临的问题是,在系统启动并且脚本启动其他用户的所有进程后,有一个奇怪的进程挂起。这是它在进程列表中的样子:

UID        PID  PPID  C    SZ   RSS PSR STIME TTY          TIME CMD
root      3053     1  0  1024   620   1 17:42 ?        00:00:00 startpar -f -- userspaceServices
Run Code Online (Sandbox Code Playgroud)

我不知道那个过程是什么,它的手册页没有提到 -f 参数。所以我一无所知,但我一定是做错了什么,因为没有来自 init.d 的其他脚本/服务在启动后挂起这样的进程。

所以我在找人帮我调试我拥有的这个解决方案(在我看来这似乎也有点复杂)。或者让我知道如何以完全不同的方式实现这一点。

更新
我已经针对startpar问题开始了一个单独的问题: startpar process left hanging when starts processes from rc.local 或 init.d

更新 2 …

linux bash user-management boot init.d

7
推荐指数
1
解决办法
1816
查看次数

从 rc.local 或 init.d 启动进程时,startpar 进程挂起

从完整的 init.d 脚本(SysV 样式)或来自 rc.local 文件的简单单行调用启动正在进行的(类似服务的)进程时,我有一个特殊的问题,如下所示:

su someuser -c "/home/someuser/watchdog.sh &"
Run Code Online (Sandbox Code Playgroud)

watchdog.sh 包含以下内容:

#!/bin/bash

cd /home/someuser

until ./eventMonitoring.py
do
    echo "Program crashed with exit code $?. Starting again..." >&2
    sleep 1
done
Run Code Online (Sandbox Code Playgroud)

我总是在进程列表中留下一个额外的进程:

UID        PID  PPID  C    SZ   RSS PSR STIME TTY          TIME CMD
root      3048     1  0  1024   620   1 20:04 ?        00:00:00 startpar -f -- rc.local
Run Code Online (Sandbox Code Playgroud)

如果我从我的 init.d 脚本启动它(来源:https : //github.com/ivankovacevic/userspaceServices

我得到了相同的过程,但它是startpar -f -- userspaceServices

那个过程是什么鬼?为什么在查看 startpar 的手册页时没有提到-f参数?在启动时作为另一个用户启动进程方面,我做错了什么,这个奇怪的 startpar 进程也需要保留(或启动)?为什么任何其他 init.d 脚本都不存在该进程?

有人可以帮我解释一下这个问题吗? …

linux debian boot init.d rc.local

5
推荐指数
1
解决办法
5605
查看次数