LINUX进程的属主问题
在Linux系统中,进程的属主(也称为进程的所有者)是指启动该进程的用户。每个进程都有一个与之关联的用户ID(UID),这个UID表示了哪个用户拥有这个进程。进程的属主决定了该进程的权限和访问控制。
LINUX用户
- 管理员:系统的管理员用户。
- 系统用户: Linux系统为了避免因某个服务程序出现漏洞而被黑客提权至整台服务器,默认服务程序会有独立的系统用户负责运行,进而有效控制被破坏范围。
- 普通用户:是由管理员创建的用于日常工作的用户。
LINUX进程的属主
进程的属主如下图中USER所示,可以由此判断出该进程是由哪个用户启动的。
- 当应用程序被启动时,它通常以启动该应用程序的用户身份运行。例如,图中 fl 用户使用了
top
,那么top
进程将在 fl 用户的权限下运行。 - 如果该程序需要特权或访问特定资源,它可能会使用 sudo 或 su 以其他用户身份运行。例如使用
sudo top
会以管理员用户的权限运行top
进程。
- 指定用户启动,我们可以指定进程以哪个用户来启动,就如同系统用户一样,执行某些进程以特定的用户启动,防止被另外的用户干扰。
- 在没有指定用户的时候,通常以当前登录用户的身份运行。
自启动进程的属主
如果我们的用户在登录之前设置自启动,那么他的属主由谁确定呢!
写一个简单的自启动脚本进行测试。
- 在/etc/systemd/system/下创还能脚本文件mytop.service
[Unit]
Description=my top
After=network.target
[Service]
Type=simple
ExecStart=/bin/hello.sh
[Install]
WantedBy=multi-user.target
- 在/bin/目录下创建脚本hello.sh
第一行输入#!/bin/sh
,不严会出现报错service:failed at step EXEC spawning:Exec format error
#!/bin/sh
cd /home/fl/test/hello/ && ./hello
exit 0
- 设置服务的开机自启动
systemctl enable mytop.service
- 重启
sudo reboot
重启后在当前用户 fl 执行top,发现hello进程是属于root用户的,说明在用户登录之前启动的进程(自启动的进程)是由root用户启动的。个人猜测,这可能是由于/etc/systemd/system/下的操作只有管理员才有权限操作导致的,希望有懂得大佬指教一下。
总结
-
在LINUX系统中,进程的属主,由启动该进程的用户决定
-
在启动进程时,可以通过命令
su - username command
或者rumusel -l username -c "command"
来明确指定进程由哪个用户启动
需要注意的是这些命令需要管理员权限,甚至可以指定由系统用户(UID为1-999的用户)来运行进程。
系统用户通常无法登陆(通常登录用户为管理员用户和普通用户) -
在进程启动时,如果没有指定启动用户,则默认为当前登录用户为属主
-
如果在当前登录用户登录之前就启动的程序,默认为root启动,因为默认root就是登录状态
-
自启动的应用属主为root的原因,可能是由于服务项自启动只有管理员权限才能执行