我正在运行Ubuntu 12.04桌面系统。到目前为止,我只安装了一些程序(我具有sudo权限)。
当我检查系统上的用户列表时,会看到很长的列表,例如超过20个用户-这些用户是何时创建的(例如,守护程序,sys,sync,游戏,pulse等)?这些与新程序的安装有何关系?
如果我在系统上运行程序,则该程序应与UID一起运行。但是在执行ps时,我看到许多其他程序以不同的UID运行(例如root,daemon,avahi,syslog,colored等)-这些程序是如何以不同的UID启动的?
我正在运行Ubuntu 12.04桌面系统。到目前为止,我只安装了一些程序(我具有sudo权限)。
当我检查系统上的用户列表时,会看到很长的列表,例如超过20个用户-这些用户是何时创建的(例如,守护程序,sys,sync,游戏,pulse等)?这些与新程序的安装有何关系?
如果我在系统上运行程序,则该程序应与UID一起运行。但是在执行ps时,我看到许多其他程序以不同的UID运行(例如root,daemon,avahi,syslog,colored等)-这些程序是如何以不同的UID启动的?
Answers:
用户帐户不仅用于实际的人类用户,还用于运行系统服务,有时还用作系统文件的所有者。这样做是因为人力资源(流程,文件等)之间的分隔与系统服务资源之间的分隔在幕后需要相同的机制。
您通常运行的程序使用您的用户ID运行。只有系统守护程序以自己的帐户运行。指示何时运行守护程序的配置文件也指示应该由哪个用户运行它,或者守护程序启动后切换到非特权帐户。一些守护程序需要完全的管理特权,因此它们在root帐户下运行。许多守护程序仅需要访问特定的硬件设备或特定的文件,因此它们以专用的用户帐户运行。这样做是出于安全考虑:这样,即使其中一项服务中存在错误或配置错误,也不会导致全面的系统攻击,因为攻击者将受限于该服务可以做的事情,而且不会能够覆盖文件,监视进程等
在Ubuntu下,系统安装时会创建0-99范围内的用户ID。0是根;1–99范围内的许多设备仅出于历史原因存在,并且仅出于与使用它们的本地安装的向后兼容性的考虑而保留(一些额外的条目不会有任何损害)。当安装或删除需要专用用户ID的服务时,将动态创建和删除100-999范围内的用户ID。从1000开始的范围适用于人类用户或系统管理员创建的任何其他帐户。团体也是如此。
我想您可以通过检查找到此用户列表/etc/passwd
?这是完全正常的-“用户”用于携带一组权限,不仅可以锁定“实际用户”,还可以锁定程序到系统的某些区域并跟踪他们的更改(与组相同的概念)。
我在下面插入了我的Raspberry Pi /etc/passwd
文件之一,以供您参考;您会ntop
在该文件的底部注意到用户,该文件是由程序创建的ntop
(网络监控)。同样sshd
,gnats
错误报告等。
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh
proxy:x:13:13:proxy:/bin:/bin/sh
www-data:x:33:33:www-data:/var/www:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh
list:x:38:38:Mailing List Manager:/var/list:/bin/sh
irc:x:39:39:ircd:/var/run/ircd:/bin/sh
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
libuuid:x:100:101::/var/lib/libuuid:/bin/sh
pi:x:1000:1000:,,,:/home/pi:/bin/bash
sshd:x:101:65534::/var/run/sshd:/usr/sbin/nologin
ntp:x:102:104::/home/ntp:/bin/false
statd:x:103:65534::/var/lib/nfs:/bin/false
messagebus:x:104:106::/var/run/dbus:/bin/false
usbmux:x:105:46:usbmux daemon,,,:/home/usbmux:/bin/false
lightdm:x:106:109:Light Display Manager:/var/lib/lightdm:/bin/false
smmta:x:107:110:Mail Transfer Agent,,,:/var/lib/sendmail:/bin/false
smmsp:x:108:111:Mail Submission Program,,,:/var/lib/sendmail:/bin/false
Debian-exim:x:109:113::/var/spool/exim4:/bin/false
ntop:x:110:115::/var/lib/ntop:/bin/false
dpkg --get-selections | grep -v deinstall
如果愿意,您可以运行它并将其与用户的/ etc / passwd文件列表进行比较。至于您的问题:“ ...这些程序如何与diff UID一起运行”,您可以自己尝试。编写一个test_file
包含无害(echo "Test"
)的随机bash脚本。然后sudo chmod 755 test_file
(任何人都可以读取和执行,并且所有者可以读取,写入和执行),然后sudo chown nobody
将其分配给用户nobody
。然后运行它。“程序” test_file
随UID一起运行nobody
。
nobody
UID 的文件运行,但是与您的UID一起运行;您需要使其成为一个SUID文件来执行此操作,但是如果使用解释程序运行该文件,则会删除SUID位。
dpkg
位仍然有用(希望如此),请忽略有关以您自己的身份运行的部分!要么使用SUID要么以其他用户身份登录
这些用户是何时创建的?
在您提到的情况下,它们是在系统安装时创建的。这些用户帐户是常规帐户,有些可以追溯到几十年前。它们也是标准化的。Linux标准库将它们分为:
root
,bin
,和daemon
; 和adm
,lp
,sync
,shutdown
,halt
,mail
,news
,uucp
,operator
,man
,和nobody
此处提到的其他用户帐户- ,pulse
,avahi
,colord
和Debian-exim
(挑选一个从py4on的密码文件) -把我们带到你的下一个问题。
这些与新程序的安装有何关系?
在安装和清除这些软件包时,非标准用户帐户由各种软件包的“维护者脚本”创建和销毁。用户帐户将由软件包的所谓postinst
维护者脚本创建,该脚本将运行getent
以查看该用户帐户是否已经存在,是否存在useradd
。从理论上讲,它将被软件包的所谓的postrm
维护者脚本running 删除userdel
。
实际上,不会删除软件包的用户帐户。Fedora Wiki(qv)解释说这很困难。请参见Debian错误#646175,以获取有关此基本原理的示例,在该示例中,决定清除软件包后根本不删除rabbitmq
用户帐户,以解决继续在该帐户的支持下运行的dæmon问题。
这些程序如何以不同的UID开始的?
在Unix和Linux下,在超级用户的支持下运行的进程可以将其用户帐户更改为其他用户,然后继续运行同一程序,但是不允许相反。(必须使用set-UID机制。)
守护程序管理系统以超级用户身份运行。其配置数据指定特定守护程序在特定用户帐户的支持下运行:
rc
,脚本中/etc/init.d
使用了诸如start-stop-daemon
and及其--chuid
选项之类的辅助工具。run
脚本调用setuidgid
,s6-setuidgid
,chpst
,或runuid
与用户帐户名。在/unix//a/179798/5132中有设置nagios
用户帐户的示例。setuid
作业文件中有一个节,用于指定用户帐户。这不是特别细的,有时有人想要在/superuser//a/723333/38062上描述的内容。User=
时,服务单元文件中有一个设置,用于指定用户帐户。当守护程序管理系统生成一个进程作为守护程序时,这些机制会放弃超级用户特权,以便守护进程继续在未特权用户帐户的支持下运行。
有一个相当长的解释,为什么用这种方式进行良好的恶魔管理。但是你没有问为什么。仅在何时,如何以及从何而来。therefore因此,一个非常简短的准则:
Unix和Linux操作系统将在不同用户帐户的主持下运行的进程彼此隔离。从历史上看,如果一个人能够接管以超级用户身份运行的守护程序,那么任何人都可以做自己喜欢的事情。另一方面,在非特权帐户的主持下运行的守护程序只能访问该非特权帐户可以访问的文件,目录,设备和进程。因此,一个互不信任的demon程序系统都在不同用户帐户的支持下运行,并且无法访问/控制彼此(内部,受信任的)文件/目录/进程/设备,因此很难破解。
在Linux上,当我们安装服务时,它会创建一个具有其服务名称或类似名称的用户,以便它无法访问其他文件。