sghk1> id
uid=0(root) gid=0(root)
sghk1> ls -l /etc/shadow
-r-------- 1 root sys 4045 Aug 24 15:52 /etc/shadow
sghk1> ls -l /usr/bin/passwd
-r-sr-sr-x 1 root sys 26764 Jan 11 2012 /usr/bin/passwd
当我尝试使用 vi 编辑文件并 :wq 时,它会提示以下内容
"/etc/shadow" File is read only
为什么当我调用 /usr/bin/passwd 时,该文件可由可执行文件写入/更改,但当我尝试以 root 身份手动编辑时,却无法
答案1
就像root
,你可以做“任何事情”,但诸如vi
会进行检查并为你提供建议的程序。 vim
(你可能正在使用)将允许你写入只读文件使用:w!
(感叹号)。
该passwd
程序旨在更新/etc/shadow
,并将使用、等的任意组合chmod
,write
而无需通知用户。
root
当然,作为普通用户(不是以 的身份运行), vi
(m
)无法更新/etc/shadow
。该/usr/bin/passwd
程序可以运行,因为它使用了 setuid 功能(执行 时为“s” ls -l /usr/bin/passwd
)。
答案2
您引用的文件(/etc/shadow
)未显示可写标志在其权限. vi
或vim
默认情况下不会写入没有可写标志的文件,即使以 root 身份或文件所有者身份,除非您用感叹号覆盖其行为。
您可以使用:w!
来写入文件,忽略缺少可写标志的事实。
答案3
查看您对文件的权限,root 是所有者,root 本身只有读取权限。要更改它,您应该以 root 身份执行“chmod u+w /etc/shadow”,它将授予“您自己”写入权限。