Chr*_*ris 9 permissions command-line root sudo
我是一个新的 Ubuntu 用户,我仍然在习惯这个操作系统。我主要将它用于我正在开发的站点的本地测试。我为此下载了 LAMP 堆栈。
当我第一次下载 Ubuntu 时,每当我编辑正在开发的文件时,我都需要输入sudo nano filename. 我的主目录中的文件不是这样,仅适用于我正在测试的文件。
当我今天登录时,我不必输入sudo,我可以输入nano filename和编辑文件。我不确定我是否以某种方式禁用了对sudo密码的需求,这是我不想做的。
grep root /etc/passwd 然后我跑了grep root /etc/shadow它拒绝访问而不输入sudo。当我这样做时,root:!显示。根据我的阅读,这意味着该帐户已被禁用。
我不知道这是否意味着我禁用了密码,或者帐户是否被锁定并且一切正常。
有没有办法确保我不是以 root 身份运行,如果我目前是如何禁用它的,那么我只能以管理员身份运行。
另外,为什么在sudo编辑我的文件时突然不再需要输入密码?
感谢您的回答,如果我的问题不清楚,请告诉我,以便我尝试澄清。
小智 13
如果您使用 bash(默认),您的提示将告诉您是否以 root 用户身份运行。如果它以“ $”结尾,则您以普通用户身份运行。如果它以 ' #'结尾,则您以 root 身份运行。
此外,
whoami
Run Code Online (Sandbox Code Playgroud)
会显示你是谁。
如果您可以突然编辑过去需要 sudo 访问权限的文件,我的第一个怀疑是您以某种方式设法更改了文件的权限。如果您键入:
ls -l <filename>
Run Code Online (Sandbox Code Playgroud)
并检查结果,rwx 部分显示权限。
-rw-rw-r-- 1 user user 77338 Oct 21 17:59 filename.odt
|\ /\ /\ /
| | | +-- permissions for "other": every user on the system.
| | +----- permissions for "group"
| +-------- permissions for "owner"
+---------- filetype (- is regular file)
Run Code Online (Sandbox Code Playgroud)
如果您属于具有写入权限的组,或者“其他”具有写入权限,则不需要 sudo 访问权限即可写入文件。
您可以阅读linux 权限介绍以获取有关文件权限的更多详细信息。
要详细向您显示“您是谁”,您可以使用以下命令id:
$ id
uid=1000(alphawolf) gid=1000(alphawolf) groups=1000(alphawolf),4(adm),24(cdrom),25(floppy),27(sudo),29(audio),30(dip),44(video),46(plugdev),107(netdev),113(lpadmin),128(sambashare),132(wireshark),2000(humans-bc-aw)
Run Code Online (Sandbox Code Playgroud)
如您所见,根据您的帐户,输出可能会变得相当长。
uid=1000(alphawolf)”,gid=1000(alphawolf)”的名称和 ID您的帐户所属的所有其他组的名称和 ID。默认情况下,如果您是普通/受限用户,则此列表仅包含主要组;如果您是管理员用户,则此列表将包含至少adm和的较长列表。sudo
groups=1000(alphawolf),4(adm),24(cdrom),25(floppy),27(sudo),29(audio),30(dip),44(video),46(plugdev),107(netdev),113(lpadmin),128(sambashare),132(wireshark),2000(humans-bc-aw)
Run Code Online (Sandbox Code Playgroud)现在,我们如何利用这些信息确定对文件的权限?
我们采用 的输出ls -l /path/to/file-or-directory,例如:
$ ls -l /usr/bin/dumpcap
-rwxr-xr-- 1 root wireshark 85632 Aug 16 01:43 /usr/bin/dumpcap*
Run Code Online (Sandbox Code Playgroud)
该文件是 Wireshark 用来捕获具有提升权限的网络包的可执行文件。我选择它是因为不同的所有者和组权限。
让我们看看重要的细节:
所有者: root
这是拥有该文件的用户。
组: wireshark
这是该文件分配给的用户组。
权限字符串:这些是 用户、组-rwxr-xr--成员和所有其他人
的文件权限,如下所述:
- rwx r-x r--
| \ / \ / \ /
| V V V
| | | \__ Other permissions: [r] 'r'ead access granted
| | | [-] 'w'rite access denied
| | | [-] e'x'ecuting denied
| | \__ Group permissions: [r] 'r'ead access granted
| | [-] 'w'rite access denied
| | [x] e'x'ecuting granted
| \__ Owner permissions: [r] 'r'ead access granted
| [w] 'w'rite access granted
| [x] e'x'ecuting granted
\__ File type: [-] normal file
(alternatives: 'd'irectory, sym'l'ink,
'c'haracter device, 'b'lock device, ...)
Run Code Online (Sandbox Code Playgroud)alphawolf现在,具有上述输出的用户可以id使用此文件做什么?
root完整read、write 和 e ecute 权限的用户x。 wireshark,因此我具有为该文件的组设置的权限:我可以r读取该文件并x执行它,但不能修改它(无w仪式访问权限)。 r读取该文件,但既不能w写入也不能x执行它。这将帮助您确定对不同系统文件的权限。
小智 6
在大多数 shell 中这是可能的
if [ $USER = root ] ; then echo Im root; fi
Run Code Online (Sandbox Code Playgroud)
Bash 也支持这个
if [ $UID = 0 ] ; then echo Im root; fi
Run Code Online (Sandbox Code Playgroud)