如何检查是否以root身份运行?不要求 sudo

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 权限介绍以获取有关文件权限的更多详细信息。


Byt*_*der 7

要详细向您显示“您是谁”,您可以使用以下命令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)

如您所见,根据您的帐户,输出可能会变得相当长。

  • 它不仅显示您的用户名和ID“ 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)