我是 Ubuntu 的新用户,仍在适应该操作系统。我主要使用它来对正在开发的网站进行本地测试。为此,我下载了 LAMP 堆栈。
当我第一次下载 Ubuntu 时,每当我编辑正在开发的文件时,我都需要输入sudo nano filename
。 对于我的主目录中的文件不是这样,只有我正在测试的文件才这样。
今天我登录时,无需输入sudo
,只需输入nano filename
和编辑文件即可。我不确定我是否以某种方式禁用了密码sudo
,但我不想这样做。
grep root /etc/passwd
然后我运行grep root /etc/shadow
,结果拒绝访问,无需输入sudo
。当我输入时,root:!
显示。从我读到的内容来看,这意味着该帐户已被禁用。
我不知道这是否意味着我禁用了密码或者帐户已被锁定并且一切正常。
有没有办法确保我没有以 root 身份运行,如果我当前以 root 身份运行,如何禁用它以便我仅以管理员身份运行。
另外,为什么sudo
突然不再需要输入密码来编辑我的文件了?
谢谢您的回答,如果我的问题不清楚,请告诉我,以便我可以尝试澄清。
答案1
如果您使用的是 bash(默认),您的提示符会告诉您是否以 root 身份运行。如果它以 ' $
' 结尾,则表示您以普通用户身份运行。如果它以 ' #
' 结尾,则表示您以 root 身份运行。
此外,
whoami
将会展现你是谁。
如果你突然可以编辑以前需要 sudo 访问权限的文件,我首先怀疑的是你以某种方式设法更改了文件的权限。如果你输入:
ls -l <filename>
并检查结果,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)
如果您属于具有写权限的组或者“其他”具有写权限,那么您不需要 sudo 访问权限即可写入文件。
你可以阅读Linux 权限简介有关文件权限的更多详细信息。
答案2
为了详细地显示“你是谁”,你可以使用以下命令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)
如您所见,根据您的帐户,输出可能会变得相当长。
- 它不仅显示您的用户名和ID“
uid=1000(alphawolf)
”, - 还有你的主要组的名称和ID“
gid=1000(alphawolf)
” 以及您的帐户所属的所有其他组的名称和 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)
现在,我们如何利用这些信息确定文件的权限?
我们取的输出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*
此文件是 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, ...)
alphawolf
现在,使用上述输出的用户能用id
这个文件做什么呢?
- 我是不是
root
拥有完全r
ead、w
rite 和 ex
ecute 权限 的用户。 - 但我是该组的成员
wireshark
,因此我具有为文件组设置的权限:我可以r
阅读和执行该文件x
,但不能修改它(无w
正式访问权限)。 - 其他人只能
r
阅读文件,但不能w
写入或x
执行文件。
这将帮助您确定您对不同系统文件的权限。
答案3
在大多数 shell 中这是可能的
if [ $USER = root ] ; then echo Im root; fi
Bash 也支持这个
if [ $UID = 0 ] ; then echo Im root; fi
答案4
您只需要使用root来编辑属于root或其他用户的文件。您创建或拥有的任何文件都可以由您编辑,无需使用 root 权限。
例如运行以下命令
cd $HOME
touch test.txt
nano test.txt
上述命令导航到您的主目录(您的个人区域),创建一个名为 test.txt 的文件,然后使用名为 nano 的编辑器输入该文件。
现在如果你尝试:
nano /etc/apt/sources.list
您应该能够看到该文件,但会收到一条警告,提示您无法编辑该文件。
这是因为即使该文件不属于你,每个人都有读取该文件的权限。如下图所示:
要轻松查看 Ubuntu 中的权限,只需输入:
ll /path/to/parent/directory
或者对于其他系统,例如 debian
ls -al /path/to/directory
网上有很多关于用户权限的优秀教程,比如这个,我建议你阅读一下。我经常看到人们做一些愚蠢的事情,比如将 /var/www 中的所有内容都设置为 777,以使他们的网络服务器“工作”,因为他们不了解 Linux 权限,因此他们的服务器不太安全。
我是一个新的 ubuntu 用户...
祝你好运,欢迎来到 Linux!传播这个消息。