译文地址:
如果您是Linux / Unix的新手,那么权限的概念可能会令人困惑。本指南将为您提供有关权限,工作方式以及如何管理权限的说明。将提供许多示例来说明如何为用户和组设置和更改权限。
什么是用户和组权限?
Linux / Unix操作系统能够以类似于其他操作系统的方式进行多任务处理。但是,Linux与其他操作系统的主要区别在于它具有多个用户的能力。Linux旨在允许多个用户同时访问系统。为了使这种多用户设计正常工作,需要一种保护用户彼此的方法。这是权限发挥的地方。
读取,写入和执行权限
权限是对文件或目录起作用的“权限”。基本权限是读,写和执行。
- 读取 - 可读权限允许查看文件的内容。对目录的读取权限允许您列出目录的内容。
- 写入 - 文件的写入权限允许您修改该文件的内容。对于目录,写入权限允许您编辑目录的内容(例如,添加/删除文件)。
- 执行 - 对于文件,可执行权限允许您运行文件并执行程序或脚本。对于目录,执行权限允许您更改到其他目录并使其成为当前工作目录。用户通常拥有默认组,但他们可能属于其他几个组。
查看文件权限
要查看文件或目录的权限,请发出命令ls -l <directory/file>
。请记住将<>中的信息替换为实际文件或目录名称。以下是该ls
命令的示例输出:
-rw-r--r-- 1 root root 1031 Nov 18 09:22 /etc/passwd
前十个字符显示访问权限。第一个短划线( - )表示文件的类型(d表示目录,s表示特殊文件, - 表示常规文件)。接下来的三个字符(rw-)定义所有者对文件的权限。在此示例中,文件所有者仅具有读写权限。接下来的三个字符(r-)是与文件所有者(在此示例中为只读)相同组的成员的权限。最后三个字符(r-)显示所有其他用户的权限,在此示例中它是只读的。
使用用户,组和目录
以下部分将介绍创建,删除和修改用户帐户所需的命令。将涵盖组,以及用于创建和删除目录的命令。您将获得使用用户,组和目录所需的命令和描述。
创建和删除用户帐户
要创建新的标准用户,请使用该useradd
命令。语法如下:
useradd
useradd命令使用各种变量,其中一些变量如下表所示:
选项 | 描述 | 例 |
---|---|---|
-d <home_dir> | home_dir将用作用户登录目录的值 | useradd <name> -d /home/<user's home> |
-e <date> | 帐户过期的日期 | useradd <name>** -e <YYYY-MM-DD> |
-f <inactive> | 帐户到期前的天数 | useradd <name> -f <0 or -1> |
-s <shell> | 设置默认的shell类型 | useradd <name> -s /bin/<shell> |
您需要使用该passwd
命令为新用户设置密码。请注意,您需要root权限才能更改用户密码。语法如下:
passwd
用户可以使用passwd
带语法的命令随时更改其密码。以下是一个例子:
$ passwdChanging password for lmartin.(current) UNIX password:Enter new UNIX password:Retype new UNIX password:passwd: password updated successfully
还有另一种创建用户帐户的方法,对于首次使用的管理员来说可能更容易。但是,您可能需要安装新软件包。Debian / Ubuntu的安装命令如下:
apt-get install adduser
adduser命令自动创建主目录并设置默认组,shell等。要使用该adduser
命令创建新的标准用户,语法如下:
adduser
输入命令后,您将收到一系列提示; 大部分信息都是可选的。但是,您应该至少包括用户的名称(对于此示例,用户名是cjones),当然还包括密码。
root@localhost:~# adduser cjones Adding user `cjones' ... Adding new group `cjones' (1001) ... Adding new user `cjones' (1001) with group `cjones' ... Creating home directory `/home/cjones' ... Copying files from `/etc/skel' ... Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully Changing the user information for cjones Enter the new value, or press ENTER for the default Full Name []: Chuck Jones Room Number []: 213 Work Phone []: 856-555-1212 Home Phone []: Other []: Is the information correct? [Y/n] Y
值得注意的是,应始终非常重视安全性。因此,强烈建议为每个帐户使用唯一密码。切勿与其他用户共享或提供密码。
要删除用户帐户,请输入以下命令:
userdel
发出上述命令只会删除用户的帐户。他们的文件和主目录不会被删除。
要删除用户,其主文件夹及其文件,请使用以下命令:
userdel -r
了解Sudo
Root是超级用户,可以在系统上执行任何操作。因此,为了防止潜在的损害,使用sudo代替root。Sudo允许用户和组访问他们通常无法使用的命令。Sudo将允许用户拥有管理权限,而无需以root用户身份登录。sudo命令的示例如下:
sudo apt-get install
在使用sudo之前,如果它不属于您的发行版,则可能需要安装它。Debian的命令如下:
apt-get install sudo
对于CentOS,命令如下:
yum install sudo
为了向用户提供sudo功能,需要将他们的名称添加到sudoers文件中。此文件非常重要,不应使用文本编辑器直接编辑。如果未正确编辑sudoers文件,则可能导致无法访问系统。
因此,该visudo
命令应用于编辑sudoers文件。在命令行中,以root身份登录系统并输入命令visudo
。
以下是sudoers文件中显示具有sudo访问权限的用户的部分。
# User privilege specificationroot ALL=(ALL:ALL) ALLcjones ALL=(ALL:ALL) ALLkbrown ALL=(ALL:ALL) ALLlmartin ALL=(ALL:ALL) ALL
在为用户帐户授予sudo权限后,保存sudoers文件并以root身份注销。现在以您的用户身份登录并使用sudo访问权限测试您的用户权限。当新用户需要sudo访问权限时,您现在可以使用以下命令使用自己的登录名编辑sudoers文件:
sudo visudo
使用群组
Linux使用组作为组织用户的方式。组织组织帐户集合,主要作为安全措施。通过/etc/group
文件管理组成员资格,该文件显示组及其成员的列表。每个用户都有一个默认或主要组。用户登录时,将为其主要组设置组成员身份。这意味着当用户启动程序或创建文件时,文件和正在运行的程序都将与用户的当前组成员关联。用户可以访问其他组中的其他文件,只要它们也是该组的成员并且设置了访问权限。要在其他组中运行程序或创建文件,用户必须运行该newgrp
命令以切换其当前组。newgrp命令的示例如下:
$ newgrp
如果输入上述命令的用户是文件中营销组的成员/etc/group
,则当前组成员身份将更改。请务必注意,创建的所有文件现在都与营销组相关联,而不是与用户的主要组相关联。用户还可以使用该chgrp
命令更改其组。chgrp命令的语法如下:
$ chgrp
创建和删除目录
要创建目录,请使用以下命令:
mkdir
要创建目录并同时设置权限,请使用以下选项和语法:
mkdir -m a=rwx
该-m选项是短期的模式,和一个= RWX意味着所有用户都具有读,写和目录执行权限。要查看mkdir命令的所有选项的完整列表,请man mkdir
在命令提示符处输入。
要删除文件,请使用以下命令:
rm
要删除目录:
rm -r
重要的是要注意,如果删除目录,其中的所有文件也将被删除。
更改目录和文件权限
要查看文件和目录的文件权限和所有权,请使用该ls -al
命令。该a
选项显示隐藏文件或所有文件,而l
选项是长列表。输出将类似于以下内容:
drwxr-xr-x 2 user user 4096 Jan 9 10:11 documents-rw-r--r-- 1 user user 675 Jan 7 12:05 .profiledrwxr-xr-x 4 user user 4096 Jan 7 14:55 public
带有十个字母和短划线的第一列显示文件或目录的权限。第二列(带有单个数字)表示目录中包含的文件或目录的数量。下一列表示所有者,后面是组名称,上次访问的大小,日期和时间,最后是文件名。例如,使用上面输出中的第一行,详细信息如下:
`drwxr-xr-x` are the permissions`2` is the number of files or directories`user` is the owner`user` is the group`4096` is the size`Jan 9 10:11` is the date/time of last access`documents` is the directory
注意由于目录本身是一个文件,因此任何目录都将始终显示4096
为其大小。这不反映目录内容的大小。
Chmod命令
该命令chmod
是更改模式的缩写。Chmod用于更改文件和目录的权限。该命令chmod
可以与字母或数字(也称为八进制)一起使用来设置权限。chmod使用的字母如下表所示:
信件 | 允许 |
---|---|
[R | 读 |
w ^ | 写 |
X | 执行 |
X | 执行(仅当文件是目录时) |
小号 | 执行时设置用户或组ID |
Ť | 在交换设备上保存程序文本 |
ü | 文件对所有者的当前权限 |
G | 该文件对同一组中的用户具有的当前权限 |
Ø | 该文件对不在该组中的其他人的当前权限 |
重要的是要记住文件列表第一列的第一个字符表示它是目录还是文件。其他九个字符是文件/目录的权限。前三个字符用于用户,后三个用于组,最后三个用于其他字符。drwxrw-r-示例细分如下:
d是目录
rwx用户具有读,写和执行权限
rw-该组具有读写权限
r-所有其他人都拥有只读权限
请注意,短划线( - )表示删除了权限。因此,对于“所有其他”组,r-仅转换为读取权限,删除了写入和执行权限。
相反,加号(+)相当于授予权限: chmod u+r,g+x <filename>
上面的例子翻译如下:
u is for userr is for readg is for groupx is for execute
换句话说,给予用户读取权限,并且该组被赋予该文件的执行权限。请注意,为集合设置多个权限时,集合之间需要逗号。
Chmod八进制格式
要使用八进制格式,您必须计算文件或目录的每个部分的权限。上面提到的前十个字符将对应于八进制中的四位数字。执行权限等于数字1(1),写权限等于数字2(2),读权限等于数字4(4)。因此,当您使用八进制格式时,您需要为权限的每个部分计算0到7之间的数字。下面提供了一个表格以供澄清。
虽然八进制格式似乎很难理解,但是一旦掌握了它的要点就很容易使用。但是,使用r,w和x设置权限可能更容易。下面是如何使用字母和八进制格式设置文件或目录权限的示例。
示例语法:
chmod <octal or letters> <file/directory name>
信函格式:(
chmod go-rwx Work
拒绝该团体和其他人的rwx许可)
上面的chmod命令之后ls -al的输出如下所示:
dr-------- 2 user user 4096 Dec 17 14:38 Work
八进制格式: chmod 444 Work
上面的chmod命令后ls -al的输出如下所示:
dr--r--r-- 2 user user 4096 Dec 17 14:38 Work
下面提供了一个显示权限等效数字的八进制表。
额外的文件权限
除了最常见的读/写/执行文件权限外,还有一些您可能会觉得有用的附加模式,特别是+ t模式(粘滞位)和+ s模式(setuid位)。这些函数描述了多用户情况下文件和可执行文件的行为。
在文件或目录上设置时,粘滞位或+ t模式意味着只有所有者(或root)才能删除该文件,无论哪个用户通过组成员身份或所有权对此文件/目录具有写入权限。当一个文件或目录由一个组拥有时,这很有用,通过该组,许多用户共享对给定文件集的写访问权。
要在名为的文件上设置粘滞位/root/sticky.txt
,请发出以下命令:
chmod +t /root/sticky.txt
要从文件中删除粘滞位,请使用该chmod -t
命令。注意,要更改粘滞位,您需要是root用户或文件所有者。无论粘滞位的状态如何,root用户都可以删除文件。
设置在文件上的setuid位或+ s允许具有执行给定文件权限的用户能够使用文件所有者的权限运行该文件。例如,如果文件work
由root
用户和marketing
组拥有,则组的成员marketing
可以像运行work
root用户一样运行程序。在某些情况下,这可能会带来潜在的安全风险,并且在收到+s
标志之前应对可执行文件进 要+s
在名为的文件上设置该位/usr/bin/work
,请发出以下命令:
chmod g+s /usr/bin/work
与此相反的+ S模式,以文件的所有权,则效果+ S模式上的目录是有所区别的。在+ s目录中创建的文件将获得该目录的用户和组的所有权,而不是创建该文件及其默认组的用户的所有权。要在目录上设置setguid(group id)选项,请使用以下命令:
chmod g+s /var/doc-store/
要为名为的目录设置setuid(用户标识)/var/doc-store
,请发出以下命令:
chmod u+s /var/doc-store/
更改文件所有权
默认情况下,所有文件都由创建它们的用户和该用户的默认组“拥有”。要更改文件的所有权,请使用格式的chown
命令chown user:group /path/to/file
。在以下示例中,“list.html”文件的所有权将更改为“marketing”组中的“cjones”用户:
chown cjones:marketing list.html
要更改目录及其中包含的所有文件的所有权,请使用带有-R
标志的递归选项。在以下示例中,/srv/smb/leadership/
将“marketing”组中的“cjones”用户的所有权更改为:
chown -R cjones:marketing /srv/smb/leadership/
利用用户和组
在许多情况下,用户权限用于为您的系统提供更高的安全性,而无需任何直接交互。许多操作系统在安装过程中为不同的包创建特定的系统用户帐户。
最佳做法是为每个用户提供他们自己的系统登录。这可以保护每个用户的文件免受所有其他用户的攻击。此外,对用户使用特定帐户可以实现更准确的系统日志记录,尤其是与工具类似时sudo
。我们建议避免多个人知道用户帐户密码以获得最大安全性的情况。
相反,组可用于允许多个独立用户帐户协作和共享文件。如果您在计算机上创建基于每个任务的常见任务组(例如,Web编辑器,贡献者,内容提交者,支持)并将相关用户添加到相关组,则这些用户都可以编辑和运行相同的文件集而无需与世界分享这些文件。使用chown
具有770和740文件权限的命令将有助于实现此目标。