Linux用户和组

・19 分钟阅读

什么是用户和组权限?

Linux/unix操作系统能够以类似于其他操作系统的方式进行多任务处理,然而,Linux与其他操作系统的不同之处在于它拥有多个用户的能力,Linux设计为允许多个用户同时访问系统,为了使这个多用户设计能够正常工作,需要有一种方法来互相保护用户,这就是权限进入的地方。

读取,写入&执行权限

权限是对文件或目录执行操作的权限,基本权限是读取,写入和执行。

  • 读取-允许查看文件内容的可读权限,允许你列出目录的内容的目录上的读取权限,
  • 写入-对文件的写权限允许你修改该文件的内容,对于目录,write允许你编辑目录的内容(例如,添加/删除文件,
  • 在文件中,可执行权限允许你运行该文件,并且执行程序或脚本,对于目录,执行权限允许你更改到其他目录,并使它成为当前工作目录,用户通常有一个默认组,但是,它们可能属于多个其他组,

查看文件权限

若要查看文件或目录的权限,请发出以下命令,ls -l 请记住用实际的文件或目录名称替换< >中的信息,下面是ls命令的示例输出:


-rw-r--r-- 1 root root 1031 Nov 18 09:22 /etc/passwd

前十个字符显示访问权限,第一个破折号(-)表示文件(对于目录,为特殊文件,对于常规文件,为1 )的类型,接下来的三个字符(rw- )定义所有者对文件的权限,在本例中,文件所有者只读和写权限,接下来三个字符(r– )是与文件所有者(在本示例中,为只读)相同的组成员的权限,最后三个字符(r– )显示所有其他用户的权限,在这个示例中,它是只读的。

使用用户,组和目录

下面的部分将讨论创建,删除和修改用户帐户所需的命令,将覆盖组,以及创建和删除目录的命令,将提供使用用户,组和目录所需的命令和描述。

创建和删除用户帐户

若要创建新的标准用户,请使用useradd命令,语法如下所示:


useradd 

useradd命令使用多种变量,其中一些变量显示在下面的表中:

选项描述例子
-dhome_dir将用作用户目录登录的值useradd -d /home/
-e帐户过期的日期useradd ** -e
-f帐户过期前的天数useradd -f <0 or -1>
-s设置默认的shell类型useradd -s /bin/

你将需要使用passwd命令为新用户设置密码,注意,你将需要root特权来更改用户密码,语法如下所示:


passwd 

用户可以随时使用passwd命令更改他们的密码,下面是一个示例:


$ passwd
Changing 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命令自动创建主目录,并且设置默认组命令创建新标准用户语法如下所示:


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 

了解

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 specification
root ALL=(ALL:ALL) ALL
cjones ALL=(ALL:ALL) ALL
kbrown ALL=(ALL:ALL) ALL
lmartin ALL=(ALL:ALL) ALL

给用户帐户sudo特权后,保存sudoers文件,并且将它作为root注销,现在以用户身份登录,并且通过sudo访问测试用户的特权,如果新用户需要sudo访问,你现在可以使用下面的命令使用你自己的登录来编辑sudoers文件:

 
sudo visudo

 

使用组

Linux使用组作为组织用户的一种方式,组用来组织帐户的集合,主要作为安全度量,通过/etc/group文件管理组成员身份,该文件显示组及它成员的列表,每个用户都有默认或主要组,当用户登录时,组成员身份被设置为它主要组,即当用户启动程序或创建文件时,文件和运行的程序都将与用户组成员身份相关联,只要用户也是该组的成员,并且访问权限被设置,用户就可以访问其他组中的其他文件,若要在不同的组中运行程序或创建文件,用户必须运行newgrp命令来切换它当前组,newgrp命令的示例如下所示:


$ newgrp 

如果用户输入上述引用命令是/etc/group文件中的marketing组成员,则当前组成员将更改,重要的是要注意,创建的任何文件现在都与marketing组相关,而不是和主用户组相关联,用户还可以使用chgrp命令更改它的组别,chgrp命令的语法如下所示:


$ chgrp 

创建和删除目录

创建目录使用命令:


mkdir 

要创建目录,并且同时设置权限,请使用以下选项和语法:


mkdir -m a=rwx 

-m选项是模式的缩写,a=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 .profile
drwxr-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执行(仅当文件是目录时)
s设置执行时的用户或组ID
t在swap设备上保存程序文本
u当前文件所有者的权限
g该文件对同一组中的用户具有的当前权限
o该文件对不在该组中的其他人的当前权限,

重要的是,记住文件列表第一列的第一个字符表示它是一个目录还是一个文件,其他九个字符是文件/目录的权限,前三个字符为用户,下三个字符为组,最后三个字符为用户,示例drwxrw-r–按如下方式分解:

d是一个目录

1用户具有读,写和执行权限

rw-组具有读取和写入权限

r–所有其他人都有只读权限

注意,破折号(-)表示权限被删除,因此,使用"所有其他"组,r–只转换为读权限,并删除了写和执行权限。

相反,加号(+)相当于授予权限: chmod u+r,g+x

以上示例的翻译如下:


u is for user
r is for read
g is for group
x is for execute

换句话说,用户获得了读取权限,并且该组对该文件授予了执行权限,注意,在设置一个集合的多个权限时,在集合之间需要一个逗号。

Chmod八进制格式

要使用八进制格式,必须计算文件或目录的每个部分的权限,上面提到的前十个字符将对应于八进制数的四个数字,执行权限等于第一个(1),写权限等于两个(2),读权限等于,个(4),因此,当使用八进制格式时,需要计算每个权限部分的0和7之间的数字,下面提供了一个表格来澄清。

Octal format for permissions.

尽管八进制格式似乎很难理解,但是,一旦获得了它的要点,它就很容易使用,但是,使用r,w和x设置权限可能比较容易,下面是如何使用字母和八进制格式来设置文件或目录权限的示例。

示例语法: chmod

字母格式: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

下面提供了一个显示权限等效数值的八进制表。

Numeric permissions table.

其他文件权限

除了最常见的read/write/execute文件权限外,还有一些其他的模式,特别是+t模式(置顶位)和+s模式(setuid位),这些函数描述了多用户情况下文件和可执行文件的行为。

当设置在文件或目录上时,粘滞位或t模式意味着只有所有者(或根)才能删除该文件,无论哪个用户通过组成员身份或所有权对该文件/目录具有写入权限。当一个文件或目录拥有许多用户共享给定文件集的写访问权限时,这很有用。

要设置名为/root/sticky.txt的文件上的置顶位,请发出以下命令:


chmod +t /root/sticky.txt

若要从文件中删除粘滞位,请使用chmod -t命令,注意,要更改粘滞位,你需要是root或文件所有者,root用户将能够删除文件,而不考虑置顶位的状态。

setuid位,或者了该文件的用户可以执行给定文件的权限,以便使用文件所有者权限运行该文件,例如,如果文件work属于root用户和marketing组,则marketing组成员可以运行work程序,就好像它们是root用户一样,这可能在某些情况下带来潜在的安全风险,在接收+s标志之前应该正确评估可执行文件,要设置名为/usr/bin/work的文件上的+s位,请发出以下命令:


chmod g+s /usr/bin/work

文件所有权的+s模式相比,+s模式对目录的影响有些不同,+s目录中创建的文件接收目录和组用户的所有权,而不是创建该文件及它默认组的用户的所有权,要在目录中设置SetGUID (组id )选项,请使用以下命令:


chmod g+s /var/doc-store/

要为名为/var/doc-store的目录设置setuid (用户id ),请发出以下命令:


chmod u+s /var/doc-store/

更改文件所有权

默认情况下,所有文件都由创建它们的用户"和默认用户组"拥有",若要更改文件的所有权,请使用chown user:group/path/to/file格式的chown命令,在以下示例中,"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文件权限可以帮助完成这个目标。

Zhongy0410 profile image