概述
Linux是一个多任务,多用户的操作系统,既然是多用户的操作系统那么这个操作系统上每天就会跑着许多不同的用户的,这么多用户跑在Linux系统系统是如何区分他们的呢?如果有的用户图谋不轨,在系统上搞破坏想要删除某系重要文件系统又是什么样的一个机制来控制这些用户的呢?希望这篇文章能够帮你更加深入的了解Linux的用户、用户组和文件权限的相关概念,并且能够在看完本文后学会一些linux用户、用户组和文件权限的管理操作
本文一共分为以下三大部分:
一、Linux用户及用户组
二、Linux文件权限
三、文件权限的管理操作
一、用户及用户组
用户
因为linux是一个多任务、多用户的操作系统,所以在这个系统上面可能有许多人和你一样,跟你一起使用着这个系统,每个用户在使用操作系统的过程中都会产生数据,而这些数据可能和你私人生活有关,不想让别的用户看见,因此用户就需要一块自己的空间,于是以用户命名的目录就产生了,当数据转化为文件放到用户目录以后,将文件设置成仅有所有者可见这样自己的隐私就不会被别人看到啦!(PS:在linux系统中有个无所不能的存在root,它无法无天即使是对文件设置了仅所有者可见,但root用户也是可以看到文件的内容的哦。)
用户组
其实用户组是Linux是个很有用的功能,当老板需要两个团(group1,group2)队竞争开发项目时,group1,group2内部一些资源只想内部互相访问,而不想让对方成员访问,于是乎group1,group2下的成员就分别自己团队里的团员分到自己组下,于是乎某些资源就只有团队内的成员才能访问了,作为老板想能够看到两个团队的开发进度,于是老板的账号boss分别加入到group1和group2里面,于是乎老板就有了访问这两个团队文件的权限。
其他人
就拿用户组里group1来说,group1里面的leader有个开发的成品参考模板仅供group1内的成员访问参考,于是把这个文件所属组划到了group1,这个文件所属者就是leader,所属组就是group1。group2团队有一个员工staff1,staff1对于模板这个文件来说就是其他人。对于文件来说就是既不是文件的拥有者,也不在文件所属组的成员,对于这样的用户就是其他人。
二、Linux文件权限
文件属性
Linux系统上最重要的概念就是,一切皆文件,文件就是Linux系统的核心,所以文件是一个挺复杂的东西,一个文件他有很多的属性,那么在介绍linux系统文权限之前,我先向大家说一说用什么方法可以查看文件的属性吧,在命令行界面下面使用ls的-l选项就可看见文件的长选项了也就是文件的属性,再加上-d的话就能看到目录的本身的属性,那么下面我就在linux的命令行模式下,在以管理员的身份在根目录下运行了一条ls –ld home,于是home目录的属性就出来了,如下图1.1(仅部分截图)
第二行,第一组红线圈出来的地方就代表着文件权限,其中第一个字母代表是文件的类型,然后剩下的九个字符分为三个一组分为三组,从左往右分别代表着文件所有者拥有的权限,文件所属用户组有的权限,和其他人拥有的权限,而每组的三位字符就代表者着所对应的用户,用户组,其他人所有的权限:第一位代表读取权限,r表的就是可读取的操作,-表示不具有读取权限;第二位代表写入权限,w表示进行写入的操作,-表示不具有写入权限;第三位代表执行权限,x表示可以对文件执行操作如:搜索、切入,-表示不具有执行权限;(在上面我们也说到linux里面有一个无法无天的root,它直接就拥有这个文件权限的读、写执行的权限,不要问我为什么,彪悍的root不需要解释。),这里需要注意的是文件和目录所对应的r,w,x的功能是不一样的,文件 r:可获取文件的数据; w:可修改文件的数据;x:可将此文件运行为进程。目录:r:可使用ls命令获取其下的所有文件列表; w: 可修改此目录下的文件列表;即创建或删除文件;x: 可cd至此目录中,且可使用ls -l来获取所有文件的详细属性信息;后面还有两个root,第一个root代表的是该文件所属的用户,第二个root代表是该文件所属于哪个组,这就是一个文件大致的属性。
文件的权限
上面已经说到了文件的权限,Linux是一个多用户操作系统,它允许多个用户同时登录和工作。因此 Linux 将一个文件或目录与一个个用户和组联系起来。所谓的文件权限,是指用户或组对文件的访问权限,包括对文件的读、写、删除、执行。不知道大家有没有建过文件,当文件一建立起来之后,文件就自动有了一个默认的权限,这个权限其实是和umask有关了,当你在命令行敲下umask后就会得到类似下图1.2的结果。
那么这个0022表示的是什么呢,目录和文件默认权限有什么关系呢,在上面图1.1那边已经说到了r,w,x,-,所代表的意义了,其实权限的组合机制还可用数字来表示,
--- | 000 | 0 |
--x | 001 | 1 |
-w- | 002 | 2 |
-wx | 003 | 3 |
r-- | 004 | 4 |
r-x | 005 | 5 |
rw- | 006 | 6 |
rwx | 007 | 7 |
于是rwxrwxrwx就可以用777来表示了,rwxr-xr-x就可以用755来表示了,那umask的0022代表的是什么呢,其实0022就是777-022=755,即目录默认权限为rwxr-xr-x,文件的话就是666-022=644,即文件默认权限为rw-r--r--。
三,具体文件管理操作
上面啰啰嗦嗦说那么多的概念东西,这里就不多说了,下面就说说对于linux的文件权限及用户是怎么管理的,以下我们将涉及到groupadd、groupdel、groupmod、useradd、usermod、userdel、gpasswd、passwd、newgrp、su、id、chmod、 chown、tail;这里我只做简要说明,如果想深入了解可自行查找使用方法。在介绍命令使用先先做些说明:< >参数表示必填,[ ]参数可填可不填,…表示可填多项。/etc/passwd,/etc/group,etc/shandow这些目录分别是:用户的信息库,组的信息库,用户密码,我们所添加的用户或组这些目录下都有对应的记录。
tail 命令:输出文件的最后一部分
语法tail [选项]... [FILE]...
tail file (显示文件file的最后10行)
tail+20 file (显示文件file的内容,从第20行至文件末尾)
tail-c 10 file (显示文件file的最后10个字符)
id命令:显示真实有效的用户ID(UID)和组ID(GID)
语法:id [选项]... [USER]
iduser1(查看user1用户的用户ID(UID)和组ID(GID))
groupadd命令: 创建一个新组
语法:groupadd [选项] GROUPNAME
groupaddgroup1 (建立一个新组)
groupdel命令:删除一个组
语法:groupdel [选项] GROUP
groupadd group1 (删除group1组)
groupmod命令:更改组群识别号或名称
语法:groupmod [选项] GROUP
groupmod -g 6666 group1(修改group1组名的组ID为6666)
groupmod -n test2 group1(将group1组名改名为test2)
useradd命令:创建一个新用户或更新默认新用户
语法:useradd [选项] 登录名
useradduser1(创建user1用户)
useradd -g group1 user1(创建user1用户,并分配基本组为group1)
useradd -r sys1(创建系统用户sys1)
useradd -G group1,group2,group3 user1(创建user1,并指定附加组group1,group2,group3)
usermod命令:修改用户属性
语法:usermod [选项] 登录名
usermod -u 6666 user1(修改user1用户的用户ID为6666)
usermod -g 6666 user1(修改user1基本组的组ID为6666)
usermod -l user2 user1(修改user2的用户名为user1)
usermod -L user1(将user1的账户的密码锁定)
usermod -Uuser1(将user1的账户的密码解锁)
userdel命令:删除用户账户和相关文件
语法:userdel [选项] 登录名
userdeluser1(删除user1用户)
userdel-r user1(删除user1用户及家目录)
gpasswd命令:Linux下工作组文件/etc/group和/etc/gshadow管理工具
语法:gpasswd [选项] group
gpasswd-a user1 group1(将用户user1加入到group1组中)
gpasswd-d user1 group1(将用户user1从group1组中删除)
passwd命令:设置用户的认证信息,包括用户密码、密码过期时间等。
语法:passwd [-k] [-l] [-u [-f]] [-d] [-e] [-nmindays] [-x maxdays] [-w warndays] [-i inactivedays] [-S] [--stdin] [username]
passwd(修改自己的密码)
passwdUSERNAME(修改用户的密码,只有root账户有此权限
newgrp命令:临时切换指定的组为基本组
语法:newgrp [-] [group]
-: 会模拟用户重新登录以实现重新初始化其工作环境;
su命令:切换用户
语法:su [选项...] [-] [user[args...]]
<su- user1,su - l user>(切换至user1,并读取目标用户的配置文件来重新初始化)
suuser1(切换至user1不初始化)
chmod命令:用来更改文件或目录的权限
语法:I.chmod [OPTION]... MODE[,MODE]... FILE...
赋权表示法:直接操作一类用户的所有权限位rwx;
u=(对应文件所有者),g=(对应文件所有组),o=(对应其他人),a=(a=就相于ugo=)
例如:chmod u=rwx,go=rw /home/test(将test文件权限设置为rwxrw-rw-)
授权表示法:直接操作一类用户的一个权限位r,w,x;
[u+, u-], [g+, g-],[o+, o-],[a+, a-]
例如:chmod u-x,go+x /home/test(将上面rwxrw-rw-的test文件权限改为了rw-rwxrwx)
语法II:.chmod[OPTION]... OCTAL-MODE FILE...
chmod644 /home/test(将test文件权限设置为rw-r--r--)
语法:III.chmod[OPTION]... --reference=RFILE FILE...
chmod--reference=test test1(使test1复制test文件的权限属性)
chown命令:改变文件大的所有者和所有组
语法: chown [OPTION]... [OWNER][:[GROUP]]FILE...
chownuser1:group1 test1(将test1文件的所有改为user1,所有组改为group1)
chown[OPTION]... --reference=RFILE FILE...
chown--reference=test test1(使test复制test1文件的所属者和所属组属性)
本人也是初学Linux,文中有哪些不妥的地方,尽管提出,能让我及时更正。谢谢!
转载于:https://blog.51cto.com/flyoung/1722590