LinuxZone

LinuxZone.net
Linux系统网——精选每一篇高品质的技术干货
  1. 首页
  2. 开源快讯
  3. 正文

Linux下的用户、用户组、文件权限等基本操作

2023年6月21日 459点热度

linux分配用户空间_oracle用户分配权限_linux 给用户分配权限

介绍

近来和几个同学开发项目,期间使用了一台服务器跑模型,这台服务器是多人公用的,好多人都在里面有自己的帐号,互不干涉内政,一切看上去非常井然有序。

近日,这个服务器上刚挂载了一块新硬碟,是一位同学使用root帐号挂载的,之后将c盘映射到某个文件夹下。但是挂载好了以后发觉使用普通帐号没有权限在文件夹下操作,难以创建文件,于是他干脆就直接把文件夹权限改成777了。我心想,这还了得,改成777了,其他人在上面乱改咋整?会出人命的!

所以,我就这件事详尽梳理了一下Linux下的用户、用户组、文件权限等基本知识,看完这种,之后不要动不动就把文件夹改成777权限了。

基本操作

首选我们梳理一下Linux下的用户、用户组、文件权限等基本知识,之后前面通过一个案例来实际演示一下权限设置的一些操作。

首先Linux系统中,是有用户和用户组的概念的,用户就是身分的象征,我们必须以某一个用户身分来操作一个系统,实际上这就对应着我们登陆系统时的帐号。而用户组就是一些用户的集合,我们可以通过用户组来界定和统一管理个别用户。

例如我要在陌陌发一条同学圈,我只想给我的亲人们看,莫非我发的时侯还要一个个去勾选所有的人?这未免太麻烦了。为了解决这问题,陌陌上面就有了标签的概念,我们可以提早给好友以标签的形式分类,发的时侯直接勾选某个标签就好了,简单高效。实际上这就是用户组的概念,我们可以将个别人进行分组和归类,待会儿只须要指定类别或组别就可以了,而不用一个个人去对号入座,因而节约了大量时间。

在Linux中,一个用户是可以属于多个组的,一个组也是可以包含多个用户的,下边我以一台UbuntuLinux为例来演示一下相关的命令和操作。

用户和用户组

首先查看所有用户,命令如下:

cut -d':' -f 1 /etc/passwd
复制代码

结果:

root
daemon
bin
sys
...
ubuntu
mysql
复制代码

这儿一行就是一个用户名,因为太多,部份就省略了,实际上这个命令就是从密码文件中把用户名单独列下来了。

之后查看所有用户组,命令也是类似的:

cut -d':' -f 1 /etc/group
复制代码

结果:

root
daemon
bin
sys
...
ubuntu
mysql
复制代码

结果基本是类似的,由于每位用户在被创建的时侯就会手动创建一个同名的组作为其默认的用户组。

这儿我是使用ubuntu这个帐号来登入的,下边我来看下ubuntu这个帐号是属于什么组。

查看一个用户所属组的命令格式如下:

gorups 
复制代码

这儿就是groups命令加上用户名才能查看该用户名所属的组了,若果不加用户名的话就默认是当前用户。

比如查看ubuntu这个用户所属于的组,命令如下:

groups ubuntu
复制代码

结果:

ubuntu : ubuntu adm cdrom sudo dip plugdev lxd lpadmin sambashare
复制代码

还不少,这个用户被分配到了好多组下,例如同名的组ubuntu,还有sudo组,另外还有一些其他的组。

其中sudo组比较特殊,倘若被分到了这个组上面就代表该帐号拥有root权限,可以使用sudo命令。

了解了如何查看用户所属的组,我们也应当反过来了解怎样查看一个用户组上面包含什么用户啊。

查看某个用户组下所有用户命令如下:

members 
复制代码

不过这个命令不是自带的,须要额外安装members包,命令如下:

sudo apt-get install members
复制代码

比如查看sudo用户组下的所有用户,即拥有root权限的用户:

members sudo
复制代码

结果:

ubuntu hadoop
复制代码

linux 给用户分配权限_oracle用户分配权限_linux分配用户空间

可以见到拥有root权限的用户有两个,ubuntu和hadoop,其实不同的机器结果肯定是不一样的。

接出来介绍一个比较有用的命令,就是id命令,它可以拿来查看用户的所属组别,格式如下:

id 
复制代码

比如查看ubuntu用户的信息,就是这样:

id ubuntu
复制代码

结果:

uid=500(ubuntu) gid=500(ubuntu) groups=500(ubuntu),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),110(lxd),115(lpadmin),116(sambashare)
复制代码

这儿有一个gid,作为主工作组,前面还有个groups,它列举了用户所在的所有组。主工作组只有一个,而前者的数目则不限。可以看见用户组的结果和使用groups命令见到的结果是一致的。

接出来我们再来了解一下怎样创建一个用户和如何为用户分配组别。

添加一个用户命令格式如下:

sudo adduser 
复制代码

例如我要添加一个用户cqc,命令就可以如此写:

sudo adduser cqc
复制代码

这儿使用的命令后面都带有sudo,由于其实是系统级别的操作。

添加一个组的命令格式如下:

sudo groupadd 
复制代码

格式是类似的,前面跟一个组的名称就可以了,比如我要为我的实验室创建一个用户组,这么就可以使用如下命令:

sudo groupadd lab
复制代码

创建完了用户和组,那得把它们关联上去吧,关联的意思就是把某个用户加入到某个组上面,命令格式如下:

sudo adduser  
复制代码

或则使用usermod命令:

sudo usermod -G  
复制代码

假如要添加多个组的话,可以通过-a选项指定多个名称:

sudo usermod -aG  
复制代码

比如我要将cqc用户添加到sudo用户组中,命令就是:

sudo adduser cqc sudo
复制代码

或:

sudo usermod -G sudo cqc
复制代码

这样就为用户和用户组做好关联了。

文件权限管理

了解了这种以后,我们再来了解一下文件权限的相关知识,下边我们先随意找一个目录,查看一下文件的列表。

列举某个目录下文件详尽信息的命令如下:

ll
复制代码

或则使用:

ls -l
复制代码

例如我这儿列举了/etc/nginx目录下的文件列表:

total 80
drwxr-xr-x 7 root root 4096 Jun 21 22:16 ./
drwxr-xr-x 103 root root 4096 Sep 4 18:04 ../
drwxr-xr-x 2 root root 4096 Jul 12 2017 conf.d/
-rw-r--r-- 1 root root 1077 Feb 12 2017 fastcgi.conf
-rw-r--r-- 1 root root 1007 Feb 12 2017 fastcgi_params
-rw-r--r-- 1 root root 2837 Feb 12 2017 koi-utf
-rw-r--r-- 1 root root 2223 Feb 12 2017 koi-win
-rw-r--r-- 1 root root 3957 Feb 12 2017 mime.types
-rw-r--r-- 1 root root 1505 Jun 21 20:24 nginx.conf
-rw-r--r-- 1 root root 12288 Jun 21 20:44 .nginx.conf.swp
-rw-r--r-- 1 root root 180 Feb 12 2017 proxy_params
-rw-r--r-- 1 root root 636 Feb 12 2017 scgi_params
drwxr-xr-x 2 root root 4096 Jun 21 22:42 sites-available/
drwxr-xr-x 2 root root 4096 Jun 21 19:08 sites-enabled/
drwxr-xr-x 2 root root 4096 Jun 21 19:08 snippets/
-rw-r--r-- 1 root root 664 Feb 12 2017 uwsgi_params
drwxr-xr-x 2 root root 4096 Jun 22 02:44 vhosts/
-rw-r--r-- 1 root root 3071 Feb 12 2017 win-utf
复制代码

我们注意到了每一行都是一个文件或文件夹的信息,一共包括七列:

其中第一列的文件权限信息是十分重要的,它由十个字符组成:

linux分配用户空间_linux 给用户分配权限_oracle用户分配权限

我们可以使用chmod命令来改变文件或目录的权限,有那么几种用法。

一种是数字权限命名,rwx对应一个二补码数字,如101就代表拥有读取和执行的权限,而转为十补码的话,r就代表4,w就代表2,x就代表1,之后三个数字加上去就和二补码数字对应上去了。如7=4+2+1,这就对应着rwx;5=4+1,这就对应着r-x。所以,相应地777就代表了rwxrwxrwx,即所有者、所属用户组、其他用户对该文件都拥有读取、写入、执行的权限,这是相当危险的!

赋于权限的命令如下:

sudo chmod  
复制代码

比如我要为一个file.txt赋于777权限,就写成:

sudo chmod 777 file.txt
复制代码

另外我们也可以使用代号来赋于权限,代号有u、g、o、a中学,分别代表所有者权限,用户组权限,其他用户权限和所有用户权限,这种代号旁边通过+和-符号来控制权限的添加和移除,再前面跟上权限类型就好,比如:

sudo chmod u-x file.txt
复制代码

就是给所有者移除x权限,也就是执行权限。

sudo chmod g+w file.txt
复制代码

就是为用户组添加w权限,即写入权限。

另外假如是文件夹的话还可以对文件夹进行递归赋权限操作,如:

sudo chmod -R 777 share
复制代码

就是将share文件夹和其内所有内容都赋于777权限。

好,有了权限的标示,那我们还得把用户和用户组与文件关联上去啊,这儿使用的命令就是chown和chgrp命令。

命令格式如下:

sudo chown  
sudo chgrp  
复制代码

比如我要将file.txt的所有者换成cqc,那就可以使用如下命令:

sudo chown cqc file.txt
复制代码

假如我要将file.txt所属用户组换成lab,那就可以使用如下命令:

sudo chgrp lab file.txt
复制代码

另外同样可以使用-R来进行递归操作,如将share文件夹及其内所有内容的所有者都换成cqc,命令如下:

sudo chown -R cqc share/
复制代码

好,了解了chown、chgrp、chmod以后,我们就可以灵活地对文件权限进行控制了。

实战演示

可能里面说上去有点具象,下边我们以一个实例来演示一下权限控制的流程,通过这个流程,相信理解以上的命令都不在话下了。

首先情况是这样的,我要在某台主机上共享一些文件给我实验室的人,但这台主机上还有其他非实验室的人在使用,我只想让实验室的人查看和更改那些文件,其他人不行。

另外我自己的帐号要有最高权限来管理这种文件的共享权限,即要有root权限。

如今我早已登陆了一个ubuntu的帐号,是系统初始化的,拥有root权限。

下边我就模拟创建三个帐号和一个用户组,来得到如下疗效:

创建自己的帐户

首先我先为自己创建一个帐户,添加一个cqc的用户:

sudo adduser cqc
复制代码

运行以后会提示输入密码和其他信息:

Adding user `cqc' ...
Adding new group `cqc' (1002) ...
Adding new user `cqc' (1002) with group `cqc' ...
Creating home directory `/home/cqc' ...
Copying files from `/etc/skel' ...
Enter new UNIX password: 
Retype new UNIX password: 
passwd: password updated successfully
Changing the user information for cqc
Enter the new value, or press ENTER for the default
 Full Name []: 
 Room Number []: 
 Work Phone []: 
 Home Phone []: 
 Other []: 
Is the information correct? [Y/n] 
复制代码

这时侯发觉一个同名的组就被创建了,查看下cqc所在的组:

groups cqc
复制代码

结果如下:

linux 给用户分配权限_oracle用户分配权限_linux分配用户空间

cqc : cqc
复制代码

再用id命令查看下信息:

id cqc
复制代码

结果如下:

uid=1002(cqc) gid=1002(cqc) groups=1002(cqc)
复制代码

可以看见当前cqc只属于cqc用户组。

接出来我们创建一个用户组,称作lab,来标注我的实验室,命令如下:

sudo groupadd lab
复制代码

之后查看下用户组上面的成员:

members lab
复制代码

没有任何结果,说明我们创建了一个空的组,没有任何成员。

之后我们将刚刚创建的cqc加入到该组中,由于我自己也属于该实验室,肯定也要加进来,命令如下:

sudo adduser cqc lab
复制代码

结果:

Adding user `cqc' to group `lab' ...
Adding user cqc to group lab
Done.
复制代码

之后查看下组内成员:

members lab
复制代码

结果:

cqc
复制代码

这样lab组内就有了cqc这个用户了。

别忘了cqc还须要拥有root权限,所以我们还须要将cqc添加到sudo组内,命令如下:

sudo adduser cqc sudo
复制代码

结果:

Adding user `cqc' to group `sudo' ...
Adding user cqc to group sudo
Done.
复制代码

这样就成功加入到sudo组了,cqc也就是我的帐户就可以使用sudo命令了。

查看下用户状态:

id cqc
复制代码

结果如下:

uid=1002(cqc) gid=1002(cqc) groups=1002(cqc),27(sudo),1003(lab)
复制代码

这样cqc就属于三个用户组了,既是实验室成员,又拥有root权限。

里面的分配用户组的命令我们也可以使用usermod来实现:

sudo usermod -aG sudo,lab cqc
复制代码

这样就添加到多个组了。

添加实验室用户

接出来,再添加实验室的另外一个人员lbd,之后将其添加到lab组中,流程是类似的,命令如下:

sudo adduser lbd
sudo adduser lbd lab
复制代码

运行完毕以后,id命令查看其信息:

id lbd
复制代码

结果如下:

uid=1004(lbd) gid=1005(lbd) groups=1005(lbd),1003(lab)
复制代码

这样就成功创建lbd,并将其添加到实验室lab组了。

添加非实验室用户

最后另外添加一个用户slb,非实验室成员,只创建帐户就好了,命令如下:

sudo adduser slb
复制代码

并且我们不把他加入lab组中。

查看他的状态:

id slb
复制代码

结果如下:

uid=1003(slb) gid=1004(slb) groups=1004(slb)
复制代码

所以两人的状态是这样的:

id cqc
uid=1002(cqc) gid=1002(cqc) groups=1002(cqc),27(sudo),1003(lab)
id lbd
uid=1004(lbd) gid=1005(lbd) groups=1005(lbd),1003(lab)
id slb
uid=1003(slb) gid=1004(slb) groups=1004(slb)
复制代码

文件权限分配

接出来我们创建一个文件夹来共享实验室数据,置于/srv目录下。之后调用mkdir命令创建名称为share的文件夹,命令如下:

cd /srv
sudo mkdir share
复制代码

注意这儿我还是使用ubuntu帐户来创建的。

先看下当前目录权限:

ls -l
复制代码

结果如下:

total 12
drwxr-xr-x 3 root root 4096 Sep 4 18:17 ./
drwxr-xr-x 24 root root 4096 Sep 4 18:17 ../
drwxr-xr-x 2 root root 4096 Sep 4 18:17 share/
复制代码

可以看见share文件的所有者是root,用户组也是root,权限是755,即只有root拥有更改权限,其他的只有读取和执行权限。

之后步入share文件夹创建一个names.txt:

cd share
sudo vi names.txt
复制代码

编辑内容如下:

cqc
lbd
复制代码

保存完毕以后,这时查看一下文件权限,如下:

-rw-r----- 1 root root 8 Sep 4 20:00 names.txt
复制代码

权限是640,这表明只有所有者root拥有写入的权限,所在组其组只有读的权限。

这时开启另外一个终端,登陆cqc帐号,实际上是不能查看和更改任何该文件的内容的,下边的更改和读取命令还会提示权限不够:

vi names.txt
cat names.txt
复制代码

为何呢?由于该文件是刚刚由ubuntu帐号使用sudo命令创建的,因而文件的所有者是root,并不是cqc,因而虽然文件的权限是640,那也就不能使用文件所有者的权限,但是cqc也不属于root组,所以也不能使用文件组的权限了,因而哪些都看不了,哪些都改不了。

但cqc属于sudo组啊,可以借助sudo命令临时获取root权限,临时以root的身分来操作该文件,这样就可以来查看和更改文件了,因而下边的命令是有效的:

sudo vi names.txt
sudo cat names.txt
复制代码

但这样还是须要使用sudo就能更改,很不便捷。

这时假若我们把文件的所有者改成cqc,情况那就不一样了。

使用ubuntu帐号,对names.txt修改其所有者为cqc,改的命令如下:

sudo chown cqc names.txt
复制代码

这时查看下文件信息:

-rw-r----- 1 cqc root 8 Sep 4 20:29 names.txt
复制代码

linux分配用户空间_linux 给用户分配权限_oracle用户分配权限

可以看见所有者信息早已弄成了cqclinux 给用户分配权限,这样cqc帐号再直接查看和更改,那就可以了,不再须要sudo命令:

vi names.txt
cat names.txt
复制代码

这样就不会有权限提示,其实加上sudo更是没问题。

好,接出来lbd呢?我们登陆试试更改。

首先当前的文件状态是这样的:

-rw-r----- 1 cqc root 8 Sep 4 20:31 names.txt
复制代码

lbd不是所有者了,因而后面的rw-权限是没哪些用的,但他属于lab组,而该文件对于用户组的权限是r--,也就是读取权限。

我们使用lbd帐号来尝试看下文件的内容:

cat names.txt 
cat: names.txt: Permission denied
复制代码

很遗憾,又没有权限。由于哪些?由于这个文件的用户组并不是lab啊,而lbd这个用户又不属于root组,所以没有任何权限。

那咋整?将文件的用户组改成lab就好了,使用ubuntu帐号或cqc帐号来操作:

sudo chgrp lab names.txt
复制代码

这样就成功将文件所属用户组改成lab了,接出来再使用lbd帐号查看下文件内容:

cat names.txt
复制代码

就成功读取了。

但是lbd如今是没有写入权限的,由于对于用户组来说,该文件的权限是r--,假如要获取写入权限,我们可以使用如下命令:

sudo chmod g+w names.txt
复制代码

或:

sudo chmod 660 names.txt
复制代码

这样就相当于赋于了rw-权限,下边我们再使用lbd帐号尝试更改这个文件:

vi names.txt
复制代码

就没问题了。

这么对于非实验室同事slb呢?它没有任何权限linux 给用户分配权限,我们登陆slb帐号尝试更改和读取该文件:

cat names.txt
vi names.txt
复制代码

均无权限。

所以说,这样我们就成功为实验室的人员赋于了权限,而非实验室的人则没有任何权限。

假如我要为slb赋于读取权限咋整呢?很简单,添加一下就好了:

sudo chmod o+r names.txt
复制代码

这就是为其他用户添加了读取权限。这时slb就可以读取文件,但不能更改文件,也是比较安全的。

好,假如我的文件十分多呢?例如十几二十个,都置于share文件夹内,那不能一个个进行权限设置吧?

这时侯我们只须要针对文件夹进行操作即可,下边的命令就可以为share文件夹赋于775权限红帽子linux,即所有者cqc和所在组lab可对其进行查看和更改,其他的人只能看不能改:

sudo chmod -R 775 share/
sudo chown -R cqc share/
sudo chgrp -R lab share/
复制代码

注意文件夹通常还会赋于x权限,不然连步入文件夹的权限都没有。这也就是文件夹通常会赋于775、755,而文件会赋于664、600、644、640的缘由了。

赋于775权限以后,share的权限就弄成了:

drwxrwxr-x 2 cqc lab 4096 Sep 4 20:31 share/
复制代码

这样其他用户就只能看redflag linux,不能改,这样普通文件就没哪些问题了。

如文件夹内包含了可执行文件,还可以单独为其他用户针对可执行文件消除x权限,如消除Python文件的可执行权限:

sudo chmod o-x *.py
复制代码

好了,到如今为止,我们就得心应手地完成了权限控制了!

相信假如你耐心看完的话,哪些用户管理、权限管理,都不在话下!

原文链接:

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: 命令 操作 权限 读取 账号
最后更新:2023年6月21日

Linux系统网

每日更新,欢迎收藏♥ 不积跬步无以至千里,加油,共勉。

点赞
< 上一篇
下一篇 >

Linux系统网

每日更新,欢迎收藏♥
不积跬步无以至千里,加油,共勉。

最新 热点 随机
最新 热点 随机
Linux内核中的系统调用的标准表示可移植操作系统接口 分区和目录中创建的文件数量有限制 网络攻防干货:显示文件的前10行知识点详解 :Access访问时间函数讲解文件:#include定义函数 嵌入式Linux系统组成部分部分64移植过程 Linux中的文件时间属性可以使用stat命令命令查看 linux 命令 操作系统版本 中标麒麟-内核Linux银河麒麟内核 linux内核移植的主要模块(或组件) Ubuntu下终端默认字体,看起来很舒畅,蛮漂亮的 Linux设备树编译:内核中的dtc工具 服务器配置进行域名解析及域名的解析与解析 安装完linuxredhat5.4,打开浏览器发现显示中文全部成了乱码 linux下mysql英文乱码解决方式(2008-08-22) ubuntu字体安装方法,超实用!!(附详细教程) Linux下USB转串口DB9(RS232)和转换线 Linux上部署Web应用程序时非常常见的做法虚拟主机 (Linux基础知识)Linux用户权限管理 关于Linux发行版本的详细信息和架构信息的说明书 Linux操作系统安装Linux系统的镜像文件导入进去的应用 基于Linux的驱动开发:远见品质Linux内核与品质
Linux上部署Web应用程序时非常常见的做法虚拟主机Linux下USB转串口DB9(RS232)和转换线ubuntu字体安装方法,超实用!!(附详细教程)linux下mysql英文乱码解决方式(2008-08-22)安装完linuxredhat5.4,打开浏览器发现显示中文全部成了乱码服务器配置进行域名解析及域名的解析与解析Linux设备树编译:内核中的dtc工具Ubuntu下终端默认字体,看起来很舒畅,蛮漂亮的linux内核移植的主要模块(或组件)linux 命令 操作系统版本 中标麒麟-内核Linux银河麒麟内核Linux中的文件时间属性可以使用stat命令命令查看嵌入式Linux系统组成部分部分64移植过程:Access访问时间函数讲解文件:#include定义函数网络攻防干货:显示文件的前10行知识点详解分区和目录中创建的文件数量有限制Linux内核中的系统调用的标准表示可移植操作系统接口SHELL编程中使用变量的实验原理和使用技巧和技巧Linux服务器出现CPU负载达到100%居高不下的情况Java代码运行步骤及文档说明--Java代码动态规划软链接使用指令ln-s指令创建软连接文件操作系统
调试时遇到宏怎么办?|程序调试技巧分享 PHP不支持多线程,有时候处理问题不是那么爽,学习啦 学习Linux内核和网络协议栈的步骤和调试技术介绍 Linux系统常见的几种压缩工具,包括它们的压缩命令 Linux系统上管理系统资源的推荐工具--nice命令 如何搭建一个Linux云服务器?介绍如何从零开始,以最简单的方式搭建 如何使用XmanagerPowerSuite中的常用工具连接、传输和管理Linux服务器 Windows10下安装docker比较简单,有如下几种方式 基于新的手掣和加密狗一个发布基于Linux的开源操作系统Lakka内核 如何在Ubuntu上使用Netplan配置网络18.04 Linux运维最佳实践pdf下载命令新建一个不存在的文件 AppStoreBenchmark(基准)测试工具(Benchmark) Linux中查看分区的命令--fdisk命令命令 Linux基础知识:查看日志文件(Linux) linux 火狐浏览器 FirefoxNightly110访问时显示不再支持UA、Firefox、Microsoft MySQL数据库如何在Linux系统上面进行自动备份创建备份目录 Linux系统下运行C语言程序 Linux内核移植流程揭秘,全面了解! Linux目录中查找前10个最大的文件和文件夹 红帽LinuxRedHatEnterprise/Linux系统内核与发行套件
标签聚合
文件 操作 命令 文件目录 内核 linux系统 软件 linux服务器 应用 目录
书籍
课程
技术群
技术干货大合集↓
  • 2023年12月 / 28篇
  • 2023年11月 / 89篇
  • 2023年10月 / 94篇
  • 2023年9月 / 90篇
  • 2023年8月 / 92篇
  • 2023年7月 / 96篇
  • 2023年6月 / 91篇
  • 2023年5月 / 93篇
  • 2023年4月 / 91篇
  • 2023年3月 / 69篇
友情链接:

Linux书籍 | Linux命令 | Linux系统 | RHCE红帽认证 | Linux软件 | Linux教程 | CentOS系统 | Linux内核 | Linux服务器 | Linux大神 | IT资源 | Linux系统

COPYRIGHT © 2024 LinuxZone.net ALL RIGHTS RESERVED.