用户与用户组
Linux系统是一个多用户多任务的操作系统.
用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问;另一方面也可以帮助用户组织文件,并为用户提供安全性保护。
每个用户账号都拥有一个唯一的用户名和各自的密码。
用户在登录时键入正确的用户名和密码后,就能够进入系统和自己的主目录。
要想实现用户账号的管理:
- 用户账号的添加、删除、修改以及用户密码的管理。
- 用户组的管理。
注意三个文件:
- /etc/passwd 存储用户的关键信息
- /etc/group 存储用户组的关键信息
- /etc/shadow 存储用户的密码信息
用户管理
命令 | 作用 | 说明 |
---|---|---|
useradd -m -g 组 新建用户名 | 添加新用户 | -m 自动建立用户家目录 -g 指定用户所在的组,否则会建立一个和同名的组 |
passwd 用户名 |
设置用户密码 | 如果是普通用户,直接用 passwd 可以修改自己的账户密码 |
userdel -r 用户名 | 删除用户 | -r 选项会自动删除用户家目录 |
cat /etc/passwd | grep 用户名 |
确认用户信息 | 新建用户后,用户信息会保存在 /etc/passwd 文件中 |
1. 添加用户
useradd 选项 用户名
常用选项:
- -g:表示指定用户的用户主(主要)组,选项的值可以是用户组的id,也可以是组名
- -G:表示指定用户的用户附加(额外)组,选项的值可以是用户组的id,也可以是组名
- -u:uid,用户的id(用户的标识符),系统默认会从500之后按顺序分配uid,如果不想使用系统分配的,可以通过该选项自定义
- -c:comment,添加注释(选择是否添加)
- -s:指定用户登入后所使用的shell 解释器 【专门的接待员】
- -d:指定用户登入时的启始目录(家目录位置)
- -n:取消建立以用户名称为名的群组(了解)
示例:创建用户zhangsan,不带任何选项
useradd zhangsan
验证是否成功:
-
验证/etc/passwd的最后一行,查看是否有zhangsan的信息
Last login: Sat Jun 8 22:28:50 2019 from 49.92.240.220 root@toby:~# useradd zhangsan root@toby:~# useradd zhangsan useradd: user 'zhangsan' already exists root@toby:~# tail -1 /etc/passwd zhangsan:x:1000:1000::/home/zhangsan: root@toby:~#
-
验证是否存在家目录(在Centos下创建好用户之后随之产生一个同名家目录);
认识passwd文件
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
systemd-timesync:x:100:102:systemd Time Synchronization,,,:/run/systemd:/bin/false
systemd-network:x:101:103:systemd Network Management,,,:/run/systemd/netif:/bin/false
systemd-resolve:x:102:104:systemd Resolver,,,:/run/systemd/resolve:/bin/false
systemd-bus-proxy:x:103:105:systemd Bus Proxy,,,:/run/systemd:/bin/false
syslog:x:104:108::/home/syslog:/bin/false
_apt:x:105:65534::/nonexistent:/bin/false
messagebus:x:106:110::/var/run/dbus:/bin/false
uuidd:x:107:111::/run/uuidd:/bin/false
ntp:x:108:114::/home/ntp:/bin/false

上图中依次顺序为
用户名:密码:用户ID:用户组ID:注释:家目录:解释器shell
- 用户名:创建新用户名称,后期登录的时候需要输入;
- 密码:此密码位置一般情况都是“x”,表示密码的占位;
- UID(用户标识):用户的识别符;【-u】
- GID(用户组标识):该用户所属的主组ID;【-g】
- 注释:解释该用户是做什么用的;【-c】
- 家目录:用户登录进入系统之后默认的位置;【-d】
- 解释器shell:等待用户进入系统之后,用户输入指令之后,该解释器会收集用户输入的指令,传递给内核处理;【如果解释器是/bin/bash表示用户可以登录到系统,/sbin/nologin表示该用户不能登录到系统】【-s】
注意:
在不添加选项的时候,执行useradd之后会执行一系列的操作
- 创建同名的家目录;
- 创建同名的用户组;
示例:添加选项,创建用户lisi,让lisi属于501主组,自选靓号666,并且要求不能登录到系统,可以写注释为“user lisi”。
root@toby:/home# useradd -g 1000 -u 666 -s /sbin/nologin -c "user lisi" lisi
root@toby:/home# tail -1 /etc/passwd
lisi:x:666:1000:user lisi:/home/lisi:/sbin/nologin
root@toby:/home#
注意:


linux123行的含义:
在linux123的组里(组id是500)有一个组内用户lisi(lisi的附加组就是500,附加组的名字是linux123)。
如果需要为一个用户指定多个附加组,只需要将多个附件组的id通过英文逗号“,”分割即可。
【主组只能有1个,附加组可以多个,也可以没有附加组
【主组必须有】
【文档的属组指的是主组】
2. 修改用户
usermod
可以用来设置 用户 的 主组 / 附加组 和 登录 Shell,命令格式如下:- 主组:通常在新建用户时指定,在
etc/passwd
的第 4 列GID
对应的组 - 附加组:在
etc/group
中最后一列表示该组的用户列表,用于指定 用户的附加权限
提示:设置了用户的附加组之后,需要重新登录才能生效!
usermod 选项 用户名
# 修改用户的主组(passwd 中的 GID)
usermod -g 组 用户名
# 修改用户的附加组
usermod -G 组 用户名
# 修改用户登录 Shell
usermod -s /bin/bash 用户名
Usermod:user modify,用户修改
常用选项:
选项 | 含义 |
---|---|
-g | 表示指定用户的用户主组,选项的值可以是用户组的id,也可以是组名 |
-G | 表示指定用户的用户附加组,选项的值可以是用户组的id,也可以是组名 |
-u | uid,用户的id(用户的标识符),系统默认会从500之后按顺序分配uid,如果不想使用系统分配的,可以通过该选项自定义 |
-l | 修改用户名 |
-c<备注> | 修改用户帐号的备注文字 |
-d<登入目录> | 修改用户登入时的目录 |
-s | 修改用户登入后所使用的shell |
示例:修改zhangsan用户主组为500,附加组改为501
usermod -g 500 -G 501 zhangsan
示例:修改zhangsan用户用户名,改为wangerma
usermod -l wangerma zhangsan 这里的竖杠是 英文字母 l
注意:默认使用
useradd
添加的用户是没有权限使用sudo
以root
身份执行命令的,可以使用以下命令,将用户添加到sudo
附加组中
usermod -G sudo 用户名
设置密码
Linux不允许没有密码的用户登录到系统,因此前面创建的用户目前都处于锁定状态,需要设置密码之后才能登录计算机。
passwd [用户名] 【如果不指定用户名则修改自己的密码】
示例:设置wangerma用户的密码
passwd wangerma
注意:
这里可以先写要修改的用户, 中间插入选项和值
设置密码之后shadow文件中的体现:能够看出lisi用户没有密码的。
sshd:*:17616:0:99999:7:::
zhangsan:$6$Z7HX/.94$F78gf4VkGCSPADb/aA4lFhWwOYXyLuG.LWHjX7D.d4684d/oXIouzwoE0TvIX.JkjlgV4KLdisjvm1hf19vEJ/:18056:0:99999:7:::
lisi:!:18055:0:99999:7:::
在设置用户密码之后可以登录帐号,例如此处需要登录zhangsan
which
提示
/etc/passwd
是用于保存用户信息的文件/usr/bin/passwd
是用于修改用户密码的程序
which
命令可以查看执行命令所在位置,例如:
which ls
# 输出
# /bin/ls
which useradd
# 输出
# /usr/sbin/useradd
bin 和 sbin
- 在
Linux
中,绝大多数可执行文件都是保存在/bin
、/sbin
、/usr/bin
、/usr/sbin
/bin
(binary
)是二进制执行文件目录,主要用于具体应用/sbin
(system binary
)是系统管理员专用的二进制代码存放目录,主要用于系统管理/usr/bin
(user commands for applications
)后期安装的一些软件/usr/sbin
(super user commands for applications
)超级用户的一些管理程序
提示:
cd
这个终端命令是内置在系统内核中的,没有独立的文件,因此用which
无法找到cd
命令的位置
切换用户
序号 | 命令 | 作用 | 说明 |
---|---|---|---|
01 | su - 用户名 | 切换用户,并且切换目录 | - 可以切换到用户家目录,否则保持位置不变 |
02 | exit | 退出当前登录账户 |
su
不接用户名,可以切换到root
,但是不推荐使用,因为不安全exit
快捷键为control+d
示意图如下:

su [用户名](switch user)
如果用户名不指定则表示切换到root用户
root@toby:~# su zhangsan
zhangsan@toby:/root$
zhangsan@toby:/root$ su
Password:
root@toby:~#
切换用户需要注意的事项:
- 从root往普通用户切换不需要密码,但是反之则需要root密码;
- 切换用户之后前后的工作路径是不变的;
- 普通用户没有办法访问root用户家目录,但是反之则可以;
删除用户
用户删除
userdel 选项 用户名
常用选项:
- -r:表示删除用户的同时,删除其家目录;
示例:删除zhangsan用户
root@toby:~# userdel -r zhangsan
userdel: user zhangsan is currently used by process 22089
root@toby:~# ps -ef | grep 22089
zhangsan 22089 22088 0 20:51 pts/0 00:00:00 bash
root 22092 22089 0 20:51 pts/0 00:00:00 su
root 22115 22093 0 20:57 pts/0 00:00:00 grep --color=auto 22089
root@toby:~# su zhangsan
# 这里使用control+d 会自动退出
zhangsan@toby:/root$ exit
解决办法:
简单粗暴,
kill
对应用户的全部进程
提示:
所有跟用户操作的命令(除passwd外,只能修改自己的密码,即不指定用户名)只有root超级管理员有权限执行。
备注:
也可以在登录需要删除的用户之后,按下快捷键
ctrl+d
进行对当前用户的注销,随后退回到上一个用户(root)此时就可以对需要删除的用户进行删除操作。
用户组的管理
每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理。不同Linux 系统对用户组的规定有所不同,如Linux下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建。
用户组的管理涉及用户组的添加、删除和修改。组的增加、删除和修改实际上就是对 /etc/group 文件的更新。
root@toby:~# cat /etc/group
root:x:0:
daemon:x:1:
bin:x:2:
sys:x:3:
adm:x:4:syslog
tty:x:5:
disk:x:6:
lp:x:7:
mail:x:8:
news:x:9:
uucp:x:10:
man:x:12:
proxy:x:13:
kmem:x:15:
dialout:x:20:
fax:x:21:
voice:x:22:
cdrom:x:24:
floppy:x:25:
tape:x:26:
sudo:x:27:
audio:x:29:
dip:x:30:
www-data:x:33:
backup:x:34:
operator:x:37:
list:x:38:
irc:x:39:
src:x:40:
gnats:x:41:
shadow:x:42:
utmp:x:43:
video:x:44:
sasl:x:45:
plugdev:x:46:
staff:x:50:
games:x:60:
users:x:100:
nogroup:x:65534:
systemd-journal:x:101:
systemd-timesync:x:102:
systemd-network:x:103:
systemd-resolve:x:104:
systemd-bus-proxy:x:105:
input:x:106:
crontab:x:107:
syslog:x:108:
netdev:x:109:
messagebus:x:110:
uuidd:x:111:
mlocate:x:112:
ssh:x:113:
ntp:x:114:
lpadmin:x:115:
stapdev:x:116:
stapusr:x:117:
stapsys:x:118:
root@toby:~#
上面内容的文件结构:
用户组名:密码:用户组ID:组内用户名
密码:X表示占位符,虽然用户组可以设置密码,但是绝大部分的情况下不设置密码; 组内用户名:表示附加组是该组的用户名称;
1. 用户组添加
groupadd 选项 用户组名
常用选项:
- -g:类似用户添加里的“-u”,-g表示选择自己设置一个自定义的用户组ID数字,如果自己不指定,则默认从500之后递增;
示例:使用groupadd指令创建一个新的用户组,命名为admins
#groupadd admins
root@toby:~# cat /etc/group
...
admins:x:1001:
root@toby:~#
2. 用户组编辑
groupmod 选项 用户组名
常用选项:
- -g:类似用户修改里的“-u”,-g表示选择自己设置一个自定义的用户组ID数字
- -n:类似于用户修改“-l”,表示设置新的用户组的名称
案例:修改admins用户组,将组ID改成520,将名称改为admin123
root@toby:~# groupmod -g 520 -n admingroup admins
root@toby:~# cat /etc/group
...
admingroup:x:520:
root@toby:~#
3. 用户组删除
groupdel 用户组名
案例:删除admingroup组
groupdel admingroup
注意:
当如果需要删除一个组,但是这个组是某个用户的主组时,则不允许删除(附加组是可以的);如果确实需要删除,则先从组内移出所有用户。
提示:
针对用户和用户组的管理指令,除了passwd指令之外,其他指令一般情况下只有root用户可以执行。
权限管理
1. 权限介绍
在Linux中分别有读、写、执行权限:
-
读权限:
- 对于文件夹来说,读权限影响用户是否能够列出目录结构
- 对于文件来说,读权限影响用户是否可以查看文件内容
-
写权限:
- 对文件夹来说,写权限影响用户是否可以在文件夹下“创建/删除/复制到/移动到”文档.
- 对于文件来说,写权限影响用户是否可以编辑文件内容
-
执行权限:一般都是对于文件来说,特别脚本文件。
- 对于文件来说,执行权限影响文件是否可以运行。
- 对于文件夹来说,执行权限影响对应的用户是否可以在文件夹内执行指令。
2. 身份介绍
-
Root用户(超级用户)
- 在Linux中,还有一个神一样存在的用户,这就是root用户,因为在所有用户中它拥有最大的权限 ,所以管理着普通用户。因此以后在设置文档的权限的时候不必考虑root用户。
-
Owner身份(文档所有者,默认为文档的创建者)
- 由于Linux是多用户、多任务的操作系统,因此可能常常有多人同时在某台主机上工作,但每个人均可在主机上设置文件的权限,让其成为个人的“私密文件”,即个人所有者。因为设置了适当的文件权限,除本人(文件所有者)之外的用户无法查看文件内容。
-
Group身份(与文件所有者同组的用户)
- 与文件所有者同组最有用的功能就体现在多个团队在同一台主机上开发资源的时候。例如主机上有A、B两个团体(用户组),A中有a1,a2,a3三个成员,B中有b1,b2两个成员,这两个团体要共同完成一份报告F。由于设置了适当的权限,A、B团体中的成员都能互相修改对方的数据,但是团体C的成员则不能修改F的内容,甚至连查看的权限都没有。同时,团体的成员也能设置自己的私密文件,让团队的其它成员也读取不了文件数据。在Linux中,每个账户支持多个用户组。如用户a1、b1即可属于A用户组,也能属于B用户组【主组和附加组】。
-
Others身份(其他人,相对于所有者与同组用户)
- 这个是个相对概念。打个比方,大明、二明、小明一家三兄弟住在一间房,房产证上的登记者是大明(owner所有者),那么,大明一家就是一个用户组,这个组有大明、二明、小明三个成员;另外有个人叫张三,和他们三没有关系,那么这个张三就是其他人(others)了。 同时,大明、二明、小明有各自的房间,三者虽然能自由进出各自的房间,但是小明不能让大明看到自己的情书、日记等,这就是文件所有者(用户)的意义。
3. Linux的权限查看
要设置权限,就需要知道文件的一些基本属性和权限的分配规则。在Linux
中,ls
命令常用来查看文档的属性,用于显示文件的文件名和相关属性。
#ls -l 路径 【ls -l 等价于 ll】
root@toby:~# ll /
total 92
drwxr-xr-x 22 root root 4096 Jun 3 16:38 ./
drwxr-xr-x 22 root root 4096 Jun 3 16:38 ../
drwxr-xr-x 2 root root 4096 Apr 8 2018 bin/
drwxr-xr-x 3 root root 4096 Apr 8 2018 boot/
drwxr-xr-x 19 root root 3740 Jun 3 16:38 dev/
drwxr-xr-x 88 root root 4096 Jun 9 21:23 etc/
drwxr-xr-x 2 root root 4096 Apr 13 2016 home/
lrwxrwxrwx 1 root root 33 Mar 26 2018 initrd.img -> boot/initrd.img-4.4.0-117-generic
lrwxrwxrwx 1 root root 33 Mar 26 2018 initrd.img.old -> boot/initrd.img-4.4.0-116-generic
drwxr-xr-x 20 root root 4096 Mar 26 2018 lib/
drwxr-xr-x 2 root root 4096 Mar 26 2018 lib64/
drwx------ 2 root root 16384 Mar 26 2018 lost+found/
drwxr-xr-x 4 root root 4096 Mar 26 2018 media/
drwxr-xr-x 2 root root 4096 Aug 1 2017 mnt/
drwxr-xr-x 2 root root 4096 Aug 1 2017 opt/
dr-xr-xr-x 96 root root 0 Jun 3 16:38 proc/
drwx------ 7 root root 4096 Jun 8 23:08 root/
drwxr-xr-x 19 root root 640 Jun 9 21:06 run/
drwxr-xr-x 2 root root 12288 Apr 8 2018 sbin/
drwxr-xr-x 2 root root 4096 Aug 1 2017 srv/
dr-xr-xr-x 13 root root 0 Jun 3 16:50 sys/
drwxrwxrwt 7 root root 4096 Jun 9 22:17 tmp/
drwxr-xr-x 10 root root 4096 Mar 26 2018 usr/
drwxr-xr-x 11 root root 4096 Mar 26 2018 var/
lrwxrwxrwx 1 root root 30 Mar 26 2018 vmlinuz -> boot/vmlinuz-4.4.0-117-generic
lrwxrwxrwx 1 root root 30 Mar 26 2018 vmlinuz.old -> boot/vmlinuz-4.4.0-116-generic
root@toby:~#

上图标红的部分就是Linux的文档权限属性信息。
Linux中存在用户(owner)、用户组(group)和其他人(others)概念,各自有不同的权限,对于一个文档来说,其权限具体分配如下:

十位字符表示含义:
- 第1位:表示文档类型,取值常见的有
“d表示文件夹”、“-表示文件”
、“l表示软连接”、“s表示套接字”、“c表示字符设备”、“b表示块状设备”等等; - 第2-4位:表示文档
所有者
的权限情况,第2位表示读权限的情况,取值有r、-;第3位表示写权限的情况,w表示可写,-表示不可写,第4位表示执行权限的情况,取值有x、-。 - 第5-7位:表示与所有者
同在一个组的用户
的权限情况,第5位表示读权限的情况,取值有r、-;第6位表示写权限的情况,w表示可写,-表示不可写,第7位表示执行权限的情况,取值有x、-。 - 第8-10位:表示除了上面的前2部分的用户之外的
其他用户
的权限情况,第8位表示读权限的情况,取值有r、-
;第9位表示写权限的情况,w表示可写,-表示不可写,第10位表示执行权限的情况,取值有x、-
。
注意:
除了权限位上的
rwx
以及-
之外,还有一些特殊的权限代码“s”、“t”
,这些不在本次考虑范围内。(黏贴位,特殊权限位)
权限分配中,均是rwx
的三个参数组合,且位置顺序不会变化。没有对应权限就用 –
代替。
4. 权限设置
chmod [选项] 权限模式 文档路径
常用选项:
- -R:递归设置权限 (当文档类型为文件夹的时候)
权限模式:
- 就是该文档需要设置的权限信息
文档:
- 可以是文件,也可以是文件夹,可以是相对路径也可以是绝对路径。
注意点:
如果想要给文档设置权限,操作者要么是root用户,要么就是文档的所有者。
4.1 字母形式设置

给谁设置:
- u:表示所有者身份owner(user)
- g:表示给所有者同组用户设置(group)
- o:表示others,给其他用户设置权限
- a:表示all,给所有人(包含ugo部分)设置权限 如果在设置权限的时候不指定给谁设置,则默认给所有用户设置
什么权限-权限字符:
- r:读
- w:写
- x:表示执行
- -:表示没有权限
如何设置-权限分配方式:
- +:表示给具体的用户新增权限(相对当前)
- -:表示删除用户的权限(相对当前)
- =:表示将权限设置成具体的值(注重结果)【赋值】
设置多个身份的权限时候,每个身份之间需要通过英文逗号分开。
例如:
需要给/root/anaconda-ks.cfg文件(-rw-------.)设置权限,要求所有者拥有全部的权限,同组用户拥有读和写权限,其他用户只读权限。
答案:
#chmod u+x,g+rw,o+r /root/anaconda-ks.cfg
或者:
#chmod u=rwx,g=rw,o=r /root/anaconda-ks.cfg

提示:
当文档拥有执行权限(任意部分),则其颜色在终端中是绿色。
#chmod ug=rwx 形式,如果有两部分权限一样则可以合在一起写的
等价于:
#chmod u=rwx,g=rwx
例如:如果anaconda-ks.cfg文件什么权限都没有,可以使用root用户设置所有的人都有执行权限,则可以写成
什么权限都没有应该是:----------
目标的效果:---x--x--x
#chmod a=x anaconda-ks.cfg
#chmod a+x anaconda-ks.cfg
#chmod u+x,g+x,o+x anaconda-ks.cfg
#chmod ugo=x anaconda-ks.cfg
#chmod ugo+x anaconda-ks.cfg
#chmod +x anaconda-ks.cfg
案例:
设置文件“~/php/php.txt”权限,要求所有者全部权限,同组用户拥有读权限、写权限,其他人拥有读权限
#chmod u=rwx,g=rw,o=r ~/php/php.txt
更改要求:
所有者全部权限,同组用户拥有读权限、写权限,其他人拥有读权限、写权限
#chmod o+w ~/php/php.txt
练习:
1. 设置文件夹/tmp/php的权限(如果文件夹不存在,自行创建),要求权限为递归权限,并且所有者有全部权限,同组用户有读执行权限,其他用户只读权限;
#mkdir /tmp/php
#chmod -R u=rwx,g=rx,o=r /tmp/php
2. 设置文件/tmp/php/class.sh权限,文件如果不存在则自行创建,要求权限为所有者全部权限,同组用户读和执行权限,其他用户没有权限;
#touch /tmp/php/class.sh
#chmod u=rwx,g=rx,o=--- /tmp/php/class.sh
3. 使用普通用户在/tmp/php目录下创建test目录,设置目录权限为所有者拥有全部权限,同组用户只读,其他用户只读;(创建不了test用户)
4.2 数字的形式
经常会在一些技术性的网页上看到类似于#chmod 777 a.txt 这样的一个权限,这种形式称之为数字形式权限(777)。
权限 | 代表字母 | 数字值 |
---|---|---|
读 | r | 4 |
写 | w | 2 |
执行 | x | 1 |
没有任何权限
-
:0

注意:
组合权限数字的时候遵循,最短路径要求,并且最多只能出现一次。
例如:
需要给anaconda-ks.cfg设置权限,权限要求所有者拥有全部权限,同组用户拥有读执行权限,其他用户只读。
分析:
所有者(第1位):全部权限 = 读 + 写 + 执行 = 4 + 2 + 1 = 7
同组用户(第2位):读执行 = 读 + 执行 = 4 + 1 = 5
其他用户(第3位):读 = 4
组合: 754
最终得出的结果是754
#chmod 754 anaconda-ks.cfg
例题:
用超级管理员设置文档的权限命令是#chmod -R 731 aaa,请问这个命令有没有什么不合理的地方?
所有者 = 7 = 4 + 2 + 1 = 读 + 写 + 执行
同组用户 = 3 = 2 + 1 = 写 + 执行
其他用户 = 1 = 执行
问题在权限731中3表示写+执行权限,但是写又不必须需要能打开之后才可以写,因此必须需要具备读权限,因此权限不合理。以后建议各位在设置权限的时候不要设置这种“奇葩权限”。
注意:
在写权限的时候千万不要设置类似于上面的这种
奇葩权限
。如果一个权限数字中但凡出现2与3的数字,则该权限有不合理的情况。
4.3 注意事项
是否可以删除文件属于文件夹的权限
扩展:
在Linux系统中,创建文档的权限有一个默认值,以当前的系统为例,其创建文件夹之后的默认权限是755,创建文件之后的权限是644。
之所以会这样是受到了系统中umask(掩码)的值的影响,其是用于指定文档创建好之后的权限,umask默认为022。
计算方式:
对于文件:文件的权限 = 666 – umask掩码
对于文件夹:文件夹的权限 = 777 - umask掩码
为什么文件是
666
不是777
呢? 因为文件包含了可执行文件. linux系统处于安全的考虑. 默认创建的文件是不给执行的权限x
的.
5. 属主与属组
- 属主:所属的用户(文件的主人),文档所有者
- 属组:所属的用户组(同组用户的组名称)

这两项信息在文档创建的时候会使用创建者的信息(用户名、用户所属的主组名称)。
之所以需要设置这个:如果有时候去删除某个用户,则该用户对应的文档的属主和属组信息就需要去修改(类似离职之前的工作交接)。
5.1 chown
更改文档的所属用户(change owner)
chown [-R] 新的username 文档路径

注意:
修改所有者的人必须是root或者所有者自己,其他人无权修改所有者。
5.2、chgrp
更改文档的所属用户组(change group)
chgrp [-R] groupname 文档的路径
案例:将刚才oo目录的所有用户组名改为admin
#chgrp -R admin /oo
思考? 如何通过一个命令实现既可以更改所属的用户,也可以修改所属的用户组呢?
答:可以实现的,通过chown命令
语法:#chown [-R] username:groupname 文档路径
6. sudo
问题? reboot、shutdown、init、halt,在普通用户身份上都是操作不了,但是有些特殊的情况下又需要有执行权限。又不可能让root用户把自己的密码告诉普通用户,这个问题该怎么解决?
该问题是可以被解决的,可以使用sudo(switch user do)命令来进行权限设置。Sudo可以让管理员(root)事先定义某些特殊命令谁可以执行。
默认sudo中是没有除root之外用户的规则,要想使用则先配置sudo。
Sudo配置文件:/etc/sudoers 该文件默认只读,不允许修改,因此不能直接修改。
- 配置
sudo
文件请使用visudo
,打开之后其使用方法和vim一致 - 配置普通用户的权限

上图的98行说明:
- Root表示用户名,如果是用户组,则可以写成“%组名”
- ALL:表示允许登录的主机(地址白名单)
- (ALL):表示以谁的身份执行,ALL表示root身份
- ALL:表示当前用户可以执行的命令,多个命令可以使用“,”分割
案例:使用admin这个用户,赋予其添加用户权限。
注意:在写sudo规则的时候不建议写直接形式的命令,而是写命令的完整路径。
路径可以使用which(whereis亦可)命令来查看
语法:#which 指令名称
Whereis会找出一些非可执行文件,建议使用which
root@toby:~# which useradd
/usr/sbin/useradd
root@toby:~# whereis useradd
useradd: /usr/sbin/useradd /usr/share/man/man8/useradd.8.gz
root@toby:~#
所以whereis
指令返回的内容比较多, 我们使用which
指令即可

如果需要更多的命令, 后面的用,
分隔即可
在添加好对应的规则之后就可以切换用户,切换到普通用户admin,再去执行:

此时要想使用刚才的规则,则以以下命令进行:
sudo 需要执行的指令(就是放权的指令名称)

此时输入的密码是当前执行sudo指令的用户的密码,而非root密码。
在输入sudo指令之后需要输入当前的用户密码进行确认的操作(不是root用户密码),输入之后在接下来5分钟内再次执行sudo指令不需要密码。
补充:
在普通用户下怎么查看自己具有哪些特殊权限呢?
sudo -l 表示list

最后:sudo不是任何Linux分支都有的命令,常见centos与ubuntu都存在sudo命令。