Linux用户权限管理

2023/11/13

最近突然碰到有关用户授权的问题了,发现自己真的是一点都不会,所有写篇博客记一下常见指令以及碰到过的坑。

1. 常用指令

1.1 用户

  • 新增用户:useradd [username]
  • 设置用户密码:passwd [username]
  • 删除用户:userdel [username]
  • 将用户添加到用户组(a为追加):usermod -aG [groupname] [username]

1.2 用户组

  • 新建用户组:groupadd [groupname]

1.3 授权

1.3.1 chown

chown用于修改文件/文件夹的所属权以及其所属的用户组。

修改文件/文件夹所属用户
chown [username] [directory/file] # 递归授权 chown -R [username] [directory]
shell
修改文件/文件夹所属用户组
chown :[usergroup] [directory/file] # 递归授权 chown -R :[usergroup] [directory]
shell
修改文件/文件夹所属用户和用户组
chown [username]:[usergroup] [directory/file] # 递归授权 chown -R [username]:[usergroup] [directory]
shell

1.3.2 chmod

chmod用于细化对所有者,用户组,以及其它用户的相关权限。

一共用三种类型的用户,它们的名字以及符号为:

  • 所有者:u
  • 用户组:g
  • 其它:o

例如使用ll输出的信息:

drwx--x--x 2 username groupname83 11月 13 15:28 folder
shell

第一部分开头的字符表示的是文件的类型:

  • 文件夹:d
  • 文件: - (一个横杠,不管是可执行文件还是普通文件)

后面连续9个字符,每3个为一组,分别表示用户所有者、用户组、其它用户的权限。 例如上面的例子:

  • 所有者:可读(r)、可写(w)、可执行(x)
  • 用户组:可执行(x)
  • 其它:可执行(x)
修改用户权限

例如要给用户组(u)添加读和写的权限:

chmod g+rw [directory/file] chmod -R g+rw [directory]
shell

移除权限:

chmod g-rw [directory/file]
shell

很简单,也就是中间有个加减符号,其实还有个等号,这个就类似于替换了,会覆盖掉之前的权限。

另外,给所有用户授权用a就行了:

chmod a+rw [directory/file]
shell

其实也可以用数字替代rwx,但是这样有点不便于记忆。。

2. 应用

2.1 文件夹授权了却打不开?

提问:是不是只要某个用户有一个文件夹的读权限,就能打开文件夹了?

大部分可能都会是这样认为的,这也确实比较符合我们的认知,都能读了,还不能打开文件夹?

那么实际呢?我们来试一下。

我们用测试用户(testuser)来进行测试:

[testuser@localhost opt]# ll drwx---r-- 2 root root 36 11月 13 16:44 backup
shell

这里我们可以看到,testuser拥有backup文件夹的读权限,尝试进入一下:

[testuser@localhost opt]$ cd backup bash: cd: backup: 权限不够
shell

发现权限是不够的...

这里也不卖关子了,这里其实是需要执行权限才能进入文件夹,这里也是比较容易忽略的一点。

2.2 可执行文件授权了却打不开?

提问:是不是某个用户只要有一个文件的可执行权限,就可以直接执行文件了?

这里就不卖关子了,答案是不一定。

同样这也是一个非常容易被忽略的问题,以为只要给了可执行权限就能执行了。

来演示一下反例:

drwx------ 2 bim root 36 11月 13 16:44 backup
shell

这里我们的backup文件夹里面放有可执行文件,但是这个文件夹没有对外授权。

[root@localhost backup]# ll 总用量 23796 -rwx-----x 1 bim root 12691576 11月 13 16:44 mysql [root@localhost backup]# pwd /opt/backup
shell

在里面的可执行文件mysql,对其它人拥有可执行权限,我们来切换用户试一下:

[root@localhost backup]# su testuser [testuser@localhost backup]$ /opt/backup/mysql bash: /opt/backup/mysql: 权限不够
shell

可以发现权限不够,即使你拥有可执行权限。

解决方法在前面也说了,只需要给可执行文件的父目录,也就是这里的backup目录授权可执行就行了,这里就不多演示了。