linux[]用户用户组文件文件夹权限汇总

查看用户的UID GID信息

id username

每一个用户只有唯一的uid,可以有多个gid,主gid是第一个,
副gid可以有很多。

1
uid=1052(zqchen) gid=1052(zqchen) groups=1052(zqchen),10(wheel),1011(vglusers),10002(SharedUsers)

在 Linux 中,一个用户是可以属于多个组的,一个组也是可以包含多个用户的

查看系统中有多少用户和用户组

1
compgen -u  查看用户信息
1
compgen -g   查看用户组信息

创建用户和同名用户组

结果基本是类似的,因为每个用户在被创建的时候都会自动创建一个同名的组作为其默认的用户组。
adduser zqchen
useradd -g test phpq //新建phpq用户,并设置用户主组的名字为test 不建议这么使用

adduser phpq ## 新建用户,并设置用户组 phpq

给已有用户加组

修改非主group

usermod -G groupname username 修改非主group,剩下主group和新修改的group

追加新的group

usermod -aG groupname username 为用户添加新的group

删除用户

userdel –r 用户名 删除用户 -r 选项会自动删除用户家目录 推荐
userdel peter 删除用户

groupdel peter 删除用户的同名组别

usermod –G peter peter (强制删除该用户的主目录和主目录下的所有文件和子目录)删除用户的目录

查看当前用户属于哪些组group

groups zqchen
或者
id zqchen

查看用户组下有多少个用户

members SharedUsers ubuntu中的命令
getent group SharedUsers centos中的命令

主工作组 普通工作组

主工作组 有 gid 编号的主工作用

id username

修改用户组的gid编号

在修改之前先查看有没有被使用

cat /etc/passwd | grep 30003
usermod -u 3003 postgres

usermod: user xxx is currently used by process xxxx

彻底退出这个用户,用户直接进入root 或者从其他用户切换到root

groupmod -g 3003 postgres

添加新的用户组

sudo groupadd docker

设置用户密码为空,情况用户密码

passwd -d zqchen

文件的类型

在linux中一切都是文件,文件夹也可以看成是文件。
ll xxx
文件的权限一共占据10位。

1
2
[xxx@CADD4 ~]$ ll /etc -d
drwxr-xr-x. 164 root root 12288 Dec 25 13:27 /etc

第一位是文件的类型。然后依次文件的所有者权限,文件所在组的权限,其他用户的权限。
rwx 对于文件而言是可读可写可执行权限。
rxw 对于文件夹而言是可读可写可访问进入权限

查看文件的权限

ll file

查看文件夹的权限

ll dir -d

给普通用户添加sudo 权限

方法一 修改sudoers 文件:
sudoers 文件属于root组的root用户,只有uers 和 group 只有可读的权限。

1
-r--r-----. 1 root root 4252 Sep  4 11:17 /etc/sudoers

)切换到root用户,添加可写权限,编辑vim /etc/sudoers 添加以下内容:

1
2
3
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
username ALL=(ALL) ALL
1
2
3
4
5
6
cd /etc
su # 切换到 root账号
chmod +w sudoers ## 等价于 chmod u+w sudoers 给文件的用户添加可写权限
vi sudoers # 添加用户拥有 sudo 权限,然后保存
chmod -w sudoers # 恢复文件的可读权限,**如果不恢复权限,可能会报错**
exit # 退出sudo账号

如果不恢复权限,可能会报错

方法二(推荐) 把用户添加到wheel(sudo)组:

sudoers 中定义了哪个组的用户有sudo 权限。在centos中是wheel组,而unbuntu 中是sudo组。

1
2
## Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALL

1
2
3
4
su
usermod -aG wheel zqchen
exit
exit #退出账号,重新连接才能生效。

第二种方法需要退出账号,重新连接才能生效。

实践 共享文件

共享用户文件给其他用户

为什么所有的用户都能看到 home 目录

给目录加x 就可以访问目录了
因为home目录具有o+x的权限

在当前用户的 ~ 目录下新建一个文件夹

该文件夹的权限是drwxrwxr-x 用户 group o 都可以看得到。

自己的账号目录 默认是只有自己可以看到的

ll /home/*/ -rtlhd
如果要想让其他人能访问你的文件,至少要让你的主目录(主文件夹)添加一个g+x权限或者o+x 权限

用户组应用场景

上述信息可以清楚地看到,关于如何使用非root用户对docker进行管理,由于Docker的守护进程会绑定Unix Socket而不是使用TCP端口方式,而缺省情况下Unix socket为root用户所有,其他用户只能通过sudo来进行访问,所以Docker的守护进程只能以root用户进行启动。

如果不希望在docker命令前面添加sudo进行执行,这时可以创建一个名为docker的Unix Group并向这个Group中添加用户,当Docker守护进程启动的时候,守护进程会创建一个Unix Socket文件,而docker这个group的成员对于该文件具有访问权限。

nfs部署的注意事项

我在部署nfs的时候,共享了一个文件夹。为了让远程nfs客户端挂载这个文件夹的时候都有可读写权限,我需要把服务器上的用户uid、gid设置成nfs服务端文件夹一样的权限。不过因为之前新建的用户uid、gid都是系统自动生成的,几台服务器之前某个用户的uid、gid可能都不一样,所以现在需要把这个uid、gid都设置成统一某个值。

修改用户uid和组gid的命令分别是usermod和groupmod,思路很简单。先使用usermod修改用户的uid,然后使用groupmod修改组的gid,最后使用chown和chgrp命令修改原来用户文件和目录的属主属组。

例如测试用户foo和测试组foo。

把 CADD2 上的用户的UID 修改为 3003 和CADD0 一致

[root@L01CADD00 user]# id postgres
uid=3003(postgres) gid=3003(postgres) groups=3003(postgres)
同一个用户和NFS 上的用户 同一个uid 和gid 就有相同的权限了

可执行文件

普通用户 which 不能探测到sbin下面的可执行文件。

在Linux中,绝大多数可执行文件都保存在/bin、/sbin、/usr/bin、/usr/sbin

/bin(binary)是二进制可执行目录,主要是具体应用

/sbin(system binary)是系统管理员专用的二进制代码存放目录,主要用于系统管理

/usr/bin(user command for application)后期安装的一些软件

/usr/sbin(superuser command for application)超级用户的一些管理程序

参考

  1. https://www.cnblogs.com/wyl9527/p/6495444.html
  2. https://www.jianshu.com/p/f6d9a27f5cfc
  3. https://blog.csdn.net/liumiaocn/article/details/88651955
  4. https://askubuntu.com/questions/515103/how-can-i-display-all-users-and-groups-with-a-command
  5. https://askubuntu.com/questions/477551/how-can-i-use-docker-without-sudo
  6. https://blog.51cto.com/12127893/1861688