目录
[-m -g -d的组合使用](#-m -g -d的组合使用)
[用户删除 userdel](#用户删除 userdel)
[组创建 groupadd](#组创建 groupadd)
[组删除 groupdel](#组删除 groupdel)
[修改用户所在主组或附加组 usermod](#修改用户所在主组或附加组 usermod)
[用户信息查询 id/getent passwd](#用户信息查询 id/getent passwd)
[getent passwd](#getent passwd)
[组信息查询 getent group](#组信息查询 getent group)
[文件或目录权限更改 chmod](#文件或目录权限更改 chmod)
[更改文件或目录所属用户和组 chown](#更改文件或目录所属用户和组 chown)
用户和组及权限简单介绍
Linux中为了做到权限的隔离,设置了用户和组,不同的用户和组的权限都是不同的不同的
权限一般分为可读,可写,可执行
其中权限最大的为root,也就是超级管理员用户,家目录位于/root,拥有对所有文件的读,写,执行权限,包括系统文件
普通用户一般只具有自己家目录内文件的读,写,执行权限,其它文件需要视root或其它用户对所有文件的权限开放程度而定,普通用户的家目录一般位于/home/家目录名
用户及组创建和删除
用户创建useradd
用户创建使用useradd命令,可用option选项为-m,-g,-d
-m 表示make a home directory,也就是再创建用户的时候会再/home/目录下生成一个和用户名相同的目录名,若不使用-m则不会自动创建
-g表示 group,就是指定一个已经存在的组让user加入,不会自动创建用户同名组
-d表示directory,表示指定一个user的家目录
不带有任何选项的命令
useradd john
这个命令会创建用户john,并会自动创建名为john的组
-m创建用户john
useradd -m john
这样会再创建用户john的同时创建/home/john作为用户john的家目录
-g创建用户john
若此时有一个已存在的组 developers,那么如果要指定john所属于这个组
useradd -g developers john
-d创建指定家目录的用户john
若此时要设置家目录为自定义路径/data1/deve/john
useradd -d /data1/deve/john john
-m -g -d的组合使用
由于-m和-d都用于创建家目录,所以看似冲突,实际组合使用的时候,我们以以下命令为例
useradd -m -g developers -d /data1/deve/john john
这个命令会同时创建/home/john和/data1/deve/john两个目录,但是john最终的家目录为/data1/deve/john,并且所属组为developers
用户删除 userdel
用户删除使用命令userdel,可选options为-r,若不使用-r则不会自动删除用户的家目录
所以若想要完整地删除用户john及其家目录则需执行
userdel -r john
用户密码设置
若要为用户设置密码则需要在
useradd john
后执行
passwd john
之后系统会让你输入两次密码进行确认
组创建 groupadd
组创建有两种方式,一种是创建用户时使用-m创建同名组,一种是手动创建
手动创建方式为
groupadd 组名称
若要创建developers组
则执行
groupadd developers
组删除 groupdel
组删除只需要执行
groupdel 组名称
若要删除developers组
则执行
groupdel developers
主组和附加组
主组也就是primary group,是用户在创建的时候指定的组,也就是通过自动创建同名的组或者-g指定的组就是主组,主组只能有一个
附加组也就是supplementary group,是指用户后期通过指定附加组进行加入的,可以加入不止一个附加组,方法为usermod
修改用户所在主组或附加组 usermod
usermod,也就是user modify,一般用于修改用户组信息
常用option为 -G,-g,以及使用-aG,a一般配合G一起使用,G指的就是supplementary groups,g指的是primary group,-aG的作用是额外追加附加组,不会消除已经加入的附加组,单独只用-G会消除当前已加入的附加组
-g用于替换主组
更换或添加附加组
若使用
useradd -m john
则用户john属于组john
若还想让john加入额外组developers
则执行
usermod -G developers john
若再加入developers后还要加入组club
则执行
usermod -aG club john
若想要一次性加两个附加组,可以执行
usermod -G developers,club john
更换主组
若本来的主组为john,要想更换主组为developers
则执行
usermod -g developers john
用户及组的信息查询
用户信息查询 id/getent passwd
用户信息查询一般有两种方式
一是使用 id 用户名称
二十使用 getent passwd 用户名称
id
使用id查询用户信息一般使用
id 用户名称
比如id john
返回结果样例如下
uid=UID(username) gid=GID(groupname) groups=GID1(groupname1),GID2(groupname2),...
uid为用户id
gid为主组id
groups里为加入的附加组的id
getent passwd
getent的全称是get entry,目的是获取到/etc/下的数据
getent passwd会返回/etc/passwd中的所有内容
每一条的样例如下
username:password:UID:GID:gecos:home_directory:shell
username为用户名称
password为密码一般用x掩盖
UID为用户id
GID为主组id
gecos为General Electric Comprehensive Operating System的缩写,表示用户用户描述信息,可能为空
home_directory为家目录
shell为执行终端,默认为/bin/bash
由于getent passwd会返回所有用户信息
可以选择getent passwd 用户名称进行执行用户信息输出
如要输出john用户的信息,可以执行
getent passwd john
组信息查询 getent group
getent group会获取/etc/group里的所有组信息
每一条的样例如下
group_name:password:GID:members
group_name为组名
password一般由x掩盖
GID为组号
members为作为附加组属于的用户列表
权限详解
drwxr-xr-x 31 root root 4096 8月 25 04:25 anaconda3
-rw-r--r-- 1 root root 0 9月 9 07:18 tt.txt
lrwxrwxrwx. 1 root root 8 3月 7 2019 sbin -> usr/sbin
上面是三条文件的long listing显示的详细信息,可以看到最左边的字段是一个长度为10的字符串,下面对其进行详细解读
可以看到最左边的字符一共有三种,分别为d,-,l分别代表了三种类型,分别为directory目录,-代表文件,l代表symbolic link也就是软链接
可以看到软链接的目标是sbin -> usr/sbin
那么后9个字符,可以看到是由rwx-四个字符进行排列组合而成
9个字符要从左往右3,3拆分
我们以第一个anaconda3为例
rwxr-xr-x拆分为
rwx r-x r-x
rwx分别代表了read,write,execute,也就是读权限,写权限,可执行权限,注意,rwx的顺序不可变,如不具有某个权限则使用-
那么rwx r-x r-x进行拆分的原因为三个权限所对应的用户不同
从左至右分别对应 文件所属用户的权限,文件所属组的权限,其他用户的权限
权限字符串后的数字为硬链接数
root root代表了文件所属用户为root,所属组为root组
再之后的数字为文件或目录大小(字节数)
再之后8月 25 04:25为文件或目录最后修改时间
最后为文件或目录的名称
文件或目录权限更改 chmod
对于问卷或目录里的权限更改只有文件所属用户或者root用户可以更改,、
chmod的全称是change mode
用法有两种
根据用户类别分别更改
完整用法
完整用法会分别设置u(user),g(group),o(others)的权限,多个设置间用逗号间隔,例如
chmod u=rw,g=w,o=re /root/tt.txt
这里设置tt.txt的权限为所属用户可读可写,同组用户可读,其他用户可读可执行
简要写法
简要写法只要补充对应类别要补充或删除的权限,多个更改设置间用逗号间隔,例如
chmod u+rx,g+w /root/tt.txt
这里的作用为为所属用户添加可读和执行权限,为同组用户添加可写权限
根据3位数字进行权限设置
根据3位数字分别代表文件所属用户权限,所属组权限,其他用户权限
每位数字从0-7分别代表3位2进制数的转化
例如二进制数111,每一位从左到右分别对应r,w,x的权限,1为有,0为无,如rwx权限全具备则为111,转化为十进制就为7
所以不同数字的意义如下
0:无任何权限, 即 ---
1:仅有x权限, 即 --x
2:仅有w权限 即 -w-
3:有w和x权限 即 -wx
4:仅有r权限 即 r--
5:有r和x权限 即 r-x
6:有r和w权限 即 rw-
7:有全部权限 即 rwx
所以这里chmod的使用样例为
chmod 751 /root/tt.txt
这里将tt.txt所属用户具有全部权限,所属组具有可读和执行的权限,其它用户具有执行权限
根据分配权限需要可自行组合数字
更改文件或目录所属用户和组 chown
chown的全称为change owner
只有root用户有权限修改文件或目录所属的用户和组
更改文件或目录所属用户
更改文件所属用户
用法为
chown 要更改为的用户名称 文件路径
例如
chown root /home/john/tt.txt
这里将john家路径下的tt.txt所属用户转换给了root
更改目录所属用户
用法为
chown -R 要更改为的用户名称 目录路径
这里的-R 表示recursion(递归),因为要递归遍历整个目录的文件都转移所属用户
例如
chown -R root /home/john/libra/
这里将john家路径下libra目录所属用户转换给了root
更改文件所属组
用法为
chown :要更改为的用户名称 文件路径
例如
chown :root /home/john/tt.txt
这里将john家路径下的tt.txt所属用户转换给了root组
更改目录所属组
用法为
chown -R 要更改为的用户名称 目录路径
这里的-R 表示recursion(递归),因为要递归遍历整个目录的文件都转移所属组
例如
chown -R :developers /home/john/libra/
这里将john家路径下libra目录所属组转换给了developers