用户组
注意:普通用户只能查看有哪些组,不能创建/修改/删除,会提示:用户名 is not in the sudoers file.This incident will be reported.
groupadd 用户组名 | 新建用户组 |
---|---|
cat /etc/group | 查看有哪些组(普通用户可以操作) |
groupmod -n 新组名 旧组名 | 修改组名 |
groupdel 用户组名 | 删除用户组 |
用户
创建用户时:
- 为用户创建家目录和邮箱文件,家目录名和邮箱文件名都与用户名相同。家目录在/home目录下,若修改用户名,家目录名不会修改。邮箱文件在/var/spool/mail目录下,若修改用户名,邮箱名会自动修改。
- 若没有指定组,会创建组,组名与用户名相同。
- 将用户名、密码和组,分别记录在/etc/passwd、/etc/shadow、/etc/group中。
删除用户时:
- 使用-r,则删除用户时,也删除相关联的文件。
- 若没有使用-r,则只删除/etc/passwd、/etc/shadow里的记录,不会删除家目录、邮箱文件。重新创建该用户,会提示"the home directory already exists,creating mail file:file exists",可以手动删除家目录和邮箱文件,再创建用户。
普通用户只能查看有哪些用户和修改自己的密码,其他操作几乎都没有权限。
useradd 用户名 | 新建用户 | |
---|---|---|
useradd -g 组名 用户名 | 新建用户时指定组 | |
passwd 用户名 | 给用户设置密码 | |
passwd | 用户修改自己的密码(普通用户可以操作) | 密码限制比较多 |
id 用户名 | 查看是否有某用户(普通用户可以操作) | |
cat /etc/passwd | 查看有哪些用户(普通用户可以操作) | |
cat /etc/shadow | /etc/shadow:存放用户密码的文件 | |
usermod -l 新用户名 用户名 | 修改用户名,-l(小写字母l) | |
usermod -u 新id 用户名 | 修改用户id | |
usermod -g 新组名 用户名 | 修改用户所属组 | |
usermod -G 新附加组名 用户名 | 修改用户所属的附加组 | |
usermod -d 目标路径 用户名 | 修改用户登录后的默认目录 | |
usermod -L 用户名 | 锁定某用户密码 | |
usermod -U 用户名 | 解除密码锁定 | |
lchage -l 用户名 | 查看用户状态,-l(小写字母l) | |
userdel 用户名 | 删除用户 | |
userdel -r 用户名 | 删除用户及其关联文件 |
文件权限(ugo权限)
通过 ls -l 或者 ll 查询到的以详细信息显示的目录下所有文件,最前面信息就是各文件的权限。文件权限,又称为ugo权限。
# 查看当前目录下所有文件的权限
ls -l
ll
从左向右前10个字符依次说明:
- 第1个字符是文件类型: - 文件,d 目录,l 软链接(类似Windows中的快捷方式)。
- 接下来3个字符是文件所属用户的权限,即user,简写u。
- 再接下来3个字符是文件所属组的权限,即group,简写g。
- 最后3个字符是其他组用户的权限,即other,简写o。
- 权限:3个字符,依次为r(读),w(写),x(可执行),若没有某权限,则为 -(没有某权限,取决于字符位置)。
权限 | 说明 | 权限值 | 文件权限说明 | 目录权限说明 | 说明 |
---|---|---|---|---|---|
r | read,读 | 4 | 可以读取文件内容 | 可以查看目录下有哪些文件 | 若为-,则没有读权限 |
w | write,写 | 2 | 可以往文件写入内容 | 可以在目录下创建/修改/删除文件 | 若为-,则没有写权限 |
x | execute,可执行 | 1 | 可以执行文件 | 可以使用cd切换到该目录 | 若为-,则没有可执行权限 |
0 | --- |
1 | --x |
2 | -w- |
3 | -wx |
4 | r-- |
5 | r-x |
6 | rw- |
7 | rwx |
权限掩码:创建文件或目录时,屏蔽的默认权限。是一个3位的八进制数字。
- root 默认权限掩码是022(即所属组的写权限,其他用户的写权限),即root创建的文件或目录,所属组和其他用户的写权限都被屏蔽了。
- 普通用户默认权限掩码是002(即其他用户的写权限),即普通用户创建的文件或目录,其他用户的写权限被屏蔽了。
文件的初始权限值=0666-权限掩码值。目录的初始权限值=0777-权限掩码值。
- root用户,文件的初始权限值是644(即-rw-r--r--),目录的初始权限值是755(即drwxr-xr-x)。
- 普通用户,文件的初始权限值是664(即-rw-rw-r--),目录的初始权限值是775(即drwxrwxr-x)。
# 查询权限掩码值
umask
可在/etc/profile修改权限掩码,但只有root有权限。
chmod命令(change mode):控制用户对文件的权限。
用户:u 所属用户,g 所属组, o 其他用户,a 或者 ugo 所有用户。
操作:+ 添加权限,- 取消权限。
权限:r 读权限,w 写权限,x 可执行权限。
# 给所属组(g)添加写权限(w)
chmod g+w 文件名或目录名# 给所属组(g)取消写权限(w)
chmod g-w 文件名或目录名# 给所属组(g)和其他用户(o)添加可执行权限(x)
chmod g+x,o+x 文件名或目录名# 给所属组(g)和其他用户(g)取消可执行权限(x)
chmod go-x 文件名或目录名# 当前目录和子目录下所有文件,给所有用户添加读权限(r)
chmod -R a+r *
也可以使用数字表示权限。
# 755:依次为所属用户权限-所有(rwx),所属组权限-可读可执行(r-x),其他用户权限-可读可执行(r-x)
chmod 755 文件名或目录名
chown命令(change owner):修改文件的用户或组。
注意:chown命令需要root权限才能执行。指定的用户或组可以使用用户名或用户id,组名或组id。
# 修改文件的所属用户(使用 用户名)
chown 新用户名 文件名或目录名# 修改文件的所属组(使用 组id)
chown :新组名id 文件名或目录名# 修改文件的所属用户和组
chown 新用户名:新组名 文件名或目录名# 修改当前目录和子目录下所有文件的所属用户和所属组
chown -R 新用户名:新组名 *
suid(set owner user id up on execution):特殊的文件权限,暂时给予使用者所属用户的权限。
设置suid,就是在文件执行过程中,将所属用户的权限和id 给予使用者。所有用户都可以暂时以文件所属用户的身份执行文件。
只能二进制文件设置suid,设置在所属用户可执行权限位,一般用于需要root权限的命令。
在查看目录下文件详细信息时,文件权限的所属用户可执行权限位一般是x(可执行) 或 - (没有可执行权限),若为s(小写s)则设置了suid,则所有用户都可以暂时以文件所属用户的身份执行文件。若为S(大写s)则权限无效(即所属用户没有执行权限)。
使用chmod命令设置或取消suid(u-s:取消。u+s:添加)。也可以使用数字设置或取消suid(0:取消。4:添加suid),使用数字需小心。
# 设置suid
chmod u+s 文件名# 取消suid
chmod u-s 文件名# 设置suid(4:添加suid)
# 755:依次为所属用户权限-所有(rwx),所属组权限-可读可执行(r-x),其他用户权限-可读可执行(r-x)
chmod 4755 文件名# 取消suid(0:取消suid)
chmod 0755 文件名
sgid(set group id):特殊的文件权限,给予使用者所属组的权限。
目录(文件夹)设置sgid,设置在所属组可执行权限位,一般用于共享目录(文件夹)。
在查看目录下文件详细信息时,文件权限中所属组可执行权限位一般是x(可执行) 或 - (没有可执行权限),但若是s(小写s),则该目录下,所有用户创建的文件的所属组都与目录的所属组相同。若为S(大写s),则权限无效(即所属组没有执行权限)。
使用chmod命令设置或取消sgid(g-s:取消。g+s:添加)。也可以使用数字设置或取消sgid(0:取消。2:添加sgid),使用数字需小心。
注意:若sgid和sticky都设置时,若使用数字取消sgid,可能sgid没取消,反而把sticky取消。
# 添加sgid
chmod g+s 目录名# 取消sgid
chmod g-s 目录名# 添加sgid(2:添加)
# 777:依次为所属用户权限-所有(rwx),所属组权限-所有(rwx),其他用户权限-所有(rwx)
chmod 2755 目录名# 取消sgid(0:取消)
chmod 0755 目录名
sticky(sticky bit):粘滞位。特殊的文件权限,普通用户只能删除自己的文件。
目录(文件夹)设置sticky,设置在其他用户可执行权限位,一般用于公共目录(文件夹)。
在查看文件详细信息时,文件权限中其他用户可执行权限位一般是x(可执行) 或 - (没有可执行权限),但若是t,则该目录下,目录所属用户和root可以删除该目录下的文件,普通用户只能删除自己创建的,不能删除其他用户创建的。若是T,则权限无效(即其他用户没有执行权限)。
使用chmod命令设置或取消sticky(o-t:取消,o+t:添加)。也可以使用数字设置或取消sticky(0:取消,1:添加sticky),使用数字需小心。
# 添加sticky
chmod o+t 目录名# 取消sticky
chmod o-t 目录名# 添加sticky(1:添加)
# 777:依次为所属用户权限-所有(rwx),所属组权限-所有(rwx),其他用户权限-所有(rwx)
chmod 1777 目录名# 取消sticky(0:取消)
chmod 0777 目录名
su 命令(switch user): 普通用户和root之间切换。
普通用户和root之间可以进行切换。但普通用户切换到root,需要root密码。而root可以直接切换到普通用户。
whoami | 显示当前用户 | |
---|---|---|
su - root | 普通用户切换到root用户 (普通用户可以操作,需输入root密码) | 效果等同于 su - |
su - 普通用户名 | root用户切换到普通用户,当前目录也切换到普通用户的家目录 (无需密码) | |
su 普通用户名 | root用户切换到普通用户,当前目录不会切换 (无需密码) | |
exit | 返回原用户 |
sudo命令(superuser do):root授权一部分权限给普通用户。
root授权一部分权限给普通用户,普通用户登录自己的账号通过"sudo 命令"使用root身份执行命令,而不需要root密码。
/etc/sudoers配置文件(记录授权用户和权限),只有root能修改。 使用visudo可直接修改配置文件。
# vi/vim修改配置文件
vi /etc/sudoers# 直接修改配置文件
visudo
若被授权,普通用户可以登录自己的账号,使用sudo执行命令(需输入自己的密码)。
若没有被授权,则提示用户不在sudoers配置文件中。
# 查看自己的权限(执行sudo的使用者)
sudo -l
Linux中“一切皆文件”,文件权限设置时,需慎重。