Search K
Appearance
Appearance
注意
UID 是不能冲突的,而且管理员创建的普通用户的 UID 默认是从 1000 开始的(即使前面有闲置的号码)。
注意
id 命令用于显示用户的详细信息,语法格式为 id 用户名。[linuxprobe@linuxprobe ~]$ id linuxprobe
uid=1000(linuxprobe) gid=1000(linuxprobe) groups=1000(linuxprobe),10(wheel)useradd 命令用于创建新的用户账户,语法格式为 useradd [参数] 用户名。
useradd 命令中的参数以及作用:
| 参数 | 作用 |
|---|---|
-d | 指定用户的家目录(默认为 /home/username) |
-e | 账户的到期时间,格式为 YYYY-MM-DD. |
-u | 指定该用户的默认 UID |
-g | 指定一个初始的用户基本组(必须已存在) |
-G | 指定一个或多个扩展用户组 |
-N | 不创建与用户同名的基本用户组 |
-s | 指定该用户的默认 Shell 解释器 |
[linuxprobe@linuxprobe ~]$ useradd linuxcool
useradd: Permission denied.
useradd: cannot lock /etc/passwd; try again later.
[linuxprobe@linuxprobe ~]$ su - root
Password:
[root@linuxprobe ~]# useradd linuxcool
[root@linuxprobe ~]# id linuxcool
uid=1001(linuxcool) gid=1001(linuxcool) groups=1001(linuxcool)
[root@linuxprobe ~]#
[root@linuxprobe ~]# useradd -d /home/linux -u 8888 -s /sbin/nologin linuxdown
[root@linuxprobe ~]# id linuxdown
uid=8888(linuxdown) gid=8888(linuxdown) groups=8888(linuxdown)
[root@linuxprobe ~]# ls /home/
linux linuxcool linuxprobe
[root@linuxprobe ~]#groupadd 命令用于创建新的用户组,语法格式为 groupadd [参数] 群组名。[root@linuxprobe ~]# groupadd ronny
[root@linuxprobe ~]#usermod 命令用于修改用户的属性,英文全称为 user modify,语法格式为 usermod [参数] 用户名。
usermod 命令中的参数以及作用:
| 参数 | 作用 |
|---|---|
-c | 填写用户账户的备注信息 |
-d -m | 参数 -m 与参数 -d 连用,可重新指定用户的家目录并自动把旧的数据转移过去 |
-e | 账户的到期时间,格式为 YYYY-MM-DD |
-g | 变更所属用户组 |
-G | 变更扩展用户组 |
-L | 锁定用户禁止其登录系统 |
-U | 解锁用户,允许其登录系统 |
-s | 变更默认终端 |
-u | 修改用户的 UID |
[root@linuxprobe ~]# id linuxprobe
uid=1000(linuxprobe) gid=1000(linuxprobe) groups=1000(linuxprobe),10(wheel)
[root@linuxprobe ~]#
[root@linuxprobe ~]# usermod -G root linuxprobe # 将用户 linuxprobe 加入到 root 用户组中
[root@linuxprobe ~]# id linuxprobe
uid=1000(linuxprobe) gid=1000(linuxprobe) groups=1000(linuxprobe),0(root)
[root@linuxprobe ~]#
[root@linuxprobe ~]# usermod -u 8888 linuxprobe # 修改 linuxprobe 用户的 UID 号码值
[root@linuxprobe ~]# id linuxprobe
uid=8888(linuxprobe) gid=1000(linuxprobe) groups=1000(linuxprobe),0(root)
[root@linuxprobe ~]#
[root@linuxprobe ~]# usermod -s /sbin/nologin linuxprobe # 把用户的解释器终端由默认的 /bin/bash 修改为 /sbin/nologin
[root@linuxprobe ~]# su - linuxprobe
This account is currently not available.passwd 命令用于修改用户的密码、过期时间等信息,英文全称为 password,语法格式为 passwd [参数] 用户名。
passwd 命令中的参数以及作用:
| 参数 | 作用 |
|---|---|
-l | 锁定用户,禁止其登录 |
-u | 解除锁定,允许用户登录 |
--stdin | 允许通过标准输入修改用户密码,如 echo "NewPassWord" | passwd --stdin Username |
-d | 使该用户可用空密码登录系统 |
-e | 强制用户在下次登录时修改密码 |
-S | 显示用户的密码是否被锁定,以及密码所采用的加密算法名称 |
[root@linuxprobe ~]# passwd # 修改 root 用户密码
Changing password for user root.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.
[root@linuxprobe ~]# passwd linuxprobe # 修改 linuxprobe 用户密码
Changing password for user linuxprobe.
New password:
BAD PASSWORD: The password is a palindrome
Retype new password:
passwd: all authentication tokens updated successfully.
[root@linuxprobe ~]#
[root@linuxprobe ~]# passwd -l linuxprobe # 锁定 linuxprobe 用户,禁止其登录
Locking password for user linuxprobe.
passwd: Success
[root@linuxprobe ~]# passwd -S linuxprobe # 显示用户的密码是否被锁定
linuxprobe LK 2023-06-11 0 99999 7 -1 (Password locked.)
[root@linuxprobe ~]#
[root@linuxprobe ~]# passwd -u linuxprobe # 解除 linuxprobe 锁定,允许用户登录
Unlocking password for user linuxprobe.
passwd: Success
[root@linuxprobe ~]# passwd -S linuxprobe
linuxprobe PS 2023-06-11 0 99999 7 -1 (Password set, SHA512 crypt.)
[root@linuxprobe ~]#userdel 命令用于删除已有的用户账户,英文全称为 user delete,语法格式为 userdel [参数] 用户名。userdel 命令中的参数以及作用:| 参数 | 作用 |
|---|---|
-f | 强制删除用户 |
-r | 同时删除用户及用户家目录 |
[root@linuxprobe ~]# userdel linuxcool # 删除 linuxcool 用户及用户家目录
[root@linuxprobe ~]# id linuxcool
id: ‘linuxcool’: no such user
[root@linuxprobe ~]# ls /home/ # 用户已被删除,但家目录数据会继续存放在 /home 目录中
linux linuxcool linuxprobe
[root@linuxprobe ~]# rm -rf /home/linuxcool
[root@linuxprobe ~]# userdel -rf linuxdown # 删除 linuxdown 用户及用户家目录
[root@linuxprobe ~]# ls /home/
linuxprobe
[root@linuxprobe ~]#read 表示能够读取目录内的文件列表;write 表示能够在目录内新增、删除、重命名文件;execute 则表示能够进入该目录。| 文件 | 目录 | |
|---|---|---|
| 可读(r) | cat | ls |
| 可写(w) | vim | touch |
| 可执行(x) | ./script | cd |
| 权限项 | 可读 | 可写 | 可执行 | 可读 | 可写 | 可执行 | 可读 | 可写 | 可执行 |
|---|---|---|---|---|---|---|---|---|---|
| 字符表示 | r | w | x | r | w | x | r | w | x |
| 数字表示 | 4 | 2 | 1 | 4 | 2 | 1 | 4 | 2 | 1 |
| 权限分配 | 文件所有者 | 文件所属组 | 其他用户 |


上图包含文件的类型、访问权限、所有者(属主)、所属组(属组)、占用的磁盘大小、最后修改时间和文件名称等信息。
该文件的类型为普通文件,所有者权限为可读、可写(rw-),所属组权限为可读(r--)
其他人也只有可读权限(r--)
文件的磁盘占用大小是 34298 字节
最近一次的修改时间为 4 月 2 日的 0:23
文件的名称为 install.log。
-)d)l)p)b)c)INFO
-)和目录文件(d)的身影。b)和字符设备文件(c)一般是指硬件设备,比如鼠标、键盘、光驱、硬盘等,在 /dev/ 目录中最为常见。应该很少有人会对鼠标、键盘进行硬件级别的管理吧。[root@linuxprobe ~]# ls -l /etc/shadow
----------. 1 root root 1397 Jun 11 17:39 /etc/shadow
[root@linuxprobe ~]# ls -l /bin/passwd # 所有者的权限由 rwx 变成了 rws,其中 x 改变成 s 就意味着该文件被赋予了 SUID 权限
-rwsr-xr-x. 1 root root 33544 Dec 14 2019 /bin/passwd
[root@linuxprobe ~]#INFO
加粗显示的字体用来告诫用户一定要小心这个权限,因为一旦某个命令文件被设置了 SUID 权限,就意味着凡是执行该文件的人都可以临时获取到文件所有者所对应的更高权限。因此,千万不要将 SUID 权限设置到 vim、cat、rm 等命令上面!!!
[root@linuxprobe ~]# cd /tmp
[root@linuxprobe tmp]# mkdir testdir
[root@linuxprobe tmp]# ls -ald testdir
drwxr-xr-x. 2 root root 6 Jun 11 17:56 testdir
[root@linuxprobe tmp]# chmod -R 777 testdir # 设置好目录的 777 权限, 确保普通用户可以向其中写入文件
[root@linuxprobe tmp]# chmod -R g+s testdir # 设置 SGID 特殊权限位
[root@linuxprobe tmp]# ls -ald testdir
drwxrwsrwx. 2 root root 6 Jun 11 17:56 testdir
[root@linuxprobe tmp]# su - linuxprobe
[linuxprobe@linuxprobe ~]$ cd /tmp/testdir
[linuxprobe@linuxprobe testdir]$ echo "linuxprobe.com" > test
[linuxprobe@linuxprobe testdir]$ ls -al test
-rw-rw-r--. 1 linuxprobe root 15 Jun 11 17:57 test
[linuxprobe@linuxprobe testdir]$ logout
[root@linuxprobe tmp]chmod 命令用于设置文件的一般权限及特殊权限,英文全称为 change mode,语法格式为 chmod [参数] 文件名。-R 来表示递归操作,即对目录内所有的文件进行整体操作。[root@linuxprobe ~]# ls -l anaconda-ks.cfg
-rw-------. 1 root root 1385 Jun 4 03:15 anaconda-ks.cfg
[root@linuxprobe ~]# chmod 760 anaconda-ks.cfg # 权限设置成其所有者可读可写可执行、所属组可读可写、其他人没有任何权限,则相应的字符法表示为 rwxrw----,其对应的数字法表示为 760
[root@linuxprobe ~]# ls -l anaconda-ks.cfg
-rwxrw----. 1 root root 1385 Jun 4 03:15 anaconda-ks.cfgchown 命令用于设置文件的所有者和所有组,英文全称为 change own,语法格式为 chown 所有者:所有组 文件名。-R 来表示递归操作,即对目录内所有的文件进行整体操作。[root@linuxprobe ~]# chown linuxprobe:linuxprobe anaconda-ks.cfg
[root@linuxprobe ~]# ls -l anaconda-ks.cfg
-rwxrw----. 1 linuxprobe linuxprobe 1385 Jun 4 03:15 anaconda-ks.cfg
[root@linuxprobe ~]#/tmp 作为一个共享文件的目录,默认已经设置了 SBIT 特殊权限位,因此除非是该目录的所有者,否则无法删除这里面的文件。[root@linuxprobe ~]# cd /tmp
[root@linuxprobe tmp]# echo "Welcome to linuxprobe.com" > test
[root@linuxprobe tmp]# chmod 777 test # 赋予 test 文件最大的 777 权限
[root@linuxprobe tmp]# ls -al test
-rwxrwxrwx. 1 linuxprobe linuxprobe 26 Jun 11 18:08 test
[root@linuxprobe tmp]# su - linuxprobe
[linuxprobe@linuxprobe ~]$ rm -f /tmp/test # 由于 SBIT 特殊权限位的缘故,依然无法删除该文件
rm: cannot remove 'test': Operation not permittedSUID、SGID、SBIT 特殊权限的设置参数:
| 参数 | 作用 |
|---|---|
u+s | 设置 SUID 权限 |
u-s | 取消 SUID 权限 |
g+s | 设置 SGID 权限 |
g-s | 取消 SGID 权限 |
o+t | 设置 SBIT 权限 |
o-t | 取消 SBIT 权限 |
[root@linuxprobe ~]# mkdir linux
[root@linuxprobe ~]# chmod -R linux/
chmod: missing operand after ‘linux/’
Try 'chmod --help' for more information.
[root@linuxprobe ~]# chmod -R o+t linux/ # 设置 SBIT 权限
[root@linuxprobe ~]# ls -ald linux/
drwxr-xr-t. 2 root root 6 Jun 11 18:12 linux/
[root@linuxprobe ~]#特殊权限 + 一般权限 构成的。 rwxr-xr-t 权限中 rwxr-xr-x,并带有 SBIT 特殊权限。rwxr-xr-x 即 755,而 SBIT 特殊权限位是 1rwsrwSr-- 权限中 rwxrw-r-- (执行文件有 x 权限 + 特殊权限后变为 s,没有 x 权限 + 特殊权限后变为 S),数字表示法是 764r-x-wxrwxr-s-wxrwt
chattr 命令用于设置文件的隐藏权限,英文全称为 change attributes,语法格式为 chattr [参数] 文件名称。
chattr 命令中的参数及其作用:
| 参数 | 作用 |
|---|---|
i | 无法对文件进行修改;若对目录设置了该参数,则仅能修改其中的子文件内容而不能新建或删除文件 |
a | 仅允许补充(追加)内容,无法覆盖/删除内容(Append Only) |
S | 文件内容在变更后立即同步到硬盘(sync) |
s | 彻底从硬盘中删除,不可恢复(用 0 填充原文件所在硬盘区域) |
A | 不再修改这个文件或目录的最后访问时间(atime) |
b | 不再修改文件或目录的存取时间 |
D | 检查压缩文件中的错误 |
d | 使用 dump 命令备份时忽略本文件/目录 |
c | 默认将文件或目录进行压缩 |
u | 当删除该文件后依然保留其在硬盘中的数据,方便日后恢复 |
t | 让文件系统支持尾部合并(tail-merging) |
x | 可以直接访问压缩文件中的内容 |
我们一般会将 -a 参数设置到日志文件(/var/log/messages)上,这样可在不影响系统正常写入日志的前提下,防止黑客擦除自己的作案证据。
如果希望彻底地保护某个文件,不允许任何人修改和删除它的话,不妨加上 -i 参数试试,效果特别好。
要想彻底删除某个文件,可以使用 +s 参数来保证其被删除后不可恢复,硬盘上的文件数据会被用零块重新填充。
[root@linuxprobe ~]# echo "for Test" > linuxprobe
[root@linuxprobe ~]# rm linuxprobe # 文件正常可以删除
rm: remove regular file ‘linuxprobe’? y
[root@linuxprobe ~]#
[root@linuxprobe ~]# echo "for Test" > linuxprobe
[root@linuxprobe ~]# chattr +a linuxprobe # 设置 `不允许删除与覆盖`(+a 参数)权限
[root@linuxprobe ~]# rm -f linuxprobe # 设置隐藏权限后无法删除
rm: cannot remove 'linuxprobe': Operation not permitted
[root@linuxprobe ~]#lsattr 命令用于查看文件的隐藏权限,英文全称为 list attributes,语法格式为 lsattr [参数] 文件名称。[root@linuxprobe ~]# ls -al linuxprobe
-rw-r--r--. 1 root root 9 Jun 11 18:42 linuxprobe
[root@linuxprobe ~]# lsattr linuxprobe # 查看文件的隐藏权限
-----a-------------- linuxprobe
[root@linuxprobe ~]# chattr -a linuxprobe # 使用 chattr 去掉文件的隐藏权限
[root@linuxprobe ~]# lsattr linuxprobe
-------------------- linuxprobe
[root@linuxprobe ~]# rm -f linuxprobe # 文件正常可以删除
[root@linuxprobe ~]#setfacl 命令用于管理文件的 ACL 权限规则,英文全称为 set files ACL,语法格式为 setfacl [参数] 文件名称。
ACL 权限提供的是在所有者、所属组、其他人的读/写/执行权限之外的特殊权限控制。
setfacl 命令中的参数以及作用:
| 参数 | 作用 |
|---|---|
-m | 修改权限 |
-M | 从文件中读取权限 |
-x | 删除某个权限 |
-b | 删除全部权限 |
-R | 递归子目录 |
--restore | 恢复权限 |
[root@linuxprobe ~]#
[root@linuxprobe ~]# logout
[linuxprobe@linuxprobe ~]$ cd /root/ # 普通用户无法进入 /root 目录
-bash: cd: /root/: Permission denied
[linuxprobe@linuxprobe ~]$
[linuxprobe@linuxprobe ~]$ su - root
Password:
[root@linuxprobe ~]# setfacl -Rm u:linuxprobe:rwx /root # 为普通用户单独设置权限
[root@linuxprobe ~]#
[root@linuxprobe ~]# logout
[linuxprobe@linuxprobe ~]$ cd /root # 普通用户可以进入 /root 目录
[linuxprobe@linuxprobe root]$ ls
anaconda-ks.cfg Documents initial-setup-ks.cfg Pictures Templates
Desktop Downloads Music Public Videos
[linuxprobe@linuxprobe root]$ logout
[linuxprobe@linuxprobe ~]$ ls -ald /root # 文件权限的最后一个点(.)变成了加号(+),这就意味着该文件已经设置了 ACL
dr-xrwx---+ 15 root root 4096 Jun 11 18:45 /rootgetfacl 命令用于查看文件的 ACL 权限规则,英文全称为 get files ACL,语法格式为 getfacl [参数] 文件名称。[root@linuxprobe ~]# getfacl /root # 显示在root管理员家目录上设置的所有ACL信息
getfacl: Removing leading '/' from absolute path names
# file: root
# owner: root
# group: root
user::r-x
user:linuxprobe:rwx
group::r-x
mask::rwx
other::---
[root@linuxprobe ~]# setfacl -m g:linuxprobe:rw /etc/fstab # 允许 linuxprobe 组用户都可以读写 /etc/fstab 文件
[root@linuxprobe ~]# getfacl /etc/fstab
getfacl: Removing leading '/' from absolute path names
# file: etc/fstab
# owner: root
# group: root
user::rw-
group::r--
group:linuxprobe:rw-
mask::rw-
other::r--
[root@linuxprobe ~]# setfacl -x g:linuxprobe /etc/fstab # 清空 linuxprobe 组用户的所有 ACL 权限
[root@linuxprobe ~]# getfacl /etc/fstab
getfacl: Removing leading '/' from absolute path names
# file: etc/fstab
# owner: root
# group: root
user::rw-
group::r--
mask::r--
other::r--
[root@linuxprobe ~]#-R 递归参数,这样不仅能够把目录本身的权限进行备份,还能将里面的文件权限也自动备份。--restore 参数,它能够自动找到要恢复的对象。[root@linuxprobe ~]# cd /
[root@linuxprobe /]# getfacl -R home > backup.acl
[root@linuxprobe /]# ls -ald backup.acl
-rw-r--r--. 1 root root 19756 Jun 11 19:04 backup.acl
[root@linuxprobe /]# setfacl --restore backup.acl # 在备份时已经指定是对 /home 目录进行操作,所以不需要写对应的目录名称,它能够自动找到要恢复的对象
[root@linuxprobe /]#注意
getfacl 在备份目录权限时不能使用绝对路径的形式,因此我们需要先切换到最上层根目录,然后再进行操作。
-),这意味着完全切换到新的用户,即把环境变量信息也变更为新用户的相应信息,而不是保留原始的信息。强烈建议在切换用户身份时添加这个减号(-)。授权原则:在保证普通用户完成相应工作的前提下,尽可能少地赋予额外的权限。
sudo 命令用于给普通用户提供额外的权限,语法格式为 sudo [参数] 用户名。
使用 sudo 命令可以给普通用户提供额外的权限来完成原本只有 root 管理员才能完成的任务,可以限制用户执行指定的命令,记录用户执行过的每一条命令,集中管理用户与权限(/etc/sudoers),以及可以在验证密码后的一段时间无须让用户再次验证密码。
sudo 命令中的可用参数以及作用:
| 参数 | 作用 |
|---|---|
-h | 列出帮助信息 |
-l | 列出当前用户可执行的命令 |
-u 用户名或 UID 值 | 以指定的用户身份执行命令 |
-k | 清空密码的有效时间,下次执行 sudo 时需要再次进行密码验证 |
-b | 在后台执行指定的命令 |
-p | 更改询问密码的提示语 |
visudo 命令用于编辑、配置用户 sudo 的权限文件,语法格式为 visudo [参数]。
visudo 命令会自动调用 vi 编辑器来配置 /etc/sudoers 权限文件,能够解决多个用户同时修改权限而导致的冲突问题。
visudo 命令还可以对配置文件内的参数进行语法检查,并在发现参数错误时进行报错提醒。这要比用户直接修改文件更友好、安全、方便。
visudo 命令只有 root 管理员才可以执行,普通用户在使用时会提示权限不足。
使用 visudo 命令配置权限文件时,其操作方法与 Vim 编辑器中用到的方法完全一致,因此在编写完成后记得在末行模式下保存并退出。
谁可以使用 允许使用的主机=(以谁的身份) 可执行命令的列表192.168.10.0/24 这样的网段限制来源地址,使得只有从允许网段登录时才能使用 sudo 命令。/usr/bin/cat 这样的文件名称来限制命令列表,多个命令文件之间用逗号(,)间隔。 linuxprobe ALL=(ALL) ALLlinuxprobe ALL=(ALL) NOPASSWD:/usr/bin/cat,/usr/sbin/reboot:用户下次再执行 sudo 命令时就不用密码验证。[root@linuxprobe ~]# visudo
[root@linuxprobe ~]# su - linuxprobe
[linuxprobe@linuxprobe ~]$ sudo -l # 列出当前 linuxprobe 用户可执行的命令
[sudo] password for linuxprobe:
Matching Defaults entries for linuxprobe on linuxprobe:
!visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin, env_reset,
env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR
USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT
LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE",
env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY",
secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin
User linuxprobe may run the following commands on linuxprobe:
(ALL) ALL
[linuxprobe@linuxprobe ~]$ cat /etc/shadow
cat: /etc/shadow: Permission denied
[linuxprobe@linuxprobe ~]$ sudo cat /etc/shadow
root:$6$PhbzTyjeKXr0Z5/z$ucA79tg5.Vwy9nOxz.Kxe9gqB.dE4Zy9R87OACLr0ETgoLX7kmbfgya1vFzrf5Gc6.sZ9a.rtGZp.Vl472YGl.:19519:0:99999:7:::
bin:*:18199:0:99999:7:::
daemon:*:18199:0:99999:7:::
adm:*:18199:0:99999:7:::[!question]- 在 RHEL 8 系统中,root 管理员是谁?
是 UID 为 0 的用户,是权限最大、限制最小的管理员。
[!question]- 如何使用 Linux 系统的命令行来添加和删除用户?
添加和删除用户的命令分别是useradd与userdel。
[!question]- 若某个文件的所有者具有文件的读/写/执行权限,其余人仅有读权限,那么用数字法表示应该是什么?
所有者权限为rwx,所属组和其他人的权限为r--,因此数字法表示应该是 744。
[!question]- 某文件的字符权限为
rwxrw-r--,那么对应的数字法权限应该是多少?
数字法权限应该是 764。
[!question]- 某链接文件的权限用数字法表示为 755,那么相应的字符法表示是什么呢?
在 Linux 系统中,不同文件具有不同的类型,因此这里应写成lrwxr-xr-x。
[!question]- 如果希望用户执行某命令时临时拥有该命令所有者的权限,应该设置什么特殊权限?
特殊权限中的 SUID。
[!question]- 若对文件设置了隐藏权限(
+i参数),则意味着什么?
无法对文件进行修改;若对目录设置了该参数,则仅能修改其中的子文件内容而不能新建或删除文件。
[!question]- 使用访问控制列表(ACL)来限制
linuxprobe用户组,使得该组中的所有成员不得在/tmp目录中写入内容。
想要设置用户组的 ACL,则需要把u改成g,即setfacl -Rm g:linuxprobe:r-x /tmp。
[!question]- 当普通用户使用
sudo命令时是否需要验证密码?
系统在默认情况下需要验证当前登录用户的密码,若不想验证,可添加NOPASSWD参数。