linux权限
文件权限和目录权限区别
虽然文件和目录的权限都是rwx三种,但是在Linux系统中对文件和目录的权限是有不同含义和区别的。
| 权限 | 对文件的作用 | 对目录的作用 |
|---|---|---|
| r 读取权限 | 具有读取,浏览文件内容的权限 | 具有浏览目录及其子目录的权限 |
| w 写入权限 | 具有增加,修改,删除文件内容的权限 | 具有增加,删除或修改目录内文件的权限 |
| x 执行权限 | 具有执行文件的权限 | 具有进入目录的权限 |
如果是普通用户,同时还需要具备可读r的权限才能执行文件。
而root用户只要有可执行x的权限就能执行文件。
非特权用户umask默认是 002
root的umask 默认是 022
文件夹的最高权限777
文件的最高权限是666
新建目录默认权限为755
新建文件默认权限为644
chmod和chown
chmod
chmod u/g/o/a [=±r] [rwx]
-R:递归修改权限
chown
chown 属主 文件... #仅更改文件的用户所有权
chown 属主:属组 文件... #修改文件的用户和组的所有权
chown 属主: 文件
chown :属组 文件... #仅更改文件的组所有权
-R:递归修改归属关系
/etc/passwd 存放用户文件
用户名:密码占位符X:UID:基本组GID:用户描述信息:家目录:登录系统解释器
/etc/shadow 用户的密码信息
附加权限(特殊权限)
“粘滞”位
占用其他人(Other)的 x 位
显示为 t 或 T,取决于其他人是否有 x 权限
粘滞位表示,只有文件所有者才能删除该文件,即使组权限允许该文件可以删除。通常,在 `/tmp` 这样的通用或协作目录上,此设置最有意义
SGID权限
占用属组(Group)的 x 位
显示为 s 或 S,取决于属组是否有 x 权限
`sgid` 位与 `suid` 位类似,操作是在目录的组所有权下完成的,而不是以运行命令的用户身份。
一个使用 `sgid` 的例子是,如果多个用户正在同一个目录中工作,并且目录中创建的每个文件都需要具有相同的组权限。
在一个具有SGID权限的目录下,新建的文档会自动继承此目录的属组身份
SUID权限
占用属主(User)的 x 位
显示为 s 或 S,取决于属主是否有 x 权限
仅对可执行的程序有意义
当在文件上设置 `suid` 时,将以文件的属主的身份而不是运行该文件的用户身份执行操作。一个好的例子是 `passwd` 命令。它需要设置 `suid` 位,以便更改密码的操作具有 root 权限
su和sudo
su
su 普通用户切换到超级用户
su+普通用户 超级用户切换到普通用户
限制使用su命令的用户
vim /etc/pam.d/su
2 auth sufficient pam_ rootok.so //开启第二行和第六行 .................................
6 auth required pam_ wheel.so use_ _uid
sudo
[root@localhost ~]#visudo
#用户 登入主机 = (代表用户) 命令
#user host=(username) command
root ALL=(ALL) ALL
%wheel ALL=(ALL) NOPASSWD:ALL
#不以`%`号开头的表示"将要授权的用户",比如例子中的root;
#以`%`号开头的表示"将要授权的组", 比如例子中的`%wheel`组 和 `%sudo`组
#第一个ALL表示通过哪些主机登入。
#第二个ALL表示以哪个用户身份。
#最后一个ALL表示允许运行哪些命令。
#NOPASSWD表示使用sudo命令不需要验证密码。
#在命令前面加上叹号表示不能执行该程序
举例说明:
1.nancy ALL=(root) /bin/mount
#表示nancy用户通过任何主机登入系统后,可以以root的身份运行mount命令(命令前必须加sudo)。
2.%wheel ALL=(ALL) ALL
#表示wheel组内的成员通过任何主机登入系统后,可以以任何用户的身份运行所有命令(命令前必须加sudo)。
字段填写说明:
1.user:可以写用户名或UID。
2.group:可以写组名或GID。
3.host:可以写ip或hostname(IP地址或主机名)。
4.command:
command name (命令)
directory (文件夹里的命令)
sudoedit (可以编辑sudoers这个文件,变相变成管理员)
Cmnd_Alias (命令别名)
注:配置文件内支持使用通配符,例如"/sbin/*"表示/sbin/目录下的所有命令。
1)允许 yuji 用户以任何用户的身份运行所有命令。
允许nancy用户以root用户的身份运行mount命令。
ruby
代码解读
复制代码
# 1.普通用户nancy不允许使用mount命令。
[nancy@localhost ~]$ whoami
nancy
[nancy@localhost ~]$ mount /dev/sr0 /mnt
mount: 只有 root 能执行该操作
# 2.编辑配置文件,将yuji用户和nancy用户加入文件。
[root@localhost ~]# visudo //编辑配置文件/etc/sudoers
---------------------------
yuji ALL=(ALL) ALL
nancy ALL=(root) /bin/mount
# 3.允许nancy用户以roo身份运行mount命令。
[nancy@localhost ~]$ whoami
nancy
[nancy@localhost ~]$ sudo mount /dev/sr0 /mnt
[sudo] nancy 的密码:
mount: /dev/sr0 写保护,将以只读方式挂载
# 4.yuji用户以root身份创建文件,文件属主是root。
[yuji@localhost ~]$ whoami
yuji
[yuji@localhost ~]$ sudo touch 1.txt
[sudo] yuji 的密码:
[yuji@localhost ~]$ ll 1.txt
-rw-r--r-- 1 root root 0 3月 7 16:52 1.txt
2)将jack用户加入wheel后,之后可使用所有命令。
1.jack不在/etc/sudoers文件中,不允许使用sudo命令。
[jack@localhost ~]$ sudo umount /mnt
我们信任您已经从系统管理员那里了解了日常注意事项。
总结起来无外乎这三点:
#1) 尊重别人的隐私。
#2) 输入前要先考虑(后果和风险)。
#3) 权力越大,责任越大。
[sudo] jack 的密码:
jack 不在 sudoers 文件中。此事将被报告。
2.将jack加入wheel组内。jack可以成功使用sudo命令。
[root@localhost ~]# gpasswd -a jack wheel
正在将用户“jack”加入到“wheel”组中
[root@localhost ~]# su - jack
上一次登录:一 3月 7 16:45:31 CST 2022pts/0 上
[jack@localhost ~]$ whoami
jack
[jack@localhost ~]$ sudo umount /mnt
[sudo] jack 的密码:
[jack@localhost ~]$
sudo子目录
如果对所有用户进行提权都放在/etc/sudoers 一个文件中,非常不便于管理。这时可以在/etc/sudoers.d/ 下创建子目录。例如针对 测试部门的员工进行授权,可以创建/etc/sudoers.d/test;针对hr部门的员工进行授权,可以创建/etc/sudoers.d/hr。便于分类管理。
[root@localhost ~]# vim /etc/sudoers.d/test //创建子目录
zhangsan ALL=(root) /bin/mount
[root@localhost ~]# chmod 440 /etc/sudoers.d/test //设置权限,加固安全
[root@localhost ~]# ll /etc/sudoers.d/test
-r--r----- 1 root root 33 3月 7 17:51 /etc/sudoers.d/test
查看sudo操作记录
- 需要启用 Default logfile 配置
- 默认日志文件:/var/log/sudo
[root@localhost log]# visudo //修改配置文件
-----------------------------
Default logfile="/var/log/sudo" //在最后一行添加 Default logfile 配置
测试查看日志是否正常记录:
[root@localhost ~]# sudo -u nancy touch /tmp/f2.txt //以nancy用户的身份创建文件
[root@localhost ~]# tail -4 /var/log/sudo //日志成功记录sudo操作
Mar 12 23:12:06 : root : TTY=pts/0 ; PWD=/root ; USER=nancy ; COMMAND=/bin/touch
/tmp/f1.txt
Mar 12 23:13:49 : root : TTY=pts/0 ; PWD=/root ; USER=nancy ; COMMAND=/bin/touch
/tmp/f2.txt
chattr 命令
chattr 命令⽤于更改⽂件的扩展属性,⽐ chmod 更改的 rwx 权限更底层
参数
a :只能向⽂件中添加数据,不得删除
-R :递归更改⽬录属性
-V :显示命令执⾏过程 模式
+ 增加参数
- 移除参数
= 更新为指定参数
A 不让系统修改⽂件最后访问时间
a 只能追加⽂件数据,不得删除
i ⽂件不能被删除、改名、修改内容
lsattr 命令
lsattr 命令⽤于查看⽂件的第⼆扩展⽂件系统属性,结合 chattr ⼀起⽤
-R 递归地列出⽬录以及其下内容的属性 .
-V 显示程序版本 .
-a 列出⽬录中的所有⽂件 , 包括以 `.' 开头的⽂件的属性 .
-d 以列出其它⽂件的⽅式那样列出⽬录的属性 , ⽽不列出其下的内容 .
-v 显示⽂件版本 .
linux用户管理
useradd
useradd [选项] 用户名 #创建新用户
-u:指定 用户UID
-d:指定宿主目录(家目录),默认为 /home/用户名
-g:指定用户的基本组名
-G:指定所属的附加组
-s:指定用户的登录解释器
-M: 不建立家目录
-e:指定用户的账户失效时间,可使用 YYYY-MM-DD 的日期格式。
usermod
基本语法:usermod [options] username
#[options]常用选项
sudo usermod -d /new/home/dir username #更改用户主目录
sudo usermod -p newpassword username #更改用户密码
sudo usermod -s /bin/bash username #更改用户的登录Shell
sudo usermod -L username #锁定用户密码,使其无法登录。
sudo usermod -U username #解锁用户密码,使其可以登录。
passwd
交互式设置密码
passwd [选项]用户
-d # 删除密码
-l:锁定用户账户
-S:查看用户账户的状态(是否被锁定)
-u:解锁用户账户
非交互式设置密码
echo ***** | passwd --stdin 用户 --stdin:从标准输入(比如管道)取密码
[root@localhost ~]# chpasswd < user.txt
[root@localhost ~]# cat user.txt
guest1:abc123
guest2:dfasdf
批量修改密码
userdel
userdel [-r] 用户名
添加 -r 选项,家目录/用户邮件也一并删除
组账户
唯一标识:GID(编号从0开始的编号,默认最大60000)
原则:Linux一个用户必须至少属于一个组
组账户的分类:
基本组:系统创建与用户同名,有且唯一
附加组(从属组):由管理员创建,由管理员进行加入。
附加组可有可无,且可以有多个
/etc/group 存放组用户
组名:组密码占位符:组的GID:组成员列表
/etc/gshadow 组管理信息
groupadd
groupadd [选项] 组名
-g:指定新建工作组的gid
groupmod
groupmod [选项] 组名
-g GID:修改组 ID;
-n 新组名:修改组名;
groupdel
groupdel 组名
删除组账号:删除组的时候,不可以删除基本组
gpasswd
#修改组成员
gpasswd [选项]...用户,用户 组名
-a:添加组成员,每次只能加一个
-d: 删除组成员,每次只能删一个
-M:定义(重置)组成员用户列表,可设置多个
usermod -G 命令也可以将用户加入群组,但会产生一个问题,
即使用此命令将用户加入到新的群组后,该用户之前加入的那些群组都将被清空
用户账号的初始配置文件
~/.bash_profile
用于用户级别的环境变量和启动程序配置
~/.bashrc
用于用户级别的交互式非登录shell的配置。
~/.bash_logout
退出用户后 ,关机之前 会执行此文件里面的命令
/etc/profile
用于系统级别的环境变量和启动程序配置。
/etc/bashrc
用于系统级别的交互式非登录shell的配置。
修改/etc/profile文件中相关配置,切换bash或者用户后都需要source /etc/profile才生效;
修改/etc/bashrc文件中相关配置,切换bash或者用户后直接生效
你可以通过以下命令判断当前 Shell 的类型:
echo $0
- 如果输出以 `-` 开头(如 `-bash`),则是登录 Shell。
- 如果没有 `-`(如 `bash`),则是非登录 Shell。
vi编辑器
命令模式
移动光标
行内跳转
Home/0/^ #跳到本行的行首。Home和0跳到真行首,^跳到第一个非空字符。
按 End 键或$ #跳转到本行的行尾
行间跳转
nG #n代表行号数字,直接跳转到n行 单独G文件末尾
M #跳转到当前显示页面的中间行
删除 复制 粘贴 撤销
删除
x或delete #删除当前光标的字符
ndd #删除行 单独dd 删除当前一行
d$ #删除当前光标到行尾
d^ #删除当前光标之前到行首 往前不包括当前光标处的字符
dw #删除当前光标处的单词
复制粘贴
nyy #复制当前光标处向下的n行 单独y复制当前行
p #粘贴到光标处下一行
P #粘贴到光标处上一行
撤销
u #只消除上一次可多次使用
U #取消所有操作
ctrl+r #撤销最近的撤销。
替换和查找
r #单独替换光标所在字符
R/shift+r #替换字符序列
cw #替换一个单词
/字符 #向下查找
?字符 #向上查找
输入模式
o #在光标所在行的下面插入新的一行。光标停在空行首,等待输入文本
O #在光标所在行的上面插入新的一行。光标停在空行的行首,等待输入文本
A #行尾插入命令
I #在当前行输入文本
i #在光标前插入随后输入的文本
末行模式
. #当前行
$ #最后一行
$-1 #当前行到倒数第二行
替换
n,n s/old/new/g #到n行所有old改为new
% s/old/new/g #%代表全文,全文替换所有old改为new
查找替换中的分隔符/可替换为其它字符,如:#,@
复制和删除
n,n d #删除n到n行
n,n y #复制n到n行
:1,3 co 10 #将第1~3行复制粘贴到第10行下方(co表示copy)
:1,3 m 10 #将第1~3行剪切到第10行下方(m表示move)
设置
set nu (set nonu取消设置)加行号 不显示行号
set cul (set nocul 取消设置)#光标所在行有下划线(取消)
set ai #对齐 回车后和上一行对齐