[内容] Linux umask 的设置

内容目录:

内容一:默认权限值的含义

内容二:临时默认权限的设置
2.1 默认权限值的方法
2.2 默认权限值的方法
2.2.1 方法一:使用权限数字设置默认权限值
2.2.2 方法二:使用权限标志设置默认权限值

内容三:永久默认权限的设置
3.1 给某个用户单独设置 umask
3.1.1 给某个用户单独添加 umask 参数
3.1.2 让 umask 设置生效
3.2 全局设置 umask 的方法
3.2.1 通过修改 /etc/profile 文件实现
3.2.1.1 案例一
3.2.1.1.1 设置全局 umask 参数
3.2.1.1.2 让 umask 设置生效
3.2.1.2 案例二
3.2.1.2.1 设置全局 umask 参数
3.2.1.2.2 让 umask 设置生效
3.2.2 通过修改 /etc/bashrc 文件实现
3.2.2.1 案例一
3.2.2.1.1 设置全局 umask 参数
3.2.2.1.2 让 umask 设置生效
3.2.2.2 案例二
3.2.2.2.1 设置全局 umask 参数
3.2.2.2.2 让 umask 设置生效

具体的内容:

内容一:默认权限值的含义

如果 umask 的值是 0022:
创建的新目录的默认权限是:777 – 022 = 755
创建的新文件的默认权限是:666 – 022 = 644

内容二:临时默认权限的设置
2.1 默认权限值的方法

# umask
0022

2.2 默认权限值的方法
2.2.1 方法一:使用权限数字设置默认权限值

# umask 0002

2.2.2 方法二:使用权限标志设置默认权限值

# umask -S u=rwx,g=rwx,o=rw

内容三:永久默认权限的设置
3.1 给某个用户单独设置 umask
3.1.1 给某个用户单独添加 umask 参数

# vim ~/.bashrc 

添加以下内容:

......
umask 022


补充:
1) 这里以将 umask 设置为 022 为例
2) 补充 /etc/bashrc 文件会比 /etc/profile 文件更有优先级

3.1.2 让 umask 设置生效

# source ~/.bashrc

3.2 全局设置 umask 的方法
3.2.1 通过修改 /etc/profile 文件实现
3.2.1.1 案例一
3.2.1.1.1 设置全局 umask 参数

# vim /etc/profile

将以下内容:

......
if [ $UID -gt 199 ] && 
    [ "`/usr/bin/id -gn`" = "`/usr/bin/id un`" ]; then
    umask 002 
else
    umask 022
fi
......

修改为:

......
if [ $UID -gt 199 ] && 
    [ "`/usr/bin/id -gn`" = "`/usr/bin/id un`" ]; then
    umask 002 
else
    umask 022
fi
......


补充:
1) 这里以将 umask 设置为 022 为例
2) 补充 /etc/bashrc 文件会比 /etc/profile 文件更有优先级

3.2.1.1.2 让 umask 设置生效

# source /etc/profile

3.2.1.2 案例二
3.2.1.2.1 设置全局 umask 参数

# vim /etc/bashrc

添加以下内容:

......
umask 022


补充:
1) 这里以将 umask 设置为 022 为例
2) 补充 /etc/bashrc 文件会比 /etc/profile 文件更有优先级

3.2.1.2.2 让 umask 设置生效

# source /etc/bashrc

3.2.2 通过修改 /etc/bashrc 文件实现
3.2.2.1 案例一
3.2.2.1.1 设置全局 umask 参数

# vim /etc/bashrc

将以下内容:

......
if [ $UID -gt 199 ] && 
    [ "`/usr/bin/id -gn`" = "`/usr/bin/id un`" ]; then
    umask 002 
else
    umask 022
fi
......

修改为:

......
if [ $UID -gt 199 ] && 
    [ "`/usr/bin/id -gn`" = "`/usr/bin/id un`" ]; then
    umask 002 
else
    umask 022
fi
......


补充:
1) 这里以将 umask 设置为 022 为例
2) 补充 /etc/bashrc 文件会比 /etc/profile 文件更有优先级

3.2.2.1.2 让 umask 设置生效

# source /etc/bashrc

3.2.2.2 案例二
3.2.2.2.1 设置全局 umask 参数

# vim /etc/bashrc

添加以下内容:

......
umask 022


补充:
1) 这里以将 umask 设置为 022 为例
2) 补充 /etc/bashrc 文件会比 /etc/profile 文件更有优先级

3.2.2.2.2 让 umask 设置生效

# source /etc/bashrc

[命令] Linux 命令 iptables (设置防火墙日志)

内容一:iptables 防火墙开启日志的案例
1.1 案例一:让日志记录未匹配任何规则的 TCP 数据包,之后再将其丢弃的方法

在所有规则后面添加以下两条规则:

......
# iptables -A INPUT -i -p tcp -j LOG --log-prefix "IPTABLES TCP IN: " 
# iptables -A INPUT -i -p tcp -j DROP

(补充:这里以记录进来的数据并将 IPTABLES TCP IN: 作为前缀保存日志为例)

1.2 案例二:让日志记录未匹配任何规则的 UDP 数据包,之后再将其丢弃的方法

在所有规则后面添加以下两条规则:

...... 
# iptables -A INPUT -i -p tcp -j LOG --log-prefix "IPTABLES TCP OUT: " 
# iptables -A INPUT -i -p tcp -j DROP

(补充:这里以记录进来的数据并将 IPTABLES TCP OUT: 作为前缀保存日志为例)

1.3 案例三:让日志记录未匹配任何规则的 ICMP 数据包,之后再将其丢弃的方法

在所有规则后面添加以下两条规则:

...... 
# iptables -A INPUT -i -p tcp -j LOG --log-prefix "IPTABLES TCP ICMP: " 
# iptables -A INPUT -i -p tcp -j DROP

(补充:这里以记录进来的数据并将 IPTABLES TCP ICMP: 作为前缀保存日志为例)

内容二:查看 iptables 防火墙日志的方法

# cat /log/var/message

[内容] Linux acl 权限

案例目录:

案例一:给某一个文件或目录添加 acl
1.1 给某一个文件或目录添加一个用户的 acl
1.2 给某一个文件或目录添加一个组的 acl
1.3 递归给某一个目录和目录里的所有内容添加一个 acl

案例二:删除某一个文件或目录的 acl
2.1 删除某一个文件或目录一个用户的 acl
2.2 删除某一个文件或目录一个组的 acl
2.3 删除某一个文件或目录的所有 acl
2.4 递归删除某一个文件或目录的 acl
2.5 递归删除某一个文件或目录的所有 acl

案例三:查看某一个文件或目录的 acl

案例四:备份和还原某一个文件或目录的 acl
4.1 备份某一个文件或目录的 acl
4.2 还原某一给文件或目录的 acl

具体的案例:

案例一:给某一个文件或目录添加 acl
1.1 给某一个文件或目录添加一个用户的 acl

# setfacl -m u:zhumingyu:r-x /var

(补充:这里以在 /var 目录上给 zhumingyu 用户设置读和执行的 acl 权限为例)

1.2 给某一个文件或目录添加一个组的 acl

# setfacl -m g:zhumingyu:r-x /var

(补充:这里以在 /var 目录上给 zhumingyu 组设置读和执行的 acl 权限为例)

1.3 递归给某一个目录和目录里的所有内容添加一个 acl

# setfacl -Rm u:zhumingyu:r-x /var

(补充:这里以在 /var 目录上递归给 zhumingyu 组设置读和执行的 acl 权限为例)

案例二:删除某一个文件或目录的 acl
2.1 删除某一个文件或目录一个用户的 acl

# setfacl -x u:zhumingyu /var

(补充:这里以在 /var 目录上删除 zhumingyu 用户的 acl 权限为例)

2.2 删除某一个文件或目录一个组的 acl

# setfacl -x g:zhumingyu /var

(补充:这里以在 /var 目录上删除 zhumingyu 组的 acl 权限为例)

2.3 删除某一个文件或目录的所有 acl

# setfacl -b /var

(补充:这里以在 /var 目录上删除所有 acl 权限为例)

2.4 递归删除某一个文件或目录的 acl

# setfacl -Rx u:zhumingyu:r-x /var

(补充:这里以在 /var 目录上递归删除 zhumingyu 用户的 acl 权限为例)

2.5 递归删除某一个文件或目录的所有 acl

# setfacl -Rb /var

(补充:这里以在 /var 目录上递归删除所有 acl 权限为例)

案例三:查看某一个文件或目录的 acl

# getfacl /var

(补充:这里以查看 /var 目录的 acl 权限为例)

案例四:备份和还原某一个文件或目录的 acl
4.1 备份某一个文件或目录的 acl

# getfacl -R /var > /acl.backup

(补充:这里以备份 /var 目录的 acl 权限为例)

4.2 还原某一给文件或目录的 acl

# setfacl --restore /acl.backup

(补充:这里以还原 /var 目录的 acl 权限为例)

[内容] Linux SELinux 标签的设置

内容目录:

内容一:开启 SELinux 标签
1.1 修改 SELinux 配置文件
1.2 重启系统

内容二:SELinux 的常见特性
2.1 SELinux 特性一:创建的文件或目录会自动继承其父目录的 SELinux 标签
2.1.1 在 /var/www/html/ 目录下新创建 index.html 文件
2.1.2 查看 /var/www/html/ 目录的 SELinux 标签
2.1.3 查看新生成的 /var/www/html/index.html 标签
2.2 SELinux 特性二:移动文件或目录和保留属性复制文件或目录不会改变其 SELinux 标签,普通复制会改变 SELinux 标签
2.2.1 在 /tmp/ 目录下新创建 file1,file2,file3 文件
2.2.2 查看 ls -Zd /tmp/ 目录的 SELinux 标签
2.2.3 查看新创建文件的标签
2.2.4 将 /tmp/file1 复制到 /var/www/html/
2.2.5 将 /tmp/file2 移动到 /var/www/html/
2.2.6 将 /tmp/file2 复制到 /var/www/html/,并使用 -a 选项保留文件属性
2.2.7 查看这些文件的 SELinux 标签

内容三:查看某个文件或目录 SELinux 标签
3.1 查看某个文件 SELinux 标签
3.2 查看某个目录 SELinux 标签
3.3 查看某个进程 SELinux 标签

内容四:查看所有 SELinux 标签
4.1 查看所有文件和目录的 SELinux 标签
4.2 查看所有端口的 SELinux 标签
4.3 查看所有进程的 SELinux 标签

内容五:设置 SELinux 标签
5.1 设置文件和目录 SELinux 标签
5.1.1 使用 semanage fcontext 命令和 restorecon 命令设置文件和目录的 SELinux 标签
5.1.1.1 semanage fcontext 命令的常用选项
5.1.1.2 使用 semanage fcontext 命令和 restorecon 命令设置文件和目录的 SELinux 标签
5.1.1.2.1 使用 smanage fcontext 命令设置 SELinux 标签
5.1.1.2.2 使用 restorecon 命令修改默认上下文
5.1.2 使用 chcon 命令设置 SELinux 标签
5.2 设置端口 SELinux

具体的内容:

内容一:开启 SELinux 标签
1.1 修改 SELinux 配置文件

# vim /etc/selinux/config

将以下内容:

......
SELINUX=disabled
......

修改为:

......
SELINUX=enforcing
......

或者:

......
SELINUX=perssive
......

1.2 重启系统

# reboot

内容二:SELinux 的常见特性
2.1 SELinux 特性一:创建的文件或目录会自动继承其父目录的 SELinux 标签
2.1.1 在 /var/www/html/ 目录下新创建 index.html 文件

# echo website > /var/www/html/index.html

(补充:这里以在 /var/www/html/ 目录下生成 index.html 文件为例)

2.1.2 查看 /var/www/html/ 目录的 SELinux 标签

# ls -dZ /var/www/html/
unconfined_u:object_r:httpd_sys_content_t:s0 index.html

2.1.3 查看新生成的 /var/www/html/index.html 标签

# ls -Z /var/www/html/index.html/index.html 
unconfined_u:object_r:httpd_sys_content_t:s0 index.html

(补充:从内容 1.1.2 和内容 1.1.3 命令的结果可以看出新生成的文件或其父目录的 SELinux 标签一致)

2.2 SELinux 特性二:移动文件或目录和保留属性复制文件或目录不会改变其 SELinux 标签,普通复制会改变 SELinux 标签
2.2.1 在 /tmp/ 目录下新创建 file1,file2,file3 文件

# touch /tmp/file{1,2,3}

2.2.2 查看 ls -Zd /tmp/ 目录的 selinux 标签

# ls -Zd /tmp/
unconfined_u:object_r:user_tmp_t:s0 /tmp/

2.2.3 查看新创建文件的标签

# ls -Z /tmp/file*
unconfined_u:object_r:user_tmp_t:s0 /tmp/file1  unconfined_u:object_r:user_tmp_t:s0 /tmp/file2
unconfined_u:object_r:user_tmp_t:s0 /tmp/file3

2.2.4 将 /tmp/file1 复制到 /var/www/html/

# cp /tmp/file1 /var/www/html/

2.2.5 将 /tmp/file2 移动到 /var/www/html/

# mv /tmp/file2 /var/www/html/

2.2.6 将 /tmp/file2 复制到 /var/www/html/,并使用 -a 选项保留文件属性

# cp -a /tmp/file3 /var/www/html/

2.2.7 查看这些文件的 SELinux 标签

# ls -Z /var/www/html/file*
unconfined_u:object_r:httpd_sys_content_t:s0 file1           unconfined_u:object_r:user_tmp_t:s0 file3
unconfined_u:object_r:user_tmp_t:s0 file2

(补充:从内容 2.2.3 和内容 2.2.7 命令的结果可以看出只有普通复制会改变 SELinux 标签 )

内容三:查看某个文件、目录或进程 SELinux 标签
3.1 查看某个文件 SELinux 标签

# ls -Z <file>

3.2 查看某个目录 SELinux 标签

# ls -Zd <directory>

3.3 查看某个进程 SELinux 标签

# ps -auxZ | grep <process>

内容四:查看所有 SELinux 标签
4.1 查看所有文件和目录的 SELinux 标签

# semanage fcontext -l

(注意:需要单独安装 policycoreutils-python-utils 后才能使用 semanage 命令)

4.2 查看所有端口的 SELinux 标签

# semanage port -l

(注意:需要单独安装 policycoreutils-python-utils 后才能使用 semanage 命令)

4.3 查看所有进程的 SELinux 标签

# ps -auxZ

内容五:设置 SELinux 标签
5.1 设置文件和目录 SELinux 标签
5.1.1 使用 semanage fcontext 命令和 restorecon 命令设置文件和目录的 SELinux 标签
5.1.1.1 semanage fcontext 命令的常用选项

1) -a 添加或变更 SELinux 标签
2) -d 删除 SELinux 标签
3) -l 查看所有的 SELinux 标签
4) -t 指定上下文 SELinux 标签
5) -v 显示修改 SELinux 标签的内容
6) -R 递归设置 SELinux 标签
7) -m 变更 SELinux 标签

5.1.1.2 使用 semanage fcontext 命令和 restorecon 命令设置文件和目录的 SELinux 标签
5.1.1.2.1 使用 smanage fcontext 命令设置 SELinux 标签

# semanage fcontext -a -t httpd_sys_content_t "/tmp(/.*)?"

(补充:这里以将 /tmp(/.*) 的 SELinux 标签设置为 httpd_sys_content_t 为例)

(注意:需要单独安装 policycoreutils-python-utils 后才能使用 semanage 命令)

5.1.1.2.2 使用 restorecon 命令修改默认上下文

# restorecon -Rv /tmp
Relabeled /tmp from unconfined_u:object_r:default_t:s0 to unconfined_u:object_r:httpd_sys_content_t:s0

5.1.2 使用 chcon 命令设置 SELinux 标签

# chcon -t httpd_sys_content_t /tmp/*

(补充:这里以将 /tmp/* 的 SELinux 标签设置为 httpd_sys_content_t 为例)

5.2 设置端口 SELinux

# semanage port -a -t http_port_t -p tcp 82

(补充:这里以将 TCP 82 端口的 SELinux 标签设置为 http_port_t 为例)

(注意:需要单独安装 policycoreutils-python-utils 后才能使用 semanage 命令)