内容简介:本文风哥教程参考Linux官方文档、Red Hat Enterprise Linux官方文档、Ansible Automation Platform官方文档、Docker官方文档、Kubernetes官方文档和Podman官方文档等内容,详细介绍了相关技术的配置和使用方法。
风哥提示:
本文档详细介绍Linux权限管理的方法。
Part01-基础权限
1.1 文件权限管理
$ ls -la /etc/passwd
-rw-r–r–. 1 root root 2847 Apr 4 10:00 /etc/passwd
# 权限说明
– 第1位: 文件类型 (- 普通文件, d 目录, l 链接)
– 第2-4位: 所有者权限
– 第5-7位: 组权限
– 第8-10位: 其他用户权限
# 修改权限
$ chmod 755 script.sh
$ chmod u+x script.sh
$ chmod g-w script.sh
$ chmod o=r script.sh
# 修改所有者
$ chown user1 file.txt
$ chown user1:group1 file.txt
$ chgrp group1 file.txt
# 递归修改
$ chmod -R 755 /var/www/html
$ chown -R apache:apache /var/www/html
# 特殊权限
# SUID (4): 以文件所有者身份执行
$ chmod u+s /usr/bin/passwd
# SGID (2): 以文件所属组身份执行
$ chmod g+s /shared/project
# Sticky bit (1): 只有所有者可以删除
$ chmod +t /tmp
# 数字表示
# SUID: 4755
# SGID: 2755
# Sticky: 1755
Part02-ACL权限
2.1 配置ACL
$ getfacl /var/www/html
# file: var/www/html
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
# 设置ACL
$ setfacl -m u:user1:rwx /var/www/html
$ setfacl -m g:developers:rwx /var/www/html
$ setfacl -m o::r-x /var/www/html
# 删除ACL
$ setfacl -x u:user1 /var/www/html
$ setfacl -b /var/www/html
# 设置默认ACL
$ setfacl -d -m u:user1:rwx /var/www/html
# 递归设置ACL
$ setfacl -R -m u:user1:rwx /var/www/html
# 复制ACL
$ getfacl file1 | setfacl –set-file=- file2
# 查看ACL掩码
$ getfacl /var/www/html | grep mask
mask::rwx
# 设置掩码
$ setfacl -m m::r-x /var/www/html
# ACL示例脚本
$ cat > /usr/local/bin/setup-acl.sh << 'EOF'
#!/bin/bash
DIR=$1
USER=$2
if [ -z "$DIR" ] || [ -z "$USER" ]; then
echo "Usage: $0
exit 1
fi
setfacl -R -m u:$USER:rwx $DIR
setfacl -R -d -m u:$USER:rwx $DIR
echo “ACL set for $USER on $DIR”
EOF
chmod +x /usr/local/bin/setup-acl.sh
Part03-sudo配置
3.1 配置sudo权限
$ sudo visudo
# 基本规则
root ALL=(ALL) ALL
# 用户规则
user1 ALL=(ALL) ALL
user1 ALL=(ALL) NOPASSWD: ALL
# 组规则
%wheel ALL=(ALL) ALL
%developers ALL=(ALL) /usr/bin/systemctl, /usr/bin/yum
# 命令别名
Cmnd_Alias SOFTWARE = /usr/bin/yum, /usr/bin/dnf, /usr/bin/rpm
Cmnd_Alias SERVICES = /usr/bin/systemctl, /usr/sbin/service
Cmnd_Alias NETWORK = /usr/sbin/ip, /usr/sbin/ifconfig
# 用户别名
User_Alias ADMINS = user1, user2
User_Alias WEBMASTERS = user3, user4
# 主机别名
Host_Alias WEBSERVERS = web1, web2, web3
Host_Alias DBSERVERS = db1, db2
# 规则示例
ADMINS ALL = (ALL) ALL
WEBMASTERS 学习交流加群风哥QQ113257174WEBSERVERS = SERVICES, /usr/bin/nginx
# 限制sudo
user1 ALL=(AL学习交流加群风哥微信: itpux-comL) !/usr/bin/su, !/usr/bin/passwd
# 日志sudo
Defaults logfile=/var/log/sudo.log
Defaults log_input, log_output
Defaults iolog_dir=/var/log/sudo-io
# 包含其他配置更多学习教程公众号风哥教程itpux_com
@includedir /etc/sudoers.d
# 创建用户配置
$ sudo tee /etc/sudoers.d/user1 << 'EOF'
user1 ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx
user1 ALL=(ALL) NOPASSWD: /usr/bin/systemctl status nginx
EOF
$ sudo chmod 440 /etc/sudoers.d/user1
Part04-SELinux权限
4.1 配置SELinux
$ getenforce
Enforcing
# 临时设置模式
$ sudo setenforce 0
$ sudo setenforce 1
# 永久设置模式
$ sudo sed -i ‘s/SELINUX=.*/SELINUX=enforcing/’ /etc/selinux/config
# 查看SELinux上下文
$ ls -Z /var/www/html
unconfined_u:object_r:httpd_sys_content_t:s0 index.html
# 修改SELinux上下文
$ sudo chcon -t httpd_sys_content_t /var/www/html/index.html
$ sudo chcon -R -t httpd_sys_content_t /var/www/html
# 恢复默认上下文
$ sudo restorecon -Rv /var/www/html
# 查看布尔值
$ getsebool -a | grep httpd
httpd_can_network_connect –> off
httpd_can_network_connect_db –> off
httpd_enable_homedirs –> off
# 设置布尔值
$ sudo setsebool -P httpd_can_network_connect on
$ sudo setsebool -P httpd_can_network_connect_db on
# 查看SELinux策略
$ sesearch –allow -s httpd_t -c file
# 创建SELinux策略模块
$ cat > myapp.te << 'EOF'
module myapp 1.0;
require {
type httpd_t;
type var_log_t;
class file { read open };
}
allow httpd_t var_log_t:file { read open };
EOF
$ checkmodule -M -m -o myapp.mod myapp.te
$ semodule_package -o myapp.pp -m myapp.mod
$ sudo semodule -i myapp.pp
# 排除SELinux问题
$ sudo ausearch -m avc -ts recent
$ sudo audit2allow -w -a
$ sudo audit2allow -a -M mypolicy
$ sudo semodule -i mypolicy.pp
1. 遵循最小权限原则
2. 使用ACL精细控制
3. 配置sudo审计
4. 启用SELinux
5. 定期审查权限
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
