首页 / LINUX / 【linux 学习】4.权限管理
【linux 学习】4.权限管理
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了【linux 学习】4.权限管理,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含13562字,纯文字阅读大概需要20分钟。
内容图文
![【linux 学习】4.权限管理](/upload/InfoBanner/zyjiaocheng/936/82f850d055fc4519aaf28f8bbd8a9521.jpg)
权限管理
目录ACL权限
Access Control List (访问控制列表)它在UGO权限管理的基础上为文件系统提供额外的、更灵活的权限管理机制。ACL允许你给任何的用户或用户组设置任何文件/目录的访问权限。
-
查看分区ACL权限是否开启
[jen@localhost ~]$ df -h Filesystem Size Used Avail Use% Mounted on /dev/sda2 14G 3.7G 9.2G 29% / devtmpfs 472M 0 472M 0% /dev tmpfs 487M 0 487M 0% /dev/shm tmpfs 487M 9.1M 478M 2% /run tmpfs 487M 0 487M 0% /sys/fs/cgroup /dev/sda3 3.9G 21M 3.6G 1% /home /dev/sda1 190M 132M 45M 75% /boot tmpfs 98M 44K 98M 1% /run/user/1000 [root@localhost /]# dumpe2fs -h /dev/sda2|grep acl dumpe2fs 1.42.9 (28-Dec-2013) Default mount options: user_xattr acl
临时开启分区ACL权限
mount -o remount,acl /#重新挂载根分区,并加入ACL权限
永久生效,
1.修改/etc/fstab文件,加,acl UUID=910dedc7-2b9e-4e2b-a82e-db2dda090854 / xfs defaults,acl 0 0 2.重新挂载mount -o remount /或重启系统
-
查看ACL权限
# getfacl 文件名 #查看ACL权限
-
设定ACL权限setfacl,查看ACL权限getfacl
setfacl 选项 文件名 -m 设定ACL权限 -x 删除指定的ACL权限 -b 删除所有的ACL权限 -d 设定默认的ACL权限 -k 删除默认-- -R 递归设定ACL权限
假设:
[root@localhost /]# mkdir /project [root@localhost /]# groupadd tgroup [root@localhost /]# gpasswd -a u1 tgroup Adding user u1 to group tgroup [root@localhost /]# gpasswd -a u2 tgroup Adding user u2 to group tgroup [root@localhost /]# chown root:tgroup /project/ [root@localhost /]# chmod 770 /project [root@localhost /]# ll -d /project/ drwxrwx---. 2 root tgroup 4096 Sep 26 06:15 /project/
为用户st设定ACL权限 u:用户名:权限
为tgroup2分配ACL权限, g:组名:权限
[root@localhost /]# setfacl -m u:st:rx /project/ [root@localhost /]# groupadd tgroup2 [root@localhost /]# setfacl -m g:tgroup2:rwx /project/ [root@localhost /]# [root@localhost /]# getfacl /project/ getfacl: Removing leading '/' from absolute path names # file: project/ # owner: root # group: tgroup user::rwx user:st:r-x group::rwx group:tgroup2:rwx mask::rwx other::---
最大权限mask
修改mask权限,不影响所有者权限(user),影响ACL权限(st)和其所属组权限(tgroup,tgroup2)
调整最大用户权限 m:权限
[root@localhost /]# setfacl -m m:rx /project [root@localhost /]# getfacl /project/ getfacl: Removing leading '/' from absolute path names # file: project/ # owner: root # group: tgroup user::rwx user:st:r-x group::rwx #effective:r-x group:tgroup2:rwx #effective:r-x mask::r-x other::--- [root@localhost /]# ll -d /project/ drwxr-x---+ 2 root tgroup 4096 Sep 29 04:10 /project/ [root@localhost /]#
删除ACL权限
setfacl -x u:用户名 文件 -x g:组名 文件 -b 文件 删除文件下所有ACL权限 [root@localhost /]# setfacl -x g:tgroup2 /project/ [root@localhost /]# getfacl /project/ getfacl: Removing leading '/' from absolute path names # file: project/ # owner: root # group: tgroup user::rwx user:st:r-x group::rwx mask::rwx other::--- [root@localhost /]# setfacl -b /project/ [root@localhost /]# getfacl /project/ getfacl: Removing leading '/' from absolute path names # file: project/ # owner: root # group: tgroup user::rwx group::rwx other::--- [root@localhost /]# ll -d /project/ drwxrwx---. 2 root tgroup 4096 Sep 29 04:10 /project/
递归ACL权限
父目录设定ACL,子目录和子文件也会拥有相同ACL权限
setfacl -m u:用户名:权限 -R 文件名/目录 [root@localhost /]# touch /project/abc [root@localhost /]# touch /project/edf [root@localhost /]# ll /project/ total 0 -rw-r--r--. 1 root root 0 Sep 29 05:08 abc -rw-r--r--. 1 root root 0 Sep 29 05:09 edf [root@localhost /]# setfacl -m u:st:rx -R /project/ [root@localhost /]# ll /project/ total 8 -rw-r-xr--+ 1 root root 0 Sep 29 05:08 abc -rw-r-xr--+ 1 root root 0 Sep 29 05:09 edf [root@localhost /]#
默认ACL权限
setfacl -m d:u:用户名:权限 文件名 #d:default 新文件遵守父目录权限 [root@localhost /]# setfacl -m d:u:st:rx -R /project/ [root@localhost /]# touch /project/asd [root@localhost /]# ll /project/ total 12 -rw-r-xr--+ 1 root root 0 Sep 29 05:08 abc -rw-rw----+ 1 root root 0 Sep 29 05:15 asd -rw-r-xr--+ 1 root root 0 Sep 29 05:09 edf [root@localhost /]# mkdir /project/hahaha [root@localhost /]# ll /project/ total 20 -rw-r-xr--+ 1 root root 0 Sep 29 05:08 abc -rw-rw----+ 1 root root 0 Sep 29 05:15 asd -rw-r-xr--+ 1 root root 0 Sep 29 05:09 edf drwxrwx---+ 2 root root 4096 Sep 29 05:17 hahaha [root@localhost /]# getfacl /project/asd getfacl: Removing leading '/' from absolute path names # file: project/asd # owner: root # group: root user::rw- 文件默认无x权限 user:st:r-x #effective:r-- group::rwx #effective:rw- mask::rw- other::--- [root@localhost /]# getfacl /project getfacl: Removing leading '/' from absolute path names # file: project # owner: root # group: tgroup user::rwx user:st:r-x group::rwx group:tgroup2:rwx mask::rwx other::--- default:user::rwx default:user:st:r-x default:group::rwx default:mask::rwx default:other::--- [root@localhost /]# getfacl /project/hahaha getfacl: Removing leading '/' from absolute path names # file: project/hahaha # owner: root # group: root user::rwx user:st:r-x group::rwx mask::rwx other::--- default:user::rwx default:user:st:r-x default:group::rwx default:mask::rwx default:other::---
文件特殊权限
-
SetUID
-
可执行的二进制程序,可设定SUID权限
-
执行者需对程序有x权限
-
执行者执行时暂时获得文件属主身份(类似sudo root可执行命令)
-
SUID权限只在执行程序过程中有效
eg. passwd拥有SetUID权限(标志s),普通用户在执行passwd命令时暂时拥有root权限,将密码写入shadow中
-
[root@localhost /]# whereis passwd
passwd: /usr/bin/passwd /etc/passwd /usr/share/man/man1/passwd.1.gz /usr/share/man/man5/passwd.5.gz
[root@localhost /]# ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 27832 Jun 10 2014 /usr/bin/passwd
[root@localhost /]# ll /etc/shadow
----------. 1 root root 1630 Sep 29 04:13 /etc/shadow
cat没有setUID权限,查看shadow文件权限不足
[root@localhost /]# ll /bin/cat
-rwxr-xr-x. 1 root root 54160 Oct 31 2018 /bin/cat
chmod 4755 文件名 #设定SUID权限
chmod u+s 文件名
chmod 755 文件名 #取消SUID权限
chmod u-s 文件名
[root@localhost project]# chmod 4644 aaa
[root@localhost project]# ll
total 24
-rwSr--r--+ 1 root root 0 Sep 29 05:38 aaa #大写S,报错,不可执行
-rw-r-xr--+ 1 root root 0 Sep 29 05:08 abc
-rw-rw----+ 1 root root 0 Sep 29 05:15 asd
-rw-r-xr--+ 1 root root 0 Sep 29 05:09 edf
drwxrwx---+ 2 root root 4096 Sep 29 05:17 hahaha
注意:
1. 关键目录严格控制写权限,eg./,/usr,/bin
2. 白字红底-错误文件,危险文件,权限过高的文件
3. 错误示范:给vim添加SUID权限
4. 对系统中默认应具有SUID权限的文件作一列表,定时检查是否有之外的文件被赋予SUID权限
-
SetGID
chmod 2755 文件名 g+s 755 文件名 g-s
针对二进制文件:
- 可执行的二进制程序,可设定SGID权限
- 执行者需对程序有x权限
- 执行者执行时组身份暂时升级为文件属组身份
- SGID权限只在执行程序过程中有效
eg. locate命令
[root@localhost project]# ll /usr/bin/locate -rwx--s--x. 1 root slocate 40520 Apr 11 2018 /usr/bin/locate [root@localhost project]# ll /var/lib/mlocate/mlocate.db -rw-r-----. 1 root slocate 2923149 Sep 29 03:14 /var/lib/mlocate/mlocate.db 普通用户对locate有执行权限,locate具有SGID权限,普通用户执行locate时,所属组变为slocate,对数据库有r权限,而普通用户对数据库权限为0,命令结束后所属组重新变为原来组
针对目录作用:
- 普通用户对SGID目录有rx权限,才能进入
- 在此目录有效组会变为目录所属组
- 普通用户对目录有写权限时,新建文件默认属组为该目录属组
[root@localhost tmp]# mkdir test [root@localhost tmp]# chmod g+s test [root@localhost tmp]# ll test -d drwxr-sr-x. 2 root root 4096 Sep 29 06:03 test [root@localhost tmp]# chmod 777 test [root@localhost tmp]# ll test -d drwxrwsrwx. 2 root root 4096 Sep 29 06:03 test [root@localhost tmp]# su jen [jen@localhost tmp]$ cd test [jen@localhost test]$ touch asd [jen@localhost test]$ ll total 0 -rw-rw-r--. 1 jen root 0 Sep 29 06:05 asd [jen@localhost test]$ [root@localhost test]# chmod o-x /tmp/test [root@localhost test]# su jen [jen@localhost tmp]$ ll total 64 -rw-r--r--. 1 root root 1148 Sep 26 06:05 anaconda.log ... drwxrwsrw-. 2 root root 4096 Sep 29 06:05 test [jen@localhost tmp]$ cd test bash: cd: test: Permission denied
-
Sticky BIT文件黏着位t(针对目录)
- 只针对目录有效
- 普通用户对该目录有wx权限,可写入
- 粘着位,限制普通用户,对root无效。普通用户有w权限,只能删除自己建立的文件,不能删除其他用户文件
chmod 1755 目录名 o+t 目录名 755 目录名 o-t 目录名
常见有粘着位的目录-/tmp
[jen@localhost /]$ ll /tmp -d drwxrwxrwt. 22 root root 4096 Sep 29 06:08 /tmp [u1@localhost tmp]$ ll total 68 -rw-r--r--. 1 root root 1148 Sep 26 06:05 anaconda.log drwxr-xr-x. 2 root root 4096 Sep 26 05:36 hsperfdata_root [u1@localhost tmp]$ touch bbb [u1@localhost tmp]$ su - jen Password: Last login: Tue Sep 29 06:08:52 CST 2020 on pts/1 Last failed login: Tue Sep 29 06:18:58 CST 2020 on pts/1 There was 1 failed login attempt since the last successful login. [jen@localhost ~]$ cd /tmp [jen@localhost tmp]$ ll total 68 -rw-r--r--. 1 root root 1148 Sep 26 06:05 anaconda.log -rw-rw-r--. 1 u1 u1 0 Sep 29 06:18 bbb drwxr-xr-x. 2 root root 4096 Sep 26 05:36 hsperfdata_root [jen@localhost tmp]$ rm bbb rm: remove write-protected regular empty file ‘bbb’? y rm: cannot remove ‘bbb’: Operation not permitted
注意:特殊权限位 _ugo(第一位)一般不为7,针对对象不同,SUID-二进制文件,SGID-文件/目录,SBIT-针对目录
文件系统属性权限chattr
-
设置文件系统属性chattr,锁文件
chattr [+-=][选项] 文件或目录名 +:增加权限 -:删除权限 =:赋予权限 选项: -i 针对文件:不允许修改文件(删除,改名,修改数据),对root有效 针对目录:允许 修改目录下文件数据,不允许建立和删除文件 -a 文件:只能在文件中追加数据(不能使用vi等编辑器,只能使用echo追加),不能删除修改数据,相当于锁现有数据,可写入 目录:允许在目录中建立修改文件,不允许删除
[root@localhost ~]# touch abc [root@localhost ~]# ll total 8 -rw-r--r--. 1 root root 0 Sep 29 06:31 abc -rw-------. 1 root root 1809 Sep 26 06:00 anaconda-ks.cfg -rw-r--r--. 1 root root 1857 Sep 26 06:05 initial-setup-ks.cfg [root@localhost ~]# echo 111 >> abc [root@localhost ~]# cat abc 111 [root@localhost ~]# chattr +i abc [root@localhost ~]# ll total 12 -rw-r--r--. 1 root root 4 Sep 29 06:31 abc -rw-------. 1 root root 1809 Sep 26 06:00 anaconda-ks.cfg -rw-r--r--. 1 root root 1857 Sep 26 06:05 initial-setup-ks.cfg [root@localhost ~]# lsattr -a abc ----i--------e-- abc [root@localhost ~]# echo 233 >> abc bash: abc: Permission denied [root@localhost ~]# rm abc rm: remove regular file ‘abc’? y rm: cannot remove ‘abc’: Operation not permitted [root@localhost ~]# mv abc bcd mv: cannot move ‘abc’ to ‘bcd’: Operation not permitted
[root@localhost ~]# mkdir test [root@localhost ~]# touch test/bcd [root@localhost ~]# chattr +i test [root@localhost ~]# lsattr -a test -------------e-- test/.. ----i--------e-- test/. -------------e-- test/bcd [root@localhost ~]# echo 222 >> test/bcdzen [root@localhost ~]# rm test/bcd rm: remove regular file ‘test/bcd’? y rm: cannot remove ‘test/bcd’: Permission denied [root@localhost ~]# touch test/hhh touch: cannot touch ‘test/hhh’: Permission denied
[root@localhost ~]# touch test/hhh [root@localhost ~]# lsattr -a test -------------e-- test/.. -------------e-- test/hhh -------------e-- test/. -------------e-- test/bcd [root@localhost ~]# echo 12345 >> hhh [root@localhost ~]# chattr +a test/hhh [root@localhost ~]# lsattr -a test -------------e-- test/.. -----a-------e-- test/hhh -------------e-- test/. -------------e-- test/bcd [root@localhost ~]# echo 444 >> test/hhh [root@localhost ~]# vi test/hhh [root@localhost ~]# cat test/hhh [root@localhost ~]# echo 666 >> test/hhh [root@localhost ~]# cat test/hhh 444 666 [root@localhost ~]#
-
查看文件系统属性lsattr
ls 选项 文件名 -a 显示所有文件 -d 所目标是目录,仅列出目录属性而非子文件
sudo
-
sudo操作对象是系统命令,其他-普通文件
-
root将命令权限赋予普通用户,
visudo #修改/etc/visudoers文件 [root@localhost jen]# cat /etc/sudoers | grep -v ^# ...... root ALL=(ALL) ALL #用户名 被管理主机地址/网段=(转换后可使用身份,默认root) 授权命令(绝对路径) %wheel ALL=(ALL) ALL #组名 st ALL=/sbin/shutdown -r now #授权st用户重启服务器 st ALL=/usr/bin/vim #vim 权限,实际上慎重赋予普通用户vim权限,转换身份后为root [root@localhost jen]# su - st [st@localhost ~]$ shutdown -r now User jen is logged in on sshd. User jen is logged in on seat0. Please retry operation after closing inhibitors and logging out other users. Alternatively, ignore inhibitors and users with 'systemctl reboot -i'. [st@localhost ~]$ sudo -l We trust you have received the usual lecture from the local System Administrator. It usually boils down to these three things: #1) Respect the privacy of others. #2) Think before you type. #3) With great power comes great responsibility. [sudo] password for st: Matching Defaults entries for st on localhost: !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 st may run the following commands on localhost: (root) /sbin/shutdown -r now [st@localhost ~]$ sudo /sbin/shutdown -h now #切换成sudo 使用root赋予的权限
此处ip指允许某用户在该ip上使用某命令,定义的是目的ip而非来源ip
内容总结
以上是互联网集市为您收集整理的【linux 学习】4.权限管理全部内容,希望文章能够帮你解决【linux 学习】4.权限管理所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。