linux使用者管理——权限管理(ACL、su、)

传统的权限仅有三种身份(owner,group,others)搭配三种权限(r,w,x)。并没有对某一个用户或者一个组来设置特定的权限需求。ACL可以传统权限之外进行权限设置,针对某一个特定用户、单一文件或者目录进行r,w,x的权限设置。

ACL可以设置的权限的方面:

  • 用户(user):针对用户来设置
  • 用户组(group):针对用户组进行设置
  • 默认属性(mask):设置该目录下新建文件/目录是在设置新数据的默认权限。

ACL设置方法:getfacl,setfacl
getfacl:取得某个文件/目录的ACL设置项目
setfacl:设置某个文件/目录的ACL规定

setfacl
常见选项:
	-m:设置后续的acl参数给文件使用,不可与-x使用
	-x:删除后续的acl参数
	-b:删除所有的acl参数
	-k:删除默认的acl参数
	-R:递归设置acl,包括所有的子目录都会被设置。
	-d:设置默认acl参数,只对目录有效,在此目录新建的数据会引用此默认值。

example 1:针对特定用户方式

[root@master tmp]# touch example
[root@master tmp]# useradd cat1 
[root@master tmp]# setfacl -m  u:cat1:rwx example 
[root@master tmp]# ll example 
-rw-rwxr--+ 1 root root 0 Nov  1 10:49 example
会发现权限的末尾多个+,查看:
[root@master tmp]# getfacl example 
# file: example
# owner: root
# group: root
user::rw-
user:cat1:rwx
group::r--
mask::rwx
other::r--

example 2:对文件的所有者进行设置

[root@master tmp]# setfacl -m u::rwx example 
[root@master tmp]# ll example 
-rwxrwxr--+ 1 root root 0 Nov  1 10:49 example
[root@master tmp]# getfacl example 
# file: example
# owner: root
# group: root
user::rwx
user:cat1:rwx
group::r--
mask::rwx
other::r--
无用户列表。默认为文件所有者,因此root的权限成为rwx
所显示的数据前面带#,表示文件名,文件属主,文件属组。下面出现的user、group、mask、other表示其他用户的权限设置值。

example 3:针对特定用户组设置

[root@master tmp]# tail -5 /etc/group
nebula:x:1008:
nebula2:x:2001:
nebula3:x:990:
book:x:2002:nebula1,nebula2
cat1:x:2003:
[root@master tmp]# setfacl -m g:book:rwx example 
[root@master tmp]# getfacl example 
# file: example
# owner: root
# group: root
user::rwx
user:cat1:rwx
group::r--
group:book:rwx
mask::rwx
other::r--

example 3:针对有效权限mask的设置

[root@master tmp]# setfacl -m m:r example 
[root@master tmp]# getfacl example 
# file: example
# owner: root
# group: root
user::rwx
user:cat1:rwx			#effective:r--
group::r--
group:book:rwx			#effective:r--
mask::r--
other::r--
在这里面会发现cat1与book组的权限均被影响,那是因为mask设置的效果,权限会临时降低。
mask可以用来当需要所有人都不能访问该文件时临时降低所有人权限。再次设置会删除

example 4:删除某个指定用户权限

[root@master tmp]# setfacl -x u:cat1 example 
[root@master tmp]# getfacl example 
# file: example
# owner: root
# group: root
user::rwx
group::r--
group:book:rwx
mask::rwx
other::r--

example 5:对目录的递归设置

[root@master tmp]# mkdir acl
[root@master tmp]# getfacl acl/
# file: acl/
# owner: root
# group: root
user::rwx
group::r-x
other::r-x

[root@master tmp]# setfacl -m g:book:rwx acl/
[root@master tmp]# getfacl acl/
# file: acl/
# owner: root
# group: root
user::rwx
group::r-x
group:book:rwx
mask::rwx
other::r-x

[root@master tmp]# cd acl/
[root@master acl]# mkdir acl_acl
[root@master acl]# getfacl acl_acl/
# file: acl_acl/
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
没有递归。里层目录book组没有rwx权限
[root@master acl]# cd ..
[root@master tmp]# setfacl -m d:g:book:rwx acl/
[root@master tmp]# getfacl acl/
# file: acl/
# owner: root
# group: root
user::rwx
group::r-x
group:book:rwx
mask::rwx
other::r-x
default:user::rwx
default:group::r-x
default:group:book:rwx
default:mask::rwx
default:other::r-x

[root@master tmp]# cd acl/
[root@master acl]# getfacl acl_acl/
# file: acl_acl/
# owner: root
# group: root
user::rwx
group::r-x
other::r-x

[root@master acl]# mkdir acl_acl1
[root@master acl]# getfacl acl_acl1
# file: acl_acl1
# owner: root
# group: root
user::rwx
group::r-x
group:book:rwx
mask::rwx
other::r-x
default:user::rwx
default:group::r-x
default:group:book:rwx
default:mask::rwx
default:other::r-x

用户身份切换

在linux系统中进场需要做用户身份的切换,从普通切换为root用户,一般有两种方式:

  • 使用命令"su -"直接将身份切换为root即可,但是这个命令一般需要使用root的密码。
  • 使用“sudo 命令” 执行root的命令串,但是sudo一般必须事先设置好,而且sudo需要输入用户自己的密码。比第一种方式能安全一些。

su:任何身份的切换

常见选项:
	-:单纯使用“-”,代表使用要登录用户自己的shell,如果不加登录用户名,默认为root,
	但是如果不加“-”,后面直接接用户名,那么切换后仍然使用的是上一个用户的shell.
	-l:与“-”类似,后面必须接上要切换的用户
	-c:仅进行一次命令,后面接上命令。

example 1

直接使用su 命令切换为root用户
[nebula1@master ~]$ su
Password: 
[root@master nebula1]# env | grep nebula1
USER=nebula1
PATH=/usr/java/jdk1.7.0_45//bin:/usr/java/jdk1.7.0_45//bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/tmp/nebula1/.composer/vendor/bin:/usr/local/mysql/bin:/tmp/nebula1/.local/bin:/tmp/nebula1/bin:/usr/local/mysql/bin
MAIL=/var/spool/mail/nebula1
PWD=/tmp/nebula1
LOGNAME=nebula1
[root@master nebula1]# id
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
会发现确实是root用户的UID,但是使用的环境仍然是nebula1的。
[root@master nebula1]# exit
exit退出

从上述即可看出,当切换用户时必须加上“-”,否则就是使用“su -l login-name”
example 2

仅仅使用root权限执行一次命令
[nebula1@master ~]$ su -  -c "cat /etc/shadow"
Password: 
root:$6$LMr6FS8x0MIlY5Jk$c1TfsURG3QLddRFt9qJh/wAUA6nwinSlksNYVkSSI6gjXE0uqQqwnOh3tkZ9fteTDqez4kUMG5aD63iyu875q.::0:99999:7:::
bin:*:16659:0:99999:7:::
daemon:*:16659:0:99999:7:::

root切换为别的用户,不需要输入密码,别的用户相互切换需要输入密码,同理,切换为root也一样。

sudo:su命令的执行需要知道root的密码。但是sudo的执行只需要知道自己的密码即可。

常见选项:
	-u:后面接要切换的用户,若无此项则代表切换身份为root
	-h:列出帮助信息
	-l:列出当前用户可以执行的命令
	-k:清空密码的有效时间,下次执行时需要再次进行密码验证
	-b:在后台执行指定的命令
	-p:更改询问密码的提示语

sudo 命令的执行流程:

  1. 当用户执行sudo 时,系统于/etc/sudoers文件中查找该用户是否具有sudo的执行权限。
  2. 若用户具有可执行sudo的权限后,便让用户输入用户自己的密码进行确认
  3. 若密码输入成功,便开始进行sudo后续接的命令
  4. 若欲切换的身份与执行者的省份相同,那也不需要输入密码。

那么首先先进行配置吧,普通用户为nebula6,,需要执行root命令。
方法一:root 用户直接使用visudo命令直接修改/etc/sudoers。
将nebula6添加在下面的行处:

[root@master acl]# visudo
 	91 ## Allow root to run any commands anywhere
    92 root    ALL=(ALL)       ALL
    93 nebula6 ALL=(ALL)       ALL

上面字段的意思:
1、用户账号:系统哪个账号可以使用sudo命令,默认为root
2、登录者的来源主机名:这个账号由哪台主机连接到本linux主机。默认任何一台。
3、可切换的身份:这个账号可以切换为什么身份来执行后面的命令
4、可执行的命令:必须使用绝对路径,默认root可以使用所有的命令。
测试:

首先看nebula6可以使用哪些命令:
[nebula6@master ~]$ 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 nebula6: 
Matching Defaults entries for nebula6 on master:
    !visiblepw, always_set_home, match_group_by_gid, 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 nebula6 may run the following commands on master:
    (ALL) ALL(所有命令)
    将root的密码修改一下:
    [nebula6@master ~]$ sudo 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.

记忆密码的清除使用命令sudo -k
但是上面最后我修改密码时再没有输入nebula6的密码,默认输入一次密码5分钟内执行命令不需要输入密码,但是过了之后还需要输入,怎么办?
可以配置一个免密的功能:

## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
nebula6 ALL=(ALL)       NOPASSWD:ALL

方法二:将nebula6添加进wheel组,为什么是wheel组,看配置文件:

## Allows people in group wheel to run all commands
%wheel  ALL=(ALL)       ALL

## Same thing without a password
# %wheel        ALL=(ALL)       NOPASSWD: ALL

看看注释,会发现所有只要在wheel的用户就可以适用所有的命令。
测试:
首先删除了刚才方法的添加语句。

[nebula6@master ~]$ sudo passwd root
[sudo] password for nebula6: 
nebula6 is not in the sudoers file.  This incident will be reported.
[root@master acl]# usermod -aG wheel nebula6
[root@master acl]# id nebula6
uid=2003(nebula6) gid=2004(nebula6) groups=2004(nebula6),10(wheel)

添加完毕后,一般nebula6用户必须重新登录一次就可以用sudo。否则不可以执行

[nebula6@master ~]$ su - 
Password: 
Last login: Thu Nov  1 12:23:46 CST 2018 on pts/3
[root@master ~]# su - nebula6
Last login: Thu Nov  1 12:59:45 CST 2018 on pts/3
[nebula6@master ~]$ sudo passwd root
[sudo] password for nebula6: 
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.

也可以在文件那里进行设定。
visudo其实就类似vi /etc/sudoers,只是/etc/sudoers是有语法限制的,如果设置错误将会造成无法使用sudo命令!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值