卷毛崽|linux自学|用户身份与文件权限

1.用户身份与能力

1.1useradd 命令

useradd命令用于创建新的用户,格式为“ useradd [选项 ] 用户名”。
可以使用useradd命令创建用户账户。使用该命令创建用户账户时,默认的用户家目录会被存放在 /home目录中,默认的 Shell解释器为 /bin/bash,而且默认会创建一个与该用户同名的基本用户组

在这里插入图片描述注意 /sbin/nologin,它是终端解释器中的一员,与 Bash解释器有着天壤之别。一旦用户的解释器被设置为 nologin,则代表该用户不能登录到系统中

[root@server12 ~]# useradd -d /home/xiaojuanm -u 8888 -s /sbin/nologin xiaojuanmao
[root@server12 ~]# id xiaojuanmao
uid=8888(xiaojuanmao) gid=8888(xiaojuanmao) groups=8888(xiaojuanmao)

1.2 groupadd 命令

groupadd命 令用于创建 用户组 ,格式为 groupadd [选项 ] 群组名”。
为了能够更加高效地指派系统中各个用户的权限,在工作中常常会把几个用户加入到同一个组里面,这样便可以针对一类用户统一安排权限。

[root@server12 ~]# groupadd rony

1.3 usermod命令

usermod命令用于修改用户的属性,格式为“ usermod [选项 ] 用户名”。
在这里插入图片描述
在这里插入图片描述
我们先来看一下账户xiaojuanmao的默认信息:

[root@server12 ~]# id xiaojuanmao
uid=8888(xiaojuanmao) gid=8888(xiaojuanmao) groups=8888(xiaojuanmao)

然后将用户加入到 root用户组中,这样扩展组列表中则会出现 root用户组的字样,而基本组不会受到影响:

[root@server12 ~]# usermod -G root xiaojuanmao
[root@server12 ~]# id xiaojuanmao
uid=8888(xiaojuanmao) gid=8888(xiaojuanmao) groups=8888(xiaojuanmao),0(root)

再来试试用-u参数修改 linuxprobe用户的 UID号码值。

[root@server12 ~]# usermod -u 2000 xiaojuanmao
[root@server12 ~]# id xiaojuanmao
uid=2000(xiaojuanmao) gid=8888(xiaojuanmao) groups=8888(xiaojuanmao),0(root)

1.4 passwd命令

passwd命令用于修改用户密码、过期时间、认证信息等,格式为“ passwd [选项 ] [用户名] 。
普通用户只能使用passwd命令修改自身的系统密码,而 root管理员则有权限修改其他所有人的密码。
在这里插入图片描述
假设您有位同事正在度假,而且假期很长,那么可以使用passwd命令禁止该用户登录系统,等假期结束回归工作岗位时,再使用该命令允许用户登录系统,而不是将其删除。这样既保证了这段时间内系统的安全,也避免了频繁添加、删除用户带来的麻烦:

###锁定用户不能登录
[root@server12 ~]# passwd -l xiaojuanmao
Locking password for user xiaojuanmao.
passwd: Success
[root@server12 ~]# passwd -S xiaojuanmao
xiaojuanmao LK 2020-04-30 0 99999 7 -1 (Password locked.)
###解除锁定
[root@server12 ~]# passwd -u xiaojuanmao
Unlocking password for user xiaojuanmao.
passwd: Success

[root@server12 ~]# passwd -S xiaojuanmao
xiaojuanmao PS 2020-04-30 0 99999 7 -1 (Password set, SHA512 crypt.)

1.5 userdel命令

userdel命令用于删除用户,格式为“ userdel [选项 ] 用户名”。
在这里插入图片描述

[root@server12 ~]# userdel -r xiaojuanmao
[root@server12 ~]# id xiaojuanmao
id: xiaojuanmao: no such user

2.文件权限与归属

2.1 文件的rwx

“可读”表示能够读取文件的实际内容;
“可写”表示能够编辑、新增、修改、删除文件的实际内容;

  1. List item

“可执行”则表示能够运行一个脚本程序。

2.2 目录的rwx

“可读”表示能够读取目录内的文件列表;
“可写”表示能够在目录内新增、删除、重命名文件;
“可执行”则表示能够进入该目录。

文件的读、写、执行权限可以简写为rwx,亦可分 别用数字 4、 2、 1来表示

2.3 文件的特殊权限

SUID

SUID是一种对二进制程序进行设置的特殊权限,可以让二进制程序的执行者临时拥有对二进制程序进行设置,临时拥属主的特殊权限(仅对拥有执行权限的二进制程序有效)
例如,所有用户都可以执行 passwd命令来修改自己的用户密码,而用户密码保存在 /etc/shadow文件中。仔细查看这个文件就会发现它的默认权限是 000,也就是说除了 root管理员以外,所有用户都没有查看或编辑该文件的权限。但是,在使用 passwd命令时如果加上 SUID特殊权限位,就可让普通用户临时获得程序所有者的身份,把变更的密码信息写入到 shadow文件中。

[xiaojuanmao@server12 ~]$ ls -l /etc/shadow
----------. 1 root root 1309 May  1 02:39 /etc/shadow
[xiaojuanmao@server12 ~]$ ls -l /bin/passwd
-rwsr-xr-x. 1 root root 27832 Jan 29  2014 /bin/passwd
###仔细看第一个用户的权限是rws

如果原先权限位上没有 x执行权限,那么被赋予特殊权限后将变成大写的 S。

SGID

SGID是让执行者临时拥有属组的权限(对拥有执行权限的二进制程序进行设置);
或在某个目录中创建的文件自动继承该目录的用户组(只可以对目录进行设置)。

例如:如果现在需要在一个部门内设置共享目录,让部门内的所有人员都能够读 取目录中的内容,那么就可以创建部门共享目录后,在该目录上设置 SGID特殊权限位。这样,部门内的任何人员在里面创建的任何文件都会归属于该目录的所属组,而不再是自己的基本用户组。

[root@server12 ~]# cd /tmp
[root@server12 tmp]# mkdir testdir
[root@server12 tmp]# ls -ld testdir/
drwxr-xr-x. 2 root root 6 May  1 02:46 testdir/

[root@server12 tmp]# chmod -Rf 777 testdir/
[root@server12 tmp]# chmod g+s testdir/
[root@server12 tmp]# l`在这里插入代码片`s -ld testdir/
drwxrwsrwx. 2 root root 6 May  1 02:46 testdir/

在使用上述命令设置好目录的777权限(确保普通用户可以 向其中写入文件),并为该目录设置了 SGID特殊权限位后,就可以切换至一个普通用户,然后尝试在该目录中创建文件,并查看新创建的文件是否会继承新创建的文件所在的目录的所属组名称:

[root@server12 tmp]# su - xiaojuanmao
Last login: Fri May  1 02:39:23 EDT 2020 on pts/0
[xiaojuanmao@server12 ~]$ cd /tmp/testdir/
[xiaojuanmao@server12 testdir]$ echo "xiaojuanmao.com" >test
[xiaojuanmao@server12 testdir]$ ls -al test
-rw-rw-r--. 1 xiaojuanmao root 16 May  1 02:50 test

SBIT

特殊权限位,用 chmod命令就可以了。对应的
参数 o+t代表设置 SBIT粘滞位权限

SBIT Sticky Bit)特殊权限位了(也可以称之为特殊权限位之粘滞位)。 SBIT特殊权限位可确保用户只能删除自己的文件,而不能删除其他用户的文件
当目录被设置 SBIT特殊权限位后,文件的其他人权限部分的 x执行权限就会被替换成 t或者 T,原本有 x执行权限则会写成 t,原本没有 x执行权限则会被写成 T。

例如/tmp自带设置了粘滞位

[xiaojuanmao@server12 testdir]$ ls -ld /tmp
drwxrwxrwt. 11 root root 4096 May  1 02:50 /tmp
[xiaojuanmao@server12 ~]$ cd /tmp/
[xiaojuanmao@server12 tmp]$ echo "xiaojuanmao.com" > test
[xiaojuanmao@server12 testdir]$ ls -al test
-rw-rw-r--. 1 xiaojuanmao root 16 May  1 02:50 test

当切换别的普通用户时,去尝试删除别的用户的文件时会失败,因为只能删除自己的文件

[root@server12 tmp]# su - barry
Last login: Fri May  1 02:57:45 EDT 2020 on pts/0
[barry@server12 ~]$ cd /tmp
[barry@server12 tmp]$ rm -f test
rm: cannot remove ‘test’: Operation not permitted

chown与chmod

chmod命令用来设置文件或目录的权限,格式为“ chmod [参数 ] 权限 文件或目录名称”。

chmod命令可以设置文件或目录的所有者和所属组,命令为 chown,其格式为 chown [参数 ] 所有者 :所属组 文件或目录名称”。

chmod命令和chown命令,针对目录进行操作时需要加上大写参数== -R来表示递归操作,即对目录内所有的文件进行整体操 作==。

2.4 文件的隐藏属性

chattr命令用于设置文件的隐藏权限,格式为“ chattr [参数 ] 文件”。如果想要把某个隐藏
功能添加到文件上,则需要在命令后面追加“ “+参数”,如果想要把某个隐藏功能移出文件,
则需要追加“ “-参数”。

chattr命令

在这里插入图片描述
在这里插入图片描述系统会如此安全。接下来我们再次新建一个普通文件,并为其设置不允许删除与覆盖(+a参数)权限,然后再尝试将这个文件删除:

[root@server12 tmp]# echo "for test" > linux
[root@server12 tmp]# chattr +a linux
[root@server12 tmp]# rm linux
rm: remove regular file ‘linux’? y
rm: cannot remove ‘linux’: Operation not permitted

lsattr命令

lsattr命令用于显示文件的隐藏权限,格式为lsattr [参数 ] 文件”。

[root@server12 tmp]# ls -al linux
-rw-r--r--. 1 root root 9 May  1 03:13 linux
[root@server12 tmp]# lsattr linux
-----a---------- linux

2.5 文件访问控制列表

通俗来讲,基于普通文件或目录设置 ACL其实就是针对指定的用户或用户组设置文件或目录的操作权限。
另外,如果针对某个目录设置了 ACL,则目录中的文件会继承其 ACL;若针对文件设置了 ACL,则文件不再继承其所在目录的 ACL。

setfacl 命令

setfacl命令用于管理文件的 ACL规则,格式为“ setfacl [参数 ] 文件名称”。文件的 ACL提供的是在所有者、所属组、其他人的读 /写 /执行权限之外的特殊权限控制,使用 setfacl命令可以针对单一用户或用户组、单一文件或目录来进行读 /写 /执行权限的控制。其中,针对目录文件需要使用 -R递归参数;针对普通文件则使用 -m参数;如果想要删除某个文件的 ACL则可以使用 -b参数。

[xiaojuanmao@server12 ~]$ cd /root/
-bash: cd: /root/: Permission denied

下面来设置用户在参数。下面来设置用户在 /root目录上的权限:

[root@server12 tmp]# setfacl -Rm u:xiaojuanmao:r-x /root
[root@server12 tmp]# su - xiaojuanmao
Last login: Fri May  1 03:19:32 EDT 2020 on pts/0
[xiaojuanmao@server12 ~]$ cd /root/
[xiaojuanmao@server12 root]$ ls
1111      222              epel-release-7-12.noarch.rpm    example.sh  install.log  user.txt
123       a                epel-release-7-12.noarch.rpm.1  findfiles   key.sh

可以看到文件的权限最后一个点(.)变成了加号(+),这就意味着该文件已经设置了 ACL

[root@server12 tmp]# ls -ld /root/
dr-xr-x---+ 7 root root 4096 Apr 28 07:31 /root/

getfacl 命令

getfacl命令用于显示文件上设置的 ACL信息,格式为“ getfacl 文件名称”。

[root@server12 tmp]# getfacl /root/
getfacl: Removing leading '/' from absolute path names
# file: root/
# owner: root
# group: root
user::r-x
user:xiaojuanmao:r-x
group::r-x
mask::r-x
other::---

2.6 su 命令与 sudo 服务

su命令可以解决切换用户身份的需求,使得当前用户在不退出登录的情况下,顺畅地切换到其他用户,比如从su命令与用户名之间有一个减号( (-),这意味着完全切换到新的用户,即把环境变量信息也变更为新用户的相应信息,而不是保留原始的信息。强烈建议在切换用户身份时添加这个减号(-)。

sudo命令用于给普通用户提供额外的权限来完成原本 root管理员才能完成的任务,格式
为“ sudo [参数 ] 命令名称”。
在这里插入图片描述

[root@server12 ~]# visudo
     89 ##
     90 ## Allow root to run any commands anywhere
     91 root    ALL=(ALL)       ALL
     92 xiaojuanmao      ALL=(ALL)      ALL

切换用户

[root@server12 ~]# su - xiaojuanmao
Last login: Fri May  1 03:49:10 EDT 2020 on pts/0
[xiaojuanmao@server12 ~]$ sudo -l
[sudo] password for xiaojuanmao:
Matching Defaults entries for xiaojuanmao on this host:
    !visiblepw, always_set_home, 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 xiaojuanmao may run the following commands on this host:
    (ALL) ALL

作为一名普通用户,是肯定不能看到root管理员 的 家目录(/root)中的文件信息的,但是,只需要在想执行的命令前面加上 sudo命令就可以了:

[xiaojuanmao@server12 ~]$ ls /root
ls: cannot open directory /root: Permission denied
[xiaojuanmao@server12 ~]$ sudo ls /root/
1111      222              backup.tar.gz                   error.txt   Guess.sh     readme.txt
123       a                epel-release-7-12.noarch.rpm    example.sh  install.log  user.txt
160_file  anaconda-ks.cfg  epel-release-7-12.noarch.rpm.1  findfiles   key.sh

考虑到生产环境中不允许某个普通用户拥有整个系统中所有命令的最高执行权(这也不符合前文提到的权限赋予原 则,即尽可能少地赋予权限),因此 ALL参数就有些不合适了。因此只能赋予普通用户具体的命令以满足工作需求,这也受到了必要的权限约束。如果需要让某个用户只能使用 root管理员的身份执行指定的命令,切记一定要给出该命令的绝对路径,否则系统会识别不出来。我们可以先使用 whereis命令找出命令所对应的保存路径,然后把配置文件的用户权限参数修改成对应的路径即可:

[root@server12 ~]# visudo
     90 ## Allow root to run any commands anywhere
     91 root    ALL=(ALL)       ALL
     92 xiaojuanmao      ALL=(ALL)       /usr/bin/cat

在编辑好后依然是先保存再退出。再次切换到指定的普通用户,然后尝试正常查看某个文件的内容,此时系统提示没有权限。这时再使用 sudo命令就可以顺利地查看文件内容了:

[root@server12 ~]# su - xiaojuanmao
Last login: Fri May  1 03:49:54 EDT 2020 on pts/0
[xiaojuanmao@server12 ~]$ cat /etc/shadow
cat: /etc/shadow: Permission denied
[xiaojuanmao@server12 ~]$ sudo cat  /etc/shadow
root:$6$cOuPxUFA$qTmiXKkVq3QwRvPLxc4nDlVnGT8Gvg9V5MJJRXqm2vJe9HC9TEzfegrnF0MUonDasFHwG3wmLY19Q4UiNgn5l1:18373:0:99999:7:::
bin:*:16925:0:99999:7:::
daemon:*:16925:0:99999:7:::
adm:*:16925:0:99999:7:::
lp:*:16925:0:99999:7:::
sync:*:16925:0:99999:7:::
..............省略..........

命令都要输入一次密码其实也挺麻烦的,这时可以添加 NOPASSWD参数,使得用户执行 sudo命令时不再需要密码验证:


     92 xiaojuanmao      ALL=NOPASSWD:   /usr/bin/cat

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值