【安全】用户身份及文件权限

笑着哭i 提交于 2020-11-08 09:23:58

 

 1、  useradd

 

useradd -u 10010 -g 10010 -G dba -s /bin/bash -d /home/mysql -e "2018-10-31"  mysql 

 

2、 usermod 

usermod -c 'Modeify by hnair' -md /user/mysql -e '2018-11-01' -G admin -u 10011 mysql 

 

3、 passwd 

 

passwd -l mysql  锁定用户

passwd -e mysql 强制下次登录修改密码

 

4、userdel 

userdel -rf mysql 删除mysql用户,级联删除mysql家目录

 

 

5、suid:

对二进制程序设置的一种特殊的执行权限,可以让二进制程序的执行者临时获得属主的权限(仅对拥有执行权限的二进制程序有效)。

 

[root@master ~]# ls -l /etc/shadow

----------. 1 root root 841 Oct 30 18:00 /etc/shadow

 

[root@master ~]# ls -l /usr/bin/passwd

-rwsr-xr-x. 1 root root 30768 Feb 17  2012 /usr/bin/passwd

 

在linux系统中,密码是保存在/etc/shadow文件中,我们修改用户口令或者创建用户,他们的口令文件都保存在‘/etc/shadow’,我们看他的权限是000,意味着只有root用户可以操作它。

我们在来看看/usr/bin/passwd 执行命令,发现他的权限有点特殊‘-rwsr-xr-x’,在执行位有一个‘s’的标记,这个‘s’就是一个特殊的权限,

这就意味着用户在使用passwd修改用户密码的时候,会让执行者临时获取passwd命令属主的权限(passwd命令的属主是root),临时有了root权限 当然有权限吧密码信息写入到/etc/shadow 里面。

 

6、sgid:

6.1、让执行者临时获取属组的权限(仅对有执行权限的二进制程序有效)。

6.2、在某个目录中创建的文件自动继承该目录的用户组(只对目录设置)。

 

对于第二个设计的目的,也就解释了为啥 解压软件包得到的目录不是执行者的所属用户而是特定的用户。

这个特性很有用途,可以强制某些目录的属组权限,比如部门内部公共网盘权限设置,不管用户用什么用户登录创建什么文件,他的属组都是上层目录的属组。

 

 

测试:

mkdir /tmp/sgid 

chmod 777 /tmp/sgid 

chown g+s /tmp/sgid/

drwxrwsrwx. 2 root   root   4096 Oct 30 18:42 sgid

 

su - mysql 

[mysql@master sgid]$ id mysql 

uid=10011(mysql) gid=10011(mysql) groups=10011(mysql)

 

mkdir -p /tmp/sgid/mysql/

ls-l /tmp/sgid/

drwxrwsr-x. 2 mysql root 4096 Oct 30 18:44 mysql

可以看到 /tmp/sgid/mysql 的属组权限继承生上层目录的root,而不是执行者mysql的属组

 

7、sbit(Sticky Bit,我们一般称之为特殊权限保护位/粘滞位):

SBIT特殊权限位可确保用户只能删除自己的文件,而不能删除其他用户的文件。

 

演示:

[root@master home]# ls -ald /tmp/

drwxrwxrwt. 7 root root 4096 Oct 30 19:03 /tmp/

 

[hadoop@master ~]$ mkdir /tmp/hadoop

[root@master home]# chmod 777 /tmp/hadoop

[root@master home]# su - mysql 

[mysql@master ~]$ ls -l /tmp/

drwxrwxrwx. 2 hadoop hadoop 4096 Oct 30 19:08 hadoop

[mysql@master ~]$ rm -rf /tmp/hadoop

rm: cannot remove `/tmp/hadoop': Operation not permitted

 

8、chattr 

 

设置命令 chattr +a /tmp/chattr.log 增加追加权限,chattr -a /tmp/chattr.log 移除追加权限。

 

测试:

[root@master home]# chattr +a /tmp/chattr.log 

[root@master home]# ls -alt /tmp/chattr.log 

-rw-rw-r--. 1 mysql mysql 0 Oct 30 19:27 /tmp/chattr.log

[root@master home]# chmod 777 /tmp/chattr.log 

chmod: changing permissions of `/tmp/chattr.log': Operation not permitted

[root@master home]# rm -rf /tmp/chattr.log 

rm: cannot remove `/tmp/chattr.log': Operation not permitted

可以看到  /tmp/chattr.log 不能被root用户删除,什么?这么逆天!

这个时候我们可以通过使用 chattr -a /tmp/chattr.log 来移除特殊权限,但是我们得先知道这个文件是否有特殊权限,这就是下一个要介绍的命令了(lsattr)。

 

9、lsattr 

[root@master home]# lsattr /tmp/chattr.log 

-----a-------e- /tmp/chattr.log

我们可以看到/tmp/chattr.log 有 ‘a’特殊权限,

[root@master home]# chattr -a /tmp/chattr.log 

[root@master home]# lsattr /tmp/chattr.log 

-------------e- /tmp/chattr.log

 

[root@master home]# rm -rf /tmp/chattr.log 

 

10、ACL(文件控制访问列表):

前面介绍的几个命令都是针对所有用户的,ACL是针对特定用户特定目录的权限。 其中,针对目录使用-R来递归,针对普通文件则使用 -m参数。

设置mysql用户可以访问/root目录:

[root@master home]#  setfacl -Rm u:mysql:rwx /root

[root@master home]# ls -ld /root

dr-xrwx---+  3 root root  4096 Oct 30 18:13 root

[root@master home]# su - mysql 

[mysql@master ~]$ ls /root/

anaconda-ks.cfg  install.log  install.log.syslog

 

可以通过getfacl的都目录的ACL列表:

[root@master home]# getfacl /root

getfacl: Removing leading '/' from absolute path names

# file: root

# owner: root

# group: root

user::r-x

user:mysql:rwx

group::r-x

mask::rwx

other::---

 

删除acl

[root@master home]# setfacl -b /root

[root@master home]# getfacl /root

getfacl: Removing leading '/' from absolute path names

# file: root

# owner: root

# group: root

user::r-x

group::r-x

other::---

 

11、su 与sudo

配置:

vi /etc/sudoers 

## Allow root to run any commands anywhere

root    ALL=(ALL)       ALL

hadoop  ALL=(ALL)       ALL

 

[hadoop@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 hadoop: 

Matching Defaults entries for hadoop on this host:

    requiretty, !visiblepw, always_set_home, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC 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 hadoop may run the following commands on this host:

    (ALL) ALL

注意:对文件权限的修改需要重新认证sudo。

 

sudo配置完毕,接下来可以干root才能干的事,如:修改密码

[hadoop@master ~]$ sudo passwd mysql 

Changing password for user mysql.

New password: 

Retype new password: 

passwd: all authentication tokens updated successfully.

在生产中这种sudo配置ALL的配置风险太大,一般是具体到单个命令 而不是ALL。

vi /etc/sudoers 

## Allow root to run any commands anywhere

root    ALL=(ALL)       ALL

hadoop  ALL=(ALL)       /bin/ls

 

[hadoop@master ~]$ sudo passwd mysql 

Sorry, user hadoop is not allowed to execute '/usr/bin/passwd mysql' as root on master.

[hadoop@master ~]$ ls /root

ls: cannot open directory /root: Permission denied

 

[hadoop@master ~]$ sudo ls -l /root/

total 32

-rw-rwx---+ 1 root root  1043 Jul 28 08:09 anaconda-ks.cfg

-rw-rwxr--+ 1 root root 10725 Jul 28 08:09 install.log

-rw-rwxr--+ 1 root root  3091 Jul 28 08:07 install.log.syslog

可见,passwd命令不可以使用了,但是可以访问 /root目录.

大家有没有发现每次使用sudo都需要验证密码,这是不是很不方便,我们可以设置NOPASSWD来免密码认证

 

## Allow root to run any commands anywhere

root    ALL=(ALL)       ALL

hadoop  ALL=NOPASSWD:   /bin/ls

 

[hadoop@master ~]$ sudo ls -l /root

total 32

-rw-rwx---+ 1 root root  1043 Jul 28 08:09 anaconda-ks.cfg

-rw-rwxr--+ 1 root root 10725 Jul 28 08:09 install.log

-rw-rwxr--+ 1 root root  3091 Jul 28 08:07 install.log.syslog

--整理于《Linux就该这么学》书籍,感觉目前国内Liunx学习最好的书籍,继《鸟哥私房菜》之后的Linux学习最给力的书籍。

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!