【安全】用戶身份及文件權限

 

 一、  useradd

 

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

 

二、 usermod 

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

 

三、 passwd 

 

passwd -l mysql  鎖定用戶sql

passwd -e mysql 強制下次登陸修改密碼bash

 

四、userdel 

userdel -rf mysql 刪除mysql用戶,級聯刪除mysql家目錄oop

 

 

五、suid:

對二進制程序設置的一種特殊的執行權限,可讓二進制程序的執行者臨時得到屬主的權限(僅對擁有執行權限的二進制程序有效)。學習

 

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

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

 

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

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

 

在linux系統中,密碼是保存在/etc/shadow文件中,咱們修改用戶口令或者建立用戶,他們的口令文件都保存在‘/etc/shadow’,咱們看他的權限是000,意味着只有root用戶能夠操做它。

咱們在來看看/usr/bin/passwd 執行命令,發現他的權限有點特殊‘-rwsr-xr-x’,在執行位有一個‘s’的標記,這個‘s’就是一個特殊的權限,

這就意味着用戶在使用passwd修改用戶密碼的時候,會讓執行者臨時獲取passwd命令屬主的權限(passwd命令的屬主是root),臨時有了root權限 固然有權限吧密碼信息寫入到/etc/shadow 裏面。

 

六、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的屬組

 

七、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

 

八、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)。

 

九、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 

 

十、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::---

 

十一、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學習最給力的書籍。

相關文章
相關標籤/搜索