文章目錄
前置參考文章
用戶管理
核心文件 /etc/passwd
homewell:~/shell1$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
以冒號(:)分割,看起來不太方便,我們以\t作爲分隔符來查看
- 方式一
homewell:~/shell1$ cat /etc/passwd | sed 's/\:/\t/g'
root x 0 0 root /root /bin/bash
daemon x 1 1 daemon /usr/sbin /usr/sbin/nologin
bin x 2 2 bin /bin /usr/sbin/nologin
sys x 3 3 sys /dev /usr/sbin/nologin
sync x 4 65534 sync /bin /bin/sync
games x 5 60 games /usr/games /usr/sbin/nologin
man x 6 12 man /var/cache/man /usr/sbin/nologin
lp x 7 7 lp /var/spool/lpd /usr/sbin/nologin
mail x 8 8 mail /var/mail /usr/sbin/nologin
news x 9 9 news /var/spool/news /usr/sbin/nologin
uucp x 10 10 uucp /var/spool/uucp /usr/sbin/nologin
- 方式二
homewell:~/shell1$ sudo awk -v FS=':' '{print "1)"$1,"\t","2)"$2,"\t","3)"$3,"\t","4)"$4,"\t","5)"$5,"\t","6)"$6,"\t","7)"$7}' /etc/passwd
1)root 2)x 3)0 4)0 5)root 6)/root 7)/bin/bash
1)daemon 2)x 3)1 4)1 5)daemon 6)/usr/sbin 7)/usr/sbin/nologin
1)bin 2)x 3)2 4)2 5)bin 6)/bin 7)/usr/sbin/nologin
1)sys 2)x 3)3 4)3 5)sys 6)/dev 7)/usr/sbin/nologin
1)sync 2)x 3)4 4)65534 5)sync 6)/bin 7)/bin/sync
1)games 2)x 3)5 4)60 5)games 6)/usr/games 7)/usr/sbin/nologin
1)man 2)x 3)6 4)12 5)man 6)/var/cache/man 7)/usr/sbin/nologin
1)lp 2)x 3)7 4)7 5)lp 6)/var/spool/lpd 7)/usr/sbin/nologin
1)mail 2)x 3)8 4)8 5)mail 6)/var/mail 7)/usr/sbin/nologin
可以看到共有7列
- 用戶名
- 密碼 用 x來標記,在很老的版本中是以明文方式存儲的,此時只是一個標記,真正的密碼存儲在 /etc/shadow ,裏面的密碼是以加密的方式存儲,加密算法有興趣可以看 淺談常見的七種加密算法及實現 。同時/etc/shadow還包括,設置用戶密碼有效期,比如 用戶創建起多少天之內可以修改密碼,多少天之後必須修改密碼,多少天之後失效,在失效前多少天通知用戶,失效用戶多少天之後禁用用戶
- 用戶的UID,系統分配給用戶的唯一標誌
- 用戶所屬的組GID
- 備註字段,一般與用戶名相同
- 用戶的HOME目錄
- 以當前用戶登陸的shell模式下,默認啓動的shell,比如root用戶默認啓動/bin/bash , mail 用戶是以 /usr/sbin/nologin方式登陸的
useradd 發生了什麼
其中會默認在創建用戶的時候
把/etc/skel/中的目錄作爲新用戶的起始文件
如果useradd某個設置經常被改動
useradd -D
表7-2 useradd更改默認值的參數 參 數 描 述
-b default_home 更改默認的創建用戶HOME目錄的位置
-e expiration_date 更改默認的新賬戶的過期日期
-f inactive 更改默認的新用戶從密碼過期到賬戶被禁用的天數
-g group 更改默認的組名稱或GID
-s shell 更改默認的登錄shell
孿生兄弟adduser
adduser 類似於useradd,它會自動給用戶添加用戶目錄(home),分離用戶操作,只在自己的工作空間工作
當出現在有些系統沒有useradd命令,但是隻有adduser命令的時候又想要自動化創建用戶,如下兩個方法非常不錯,可以推薦使用
1使用命令方式創建用戶
# adduser user01 << EOF
userpassword
userpassword
EOF
2使用重定向符定號創建用戶
查看password文件
# cat password
userpassword
userpassword
文件內容設置用戶賬戶和密碼
# adduser user01 < password
重定向內容可以看[Linux shell 整理之 複合命令行篇(四)][4]
userdel
默認會刪除/etc/passwd中的用戶信息
但是不會刪除home目錄
userdel -r $user
可以刪除home目錄
usermod
會修改/etc/passwd中絕大多數參數
- l 修改用戶名
- p 修改密碼
-LU -L LOCK -U --UNLOCK
批量修改密碼
$ cat user.txt
user1:password1
user2:password2
$ chpasswd <- user.txt
用戶組
組的出現是爲了共享數據使用,也就是給屬於同一組的用戶提供共享數據的基礎
核心文件/etc/group
$ cat /etc/group
mongodb:x:131:mongodb
docker:x:132:homewell
zhangll:x:1002:
admin:x:1003:
jupyterhub:x:1006:homewell,zhangll03,zhangll09,zhangll009,a524631266,user1,user2,user3,newhomewell,homewell22
y組名 組密碼 GID 用戶列表
冷門知識 沒有用戶組列表並不是表示沒有用戶了,而是在第一次生成用戶的時候(/etc/passwd文件中指定某個組作爲默認組),並不會把用戶放入指定的組內(/ect/group)
同用戶(UID)一樣,每個組都有一個GID
GID值
- 低於500 爲系統用戶
- 高於500 爲普通用戶
####修改/ect/group文件
不要直接修改!!!!
- 通過 usermod修改
# usermod --help
Usage: usermod [options](選擇項) LOGIN(用戶名)
# usermod -G groupname username
- groupmod 無法修改用戶組列表
只能改前三相 用戶組名 密碼 GID
\# groupmod -n abc zhangll
\# groupmod -g 111 zhangll
- 給用戶組添加用戶表
sudo gpasswd -a $USER docker #將登陸用戶加入到docker用戶組中
# 在當前用戶中更新用戶組
newgrp docker
UMASK 水印
在ubuntu中 /etc/login.defs
$ cat /etc/login.defs | grep UMASK
# UMASK Default "umask" value.
# UMASK is the default umask value for pam_umask and is used by
# 022 is the "historical" value in Debian for UMASK
# If USERGROUPS_ENAB is set to "yes", that will modify this UMASK default value
UMASK 022
有些是在 /etc/profile 中
水印的意思是
在把umask值設成026後,文件類型的默認權限-umask則爲生成的文件類型的默認權限
-
默認的新創建的文件(-)權限變成了 666 - 026 = 640
-
默認文件目錄(d)爲 777 - 026 = 751
文件目錄的x權限代表用戶是否可進入文件夾(相當於文件的執行)的意思,而文件是沒有進入的說法,只有可讀可寫可執行的說法
hadoop:~$ umask 026
hadoop:~$ umask
0026
hadoop:~$ mkdir abc
hadoop:~$ touch abc.txt
hadoop:~$ ll | grep abc
drwxr-x--x 2 hadoop hadoop 4096 9月 27 10:39 abc/
-rw-r----- 1 hadoop hadoop 0 9月 27 10:39 abc.txt
修改文件類型權限
# chmod 777 abc
# chmod
[gou] [+-=] [wrxs]
S 共享權限(!!!!)
homewell:~$ sudo groupadd share
homewell:~$ sudo usermod -aG share $USER
homewell:~$ sudo usermod -aG share hadoop
hadoop:~$ mkdir shareh
hadoop:~$ ll | grep shareh
drwxr-x--x 2 hadoop hadoop 4096 9月 27 11:15 shareh/
hadoop:~$ chown hadoop.share shareh/
chown: changing ownership of 'shareh/': Operation not permitted
hadoop:~$ ll | grep shareh
drwxr-x--x 2 hadoop share 4096 9月 27 11:15 shareh/
hadoop:~/shareh$ mkdir abc
hadoop:~/shareh$ ll
total 12
drwxr-x--x 3 hadoop share 4096 9月 27 11:18 ./
drwxrwxr-x 39 hadoop hadoop 4096 9月 27 11:15 ../
drwxr-x--x 2 hadoop hadoop 4096 9月 27 11:18 abc/
用戶默認的組還是hadoop 強制改成同父目錄一致的
hadoop:~/shareh$ chmod g+s shareh
hadoop:~$ ll | grep shareh/
drwxr-s--x 3 hadoop share 4096 9月 27 11:18 shareh/
hadoop:~$ cd shareh/
hadoop:~/shareh$ mkdir abcd
hadoop:~/shareh$ ll
total 16
drwxr-s--x 4 hadoop share 4096 9月 27 11:20 ./
drwxrwxr-x 39 hadoop hadoop 4096 9月 27 11:15 ../
drwxr-x--x 2 hadoop hadoop 4096 9月 27 11:18 abc/
drwxr-s--x 2 hadoop share 4096 9月 27 11:20 abcd/
suid 設置跨越權限的執行命令
當你遇到 su: must be suid to work properly 這樣的提示的時候,其實表明了,當前用戶在使用指定命令(這裏是su命令,用來切換用戶),但是發現沒有suid這樣的設置
suid 是什麼? set owner user id up on exection,也就是設置用戶的id,以保證能獲取執行權,(也可翻譯爲建立在執行權之上的用戶)
su的命令位置
# which su
/bin/su
發現/bin/su被軟連接到/bin/busybox,真正執行的是/bin/busybox
# ls -l /bin/su
lrwxrwxrwx 1 root root 12 May 9 2019 /bin/su -> /bin/busybox
# ls -l /bin/busybox
-rwxr-xr-x 1 root root 796240 Jan 24 2019 /bin/busybox
對/bin/su的root用戶設置suid,使得其他用戶在能夠執行的情況下被上升到root用戶的權限
所以other必須擁有x的權限
# chmod u+s /bin/su
# ls -l /bin/su
lrwxrwxrwx 1 root root 12 May 9 2019 /bin/su -> /bin/busybox
然而發現這樣的設置並不奏效,rwx仍然是rwx
但是真正執行的/bin/busybox
# ls -l /bin/busybox
-rwsr-xr-x 1 root root 796240 Jan 24 2019 /bin/busybox
ke可以到 user的rwx ==》 rws
這裏代表的意思就是 other 用戶在使用su命令的時候會臨時提升權限爲root的權限,並進行相關的操作
XXX is not in the sudoers file
在用戶輸入sudo命令的時候無法執行root相關的命令 說明用戶不再sudoers文件中,因此要找到sudoers文件,並寫入相關的
# chmod a+w /etc/sudoers
# vi /etc/sudoers
添加如下代碼
XXX ALL=(ALL) ALL
# chmod a-w /etc/sudoers
用戶能夠使用sudo方式暫時獲取root用戶的權限執行命令
[4]:https://blog.csdn.net/u012491646/article/details/102463463 “Linux shell 整理之 複合命令行篇(四)”