linux03-用户与组
linux? 目錄結構介紹
[root@station221 ~]# ls /
bin?? etc?? lost+found? mnt??? opt?? sbin???? srv?????? tmp
boot? home? media?????? net??? proc? selinux? sys?????? usr
dev?? lib?? misc??????? notes? root? share??? tftpboot? var
/bin???? 存放的是系統可執行的二進制文件,簡單理解為命令
/sbin? 系統管理員可執行的二進制文件
/etc? 存放的是配置文件
lost+found? 分區下才會有這個目錄,存放系統出錯時遺失的碎片文件
/mnt?? 默認的掛載目錄(mount)
/media?? 默認掛載media的目錄
/misc? 默認掛載目錄
/opt? 擴展軟件包
/tmp???? 存放臨時文件的目錄
/boot??? 存放引導鏡象的目錄
??initrd-2.6.18-164.el5.img???? vmlinuz-2.6.18-164.el5
/home?? 用戶家目錄
??管理員的家目錄為/root
/proc? 虛擬目錄(偽文件系統) ,它記錄的是當前系統的各種動態信息和狀態
/selinux??? 高級安全管理
?vim /etc/selinux/config
??SELINUX=disabled
?保存后,需要重啟系統才可以生效的
/usr?? 用戶軟件目錄,用戶裝軟件一般存放在此;類似根目錄里普通用戶的根
/dev????? 一切設備都是文件 ?device
?/dev/sda???? scsi?? SATA? U盤
?/dev/hda?IDE
?/dev/cdrom???? 光盤
?/dev/fd0?軟驅
?/dev/lp??打印機
?/dev/mouse?鼠標
# echo? > /dev/sda1? --可以當成文件來重定向,但這樣會崩潰系統,可以使用虛擬機來嘗試
/lib?系統使用的函數庫目錄,程序運行過程中,會調用一些這里的庫文件
/var??? 主要存放執行過程中經常變化的文件,比如說:日志,郵件
?/var/lib? 程序執行過程中,使用的數據文件放置的目錄:比如:rpm包的數據庫, 的locate查找的數據庫等
?/var/log? 系統日志和各種服務日志存放的目錄
?/var/run? 一般用來存放程序運行的pid
?/var/spool/mail?每個用戶收郵件的目錄
關于lib 庫的小實驗:
[root@li ~]# ldd /bin/ls? --查看ls調用哪些庫文件
??????? linux-gate.so.1 =>? (0x00fca000)
??????? librt.so.1 => /lib/librt.so.1 (0x00685000)
??????? libacl.so.1 => /lib/libacl.so.1 (0x004b9000)
??????? libselinux.so.1 => /lib/libselinux.so.1 (0x00690000)
??????? libc.so.6 => /lib/libc.so.6 (0x004e0000)
??????? libpthread.so.0 => /lib/libpthread.so.0 (0x00657000)
??????? /lib/ld-linux.so.2 (0x004c2000)
??????? libattr.so.1 => /lib/libattr.so.1 (0x0049b000)
??????? libdl.so.2 => /lib/libdl.so.2 (0x00651000)
??????? libsepol.so.1 => /lib/libsepol.so.1 (0x00b78000)
[root@li ~]# mv /lib/libsepol.so.1 /lib/libsepol.so.1 .bak?--修改這個庫文件的名字
發現ls ,cp ,mv 等命令都不能用了
解決方法:
圖形模式打開/lib目錄,使用鼠標右鍵點重命名,把名字改回去就OK了
?
?
===================================
mount? 掛載
在linux下,所有文件系統要能被訪問都必須掛載(可以掛遠程和本機另一個系統的)
?
文件系統:
?ext2??第二擴展文件系統
?ext3??第三擴展文件系統
?ext4??第四擴展文件系統
windows下有的比較常見的有?? fat32? ntfs?
文件系統是用來管理和組織保存在磁盤上數據的系統軟件。
innode? 文件或目錄的門牌號
文件的日期,大小,權限,位置等等這些信息,這些稱做為元數據? (metadata)
ext2?
有下面幾種情況:
1,當你保存文件之前,系統崩潰,這種情況下重啟電腦,更新的內容丟失了,但原來的內容還在
2,當你保存文件之后,系統崩潰,這種情況下重啟電腦,更新的內容也在
3,當你正在保存文件時,系統崩潰,內容半新半舊
4,最差的情況是正在寫入元數據的時候,系統崩潰,有可能會丟失
重啟電腦,系統會掃描這些信息,并會拿副本來恢復,fsck??? 時間很長
linux 他是一個異步的方式?pdflush
?sync 同步
[root@li ~]# ps -ef |grep pdflush
root????? 5775??? 11? 0 10:41 ???????? 00:00:00 [pdflush]
root????? 5831??? 11? 0 10:45 ???????? 00:00:00 [pdflush]
root????? 5855? 4481? 0 10:47 pts/2??? 00:00:00 grep pdflush
?
ext3?? 在ext2 上加了一個日志的功能
??? 日志相當于是記錄你的操作的一個功能,相當于數據庫的redo日志
/dev/sda11??????????? 950M?? 18M? 885M?? 2% /mnt
--空分區被掛載,也會被使用一定空間,就是用來存放日志或分區有關的信息
ext3文件系統的三種日志模式:
journal??? --最安全,保證所有的都被記錄日志,但是速度最慢
ordered??--折中的模式,也是默認的模式??
writeback? --速度最快,但只基本保證元數據被記錄?
裸設備:--沒有文件系統,更快;只能從邏輯層上(如:oracle數據庫軟件把數據存放在一個裸設備上,從系統層面不能查看數據,但可以通過登錄oracle數據庫,用數據庫語言來查詢)
[root@li ~]# mount -o data=journal /dev/sda11 /mnt/
[root@li ~]# dd if=/dev/zero of=/mnt/1.img bs=1M count=900
900+0 records in
900+0 records out
943718400 bytes (944 MB) copied, 25.9926 seconds, 36.3 MB/s??? --最慢
[root@li ~]# mount -o data=ordered /dev/sda11 /mnt/
[root@li ~]# dd if=/dev/zero of=/mnt/1.img bs=1M count=900
900+0 records in
900+0 records out
943718400 bytes (944 MB) copied, 2.02364 seconds, 466 MB/s
[root@li ~]# dd if=/dev/zero of=/mnt/1.img bs=1M count=900
?
[root@li ~]# mount -o data=writeback /dev/sda11 /mnt/
[root@li ~]# dd if=/dev/zero of=/mnt/1.img bs=1M count=900
900+0 records in
900+0 records out
943718400 bytes (944 MB) copied, 1.40828 seconds, 670 MB/s?--最快
?
平滑地從ext2升級到ext3文件系統
tune2fs -j /dev/sda1
?
reiserfs? 性能最好,特別是對于處理大量小文件的情況? suse
xfs?? SGI公司
jfs?? IBM公司開發的???????
nfs
gfs
ocfs?共享式集群文件系統
?
==========================================
tty 與? pts
tty? 文本模式下的終端
pts? 圖形下的終端
# echo "hello" > /dev/pts/2
# echo "hello haha" > /dev/tty1
==============================================
用戶管理
操作系統的分類:
?單用戶單任務操作系統:?DOS
?單用戶多任務操作系統:?windows 95? windows 98? windows 2000
?多用戶多任務操作系統:?windows 2003 server windows 2008 server
?????linux?unix
基于多用戶的基礎上,引出的用戶的分類:
??管理員??? root??? uid=0
??系統帳號?? uid 1-499?? 65534 --不用于登錄,用于跑守護進程,服務進程,便于權限控制的
??普通用戶帳號 uid? 500-65535(2.6.xxx的內核支持的uid數量為 2^32-1個)?
[root@li ~]# echo $[2**32-1]
4294967295
[root@li ~]# id?--查看當前登錄用戶的相關信息
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel)
[root@li ~]# id apache
uid=48(apache) gid=48(apache) groups=48(apache)
/etc/passwd?--用戶
/etc/shadow?--用戶密碼和使用限制規則
/etc/group?--組
/etc/gshadow?--組密碼
?
--vim /etc/passwd
root:x:0:0:root:/root:/bin/bash
第一列: 用戶名
第二列:密碼?? 老版本這里放的就是密碼,為了安全性考慮,密碼放到了/etc/shadow的第二列
??x代表/etc/shadow的第二列生效,去掉x就表示此用戶登錄的時候沒有密碼
第三列:uid???? 用戶識別ID值,系統是通過這個值來確認是哪個用戶
第四列:gid?組識別ID值
第五列:描述項?comment
第六列:家目錄?
第七個:bash?? 當前用戶使用的bash
/bin/bash?--可以登錄(注意不同的shell類型會有少許的區別)
/bin/false?--不能登錄,不能登錄一些服務如FTP,可以收郵件,只能用來跑守護進程?
/bin/nologin?--不能登錄系統,但可以登錄一些服務如FTP,也可以收郵件等
--vim /etc/shadow
root:$1$.1RfCu/n$ModWntxLJRC6SpgAXSDO81:14694:0:99999:7:::
與/etc/passwd相對應 (但這里有九列)
第一列: 用戶名
第二列:密碼?? (這里以*號開頭或!開頭默認是不能登陸的,但可以用su 命令切換)
第三列:上一次修改密碼的時間????? linux以1970年1月1日到現在的天數來算的
第四列:修改密碼后幾天內不允許再修改?如果這里為5,那改過密碼后5天內不能再修改 0代表不限制
第五列:多少天內必須要求你改?99999代表不限制
第六列:過期前幾天給你一個告警信息
第七列:密碼過期后還給的一個寬限天數?
第8列: 這里可以寫一個過期天數??? 這里也是以1970年1月1日到現在的天數來計算的,多用于收費系統
第九列: 保留,留著以后功能擴展
===========================================================
手動去加密碼
[root@li ~]# grub-md5-crypt ?--使用此命令產生加密字符串?
Password:
Retype password:
$1$rVSI30$YG2geS.fjSU4mHiS5P4vW/
[root@li ~]# grub-md5-crypt ?--兩次密碼都為123,但產生的字符串不一樣,這是正常的
Password:
Retype password:
$1$3YSI30$ZyGCzWM2IEmnIW4q4p1uS/
[root@li ~]# vim /etc/shadow?--然后加到/etc/shadow
[root@li ~]# su - a?--root切換普通用戶,不用密碼
[a@li ~]$ su - b?--普通切換普通,要密碼
Password: ??--輸入123
[b@li ~]$ ??--登陸成功
=================================================
計算現在離1970年1月1號的天數
[root@li ~]# echo $[`date +%s`/86400]
15154
=====================================================
用戶相關的命令
useradd
usermod
userdel?? --建議加一個-r參數,刪除用戶的同時刪除相關目錄
passwd
?
[root@li ~]# userdel a?--刪除時沒有加-r參數
[root@li ~]# useradd a?? --再建立一個a用戶會報錯
Creating mailbox file: File exists
useradd: warning: the home directory already exists.
Not copying any file from skel directory into it.
[root@li ~]# id a?--現在的a用戶id 為505
uid=505(a) gid=505(a) groups=505(a)
[root@li ~]# ll /home/
total 24
drwx------ 4?? 501?? 501 4096 Jun 29 13:42 a? --原來的a用戶id為501
[root@li ~]# userdel -r a?--這次加-r參數,也刪除不了,因為它不屬于id 505的這個a用戶
userdel: /var/spool/mail/a not owned by a, not removing
userdel: /home/a not owned by a, not removing
解決方法:
[root@li ~]# rm /home/a -rf
[root@li ~]# rm /var/mail/a -rf
?
使用passwd改密碼,普通用戶只能改自己,并且只能改成復雜的密碼(最少8位,要字母,數字,符號組合)
?root用戶可以改所有人,并且可以改成很簡單的密碼
finger user1??--查看用戶信息
chfn? user1??--修改用戶信息
chsh user1??--修改用戶登錄shell類型
[root@li ~]# chfn a
Changing finger information for a.
Name []: 張三
Office []: 尚觀
Office Phone []: 8888
Home Phone []: 9999
Finger information changed.
--重啟下面兩個服務,就可以自己對本機發送郵件了
# /etc/init.d/sendmail restart
# /etc/init.d/dovecot restart
[root@li ~]# mail a?--給本機a用戶發郵件
Subject: 你好 a? ?--主題
haha
hehe ???--內容
.???--點表示結束
Cc: ???--抄送這里沒有寫,直接回車結束
[root@li ~]# finger a
Login: a??????????????????????????????? Name: 張三
Directory: /home/a????????????????????? Shell: /bin/bash
Office: 尚觀, x8888???????????????????? Home Phone: x9999
Never logged in.
New mail received Wed Jun 29 14:42 2011 (CST) --可以看到郵件
???? Unread since Wed Jun 29 14:40 2011 (CST) --并且告訴了從什么時間開始的郵件沒有讀
No Plan.
[root@li ~]# su - a?--切換到a用戶
[a@li ~]$ mail??--使用此命令查看本用戶收到的郵件
Mail version 8.1 6/6/93.? Type ? for help.
"/var/spool/mail/a": 1 message 1 new
>N? 1 root@li.cluster.com?? Wed Jun 29 14:42? 17/586?
& 1??--1表示讀取編號為1的郵件
?
================================
[root@localhost ~]# su - user1??--完全切換,切換后就是相當于使用user1用戶登錄
[user1@localhost ~]$ echo $PATH
/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/user1/bin
[root@localhost ~]# su user1??--非完全切換,切換后還帶有上一個用戶的屬性
[user1@localhost root]$ echo $PATH
/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin
--root用戶切換普通用戶不需要密碼, 但是普通用戶切換別的用戶都需要密碼
===============================================
先下載auto_config_yum.sh腳本到你的桌面
[root@li ~]# sh /root/Desktop/auto_config_yum.sh? --執行腳本
[root@li ~]# yum install vnc -y?--安裝vnc包
[root@li ~]# vncviewer 2.2.2.35:0? --密碼為111111
=============================================
組管理?
vim /etc/group
bin:x:1:root,bin,daemon
第一列:組名
第二列:與/etc/passwd第二列一樣
第三列:gid
第四列:哪些用戶屬于這個組
vim /etc/gshadow
bin:::root,bin,daemon
groupadd?
groupdel?
groupmod
gpasswd
gid 和 groups的區別:
gid是建立文件和目錄時的屬組屬性
groups是表示此用戶在訪問時擁有它們的組權限
[root@localhost ~]# groupadd uplooking
[root@localhost ~]# useradd -G uplooking up1
[root@localhost ~]# useradd -G uplooking up2
[root@localhost ~]# useradd -G uplooking up3
[root@localhost ~]# id up1
uid=503(up1) gid=504(up1) groups=504(up1),503(uplooking)
[root@localhost ~]# id up2
uid=504(up2) gid=505(up2) groups=505(up2),503(uplooking)
[root@localhost ~]# id up3
uid=505(up3) gid=506(up3) groups=506(up3),503(uplooking)
[root@localhost ~]# useradd -g uplooking up4
[root@localhost ~]# useradd -g uplooking up5
[root@localhost ~]# useradd -g uplooking up6
[root@localhost ~]# id up4
uid=506(up4) gid=503(uplooking) groups=503(uplooking)
[root@localhost ~]# id up5
uid=507(up5) gid=503(uplooking) groups=503(uplooking)
[root@localhost ~]# id up6
uid=508(up6) gid=503(uplooking) groups=503(uplooking)
[root@localhost ~]# su - up1
[up1@localhost ~]$ touch test
[up1@localhost ~]$ ll
total 0
-rw-rw-r-- 1 up1 up1 0 Mar? 7 13:43 test
[root@localhost ~]# su - up4
[up4@localhost ~]$ touch test
[up4@localhost ~]$ ll
total 0
-rw-r--r-- 1 up4 uplooking 0 Mar? 7 13:43 test
--總結:也就是說gid為哪個組,那么它默認創建的文件或目錄的屬組為gid的那個組
==========================================================
關于初始組和有效組的討論
[root@localhost ~]# usermod -g uplooking -G up1 up1?--把up1的gid改為uplooking,同時還要屬于up1組
[root@localhost ~]# id up1
uid=503(up1) gid=503(uplooking) groups=503(uplooking),504(up1)
[root@localhost ~]# su - up1
[up1@localhost ~]$ groups
uplooking up1??--前一個組為有效組,就是gid的組,表示創建的文件的屬組為uplooking
[up1@localhost ~]$ newgrp up1??--把有效組切換為up1,也可以說成是組登錄
[up1@localhost ~]$ groups
up1 uplooking?--雖然gid仍然為uplooking,但是有效組切換為up1了,那么創建的文件屬組為up1
--總結:上面可以看到gid只是默認的有效組,如果有效組進行了切換,則創建的文件或目錄的屬組為有效組的那個組
=============================
[root@localhost ~]# gpasswd up2??--組up2組加一個組密碼
Changing the password for group up2
New Password:
Re-enter new password:
[root@localhost ~]# su - up1
[up1@localhost ~]$ groups
uplooking up1
[up1@localhost ~]$ newgrp up2?--登錄一個不屬于的組需要組密碼。屬于那個組的話就不需要組密碼
Password:
[up1@localhost ~]$ groups
up2 uplooking up1?--再創建的文件或目錄的屬組就為up2了
?
=======================================
pwconv?同步/etc/passwd和/etc/shadow
grpconv?
=======================================
[root@li ~]# vim /etc/login.defs? --useradd創建用戶時默認讀取的文件
======================================
/etc/shadow 誤刪除了? 使用pwconv同步,再修改一下密碼
/etc/passwd? 誤刪了? ,自己寫一個,或者拷別的機器,先把root寫上去,進入系統再慢慢處理別的用戶
????
===============================
?
環境變量
env?--查看環境變量
set?--除環境變量還可以查看自定義變量
用戶的環境變量設定文件,存放在每個用戶的家目錄下
.bash_history?--用戶的歷史命令存放的地方? 用history命令可以查看,它不記錄當前會話所操作的命令,當你登陸時,它會記錄上一次會話所操作的命令
.bash_logout?--用戶登出后執行的?可以在這里加上清除.bash_history的命令,在用戶登出時清掉之前的操作
.bashrc??--別名設定的文件
.bash_profile?--用戶的環境變量設定的地方?
/etc/profile
/etc/bashrc
這兩個文件是全局環境變量的配置文件,里面的配置是對所有用戶生效的
?
?
例1:用戶登出時清掉所有的操作記錄
在用戶家目錄下的.bash_logout里加histroy -c (而不要使用rm -rf .bash_history)
?
例2,別名的增加
vim /root/.bashrc
加上下面一句
alias mount2='mount 2.2.2.35:/share/soft /mnt'
保存退出后 使用source /root/.bashrc使它生效
?
例3.實現user1用戶可以使用/sbin/下的所有命令
su - a
[a@li ~]$ vim ~/.bash_profile
PATH=$PATH:$HOME/bin:/sbin?--這里多加一個/sbin的目錄
export PATH
[a@li ~]$ source ~/.bash_profile --./或者source使它生效
[a@li ~]$ ifconfig ?--可以查看
[a@li ~]$ init 0
init: must be superuser.
[a@li ~]$ shutdown
shutdown: you must be root to do that!
[a@li ~]$ ifconfig eth0 10.1.1.36 netmask 255.255.255.0
SIOCSIFADDR: Permission denied
SIOCSIFFLAGS: Permission denied
SIOCSIFNETMASK: Permission denied
SIOCSIFBROADCAST: Permission denied
--但是上面的一些操作都是不可以的,它們都由內部被權限控制了
--那么如何可以讓普通用戶能關機呢?? 就要用到講權限時用到的特殊權限位 S位
?
date 命令
[root@li ~]# date +%Y-%m-%d
2011-04-15
[root@li ~]# date +%Y/%m/%d
2011/04/15
[root@li ~]# date '+%Y/%m/%d %H:%M:%S'
2011/04/15 16:08:05
[root@li ~]# date '+%Y-%m-%d %H:%M:%S'
2011-04-15 16:08:11
[root@li ~]# date -s 20120101?--修改時間
Sun Jan? 1 00:00:00 CST 2012
[root@li ~]# date -s '20110629 16:36:40'? --改的時候加入時分秒,中間有空格需要使用引號
練習:? 使用date命令顯示昨天的日期,三天前,五天后的日期,2012年0點與1970年0點之間的秒數(man date)
# date -d yesterday
# date -d "-1 days"
# date -d "3 days ago"
# date -d "3 yesterday"
# date -d "5 tomorrow"
# date -d "+5 days"
# date +%s -d '20120101'
?
1.系統自動把任何登錄系統的用戶信息給保存到/tmp/login文件里
要求格式為:?用戶名?2011-06-29 16:40:11
提示:先做下面兩步:
touch /tmp/login
chmod 777 /tmp/login?--這是把此文件的權限改為所有的用戶可寫
用戶名如何顯示??? 有一個顯示當前登錄用戶的環境變量 (env去查找)
vim /etc/profile? --在此文件最后一行加上下面一句話
echo "$USER `date +'%Y-%m-%d %H:%M:%S'`" >> /tmp/login
?
?
2.實現每天root用戶登錄后,自動密碼的修改
比如說今天登錄后,
root的密碼就自動被修改為uplooking20110629(后面的數字為登錄當天的時間)?
?--提示man passwd 去查找 --stdin
?# echo uplooking | passwd --stdin root > /dev/null
# vim /root/.bash_profile? --在最后加上下面一句
echo "uplooking`date +%Y%m%d`" | passwd --stdin root >
?/dev/null
# source /root/.bash_profile
3,實現每天關機退出root用戶登錄之前,自動把2.2.2.35上的筆記同步到自己機器上的/notes目錄下
# vim /root/.bash_logout
rsync -a 2.2.2.35::notes /notes
4。建立三個用戶
a,b,c?
建兩個組group1,group2,組密碼都為123
要求:?
?1.a用戶創建的文件的默認屬組為group2,同時它屬于group1組
?2.不存在a,b這兩個組,但存在c組,不存在group1,group2這兩個用戶
?3.b用戶gid為group1,不屬于其它組
?4.c用戶gid為c,還同時屬于group1,group2
?5.b用戶在自己的家目錄下創建一個test文件,要求test文件屬于group2組
[root@li ~]# groupadd group1
[root@li ~]# groupadd group2
[root@li ~]# gpasswd group1
[root@li ~]# gpasswd group2
[root@li ~]# useradd -g group2 -G group1 a
[root@li ~]# id a
uid=512(a) gid=511(group2) groups=511(group2),510(group1)
[root@li ~]# useradd -g group1 b
[root@li ~]# id b
uid=513(b) gid=510(group1) groups=510(group1)
[root@li ~]# useradd -G group1,group2 c
[root@li ~]# id c
uid=514(c) gid=514(c) groups=514(c),510(group1),511(group2)
[root@li ~]# su - b
[b@li ~]$ pwd
/home/b
[b@li ~]$ groups
group1
[b@li ~]$ newgrp group2
Password:
[b@li ~]$ touch test
[b@li ~]$ ll
total 0
-rw-r--r-- 1 b group2 0 Apr 15 15:07 test
?
轉載于:https://blog.51cto.com/linuxart/843881
總結
以上是生活随笔為你收集整理的linux03-用户与组的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: .NET独有的精巧泛型设计模式
- 下一篇: chvg改变vg中LV的数量