52AV手機A片王|52AV.ONE

標題: Linux 下 su v.s sudo 指令比較 [打印本頁]

作者: media    時間: 2014-12-21 14:08
標題: Linux 下 su v.s sudo 指令比較
本帖最後由 media 於 2014-12-21 14:12 編輯
, F; O6 }6 t6 k1 m) c1 W/ \$ t8 x, b2 g
su=switch user ,轉換到root 帳號+ ~; R! `0 H2 ?$ x4 t
sudo 是以root權限執行相關命令,例如: sudo service mysqld restart,兩者說明如下:
& @' r- S- z; s4 J
3 K& A' d6 s' l2 g
Linux安裝套件與系統設定都需要root的權限,就是super-user privileges (最高權限),也就是管理員權限。如何擁有root的權限?我們可以直接用ssh登入root的帳號,或用su(substitute user)指令來切換使用者,再不然就是使用sudo指令。
( r6 |) y" d9 O; W& w* @' ^* g5 r/ t/ X4 H
1. 使用su指令
  1. #用su切換使用者9 H7 S8 Z7 U! O7 \
  2. [aaron@phoenix ~]$ su#使用su切換為root% |1 g% b' f9 j& s. `
  3. Password:[輸入root密碼]
    0 f$ x- S4 y% A( d. R. h- T% ]$ D
  4. + D8 `5 D- o, u$ |9 ?2 P6 {
  5. [root@phoenix aaron]# service httpd restart#已切換為root( _, r# a2 U* `  P" s9 F
  6. Stopping httpd:                                            [  OK  ]
    8 C+ x6 L+ n  Y
  7. Starting httpd:                                            [  OK  ]
    ; h. h  |; H' \& R; W7 k

  8. " l$ R7 T9 v, ]5 O0 i
  9. [root@phoenix aaron]# exit#切換回aaron
    : ~4 _) ?( ], C# k% a' v3 n0 ?
  10. 0 E& O4 A+ U6 p/ p3 _
  11. #執行單一指令,不需要切換為root
    0 Z& d4 r( c4 x# R' h
  12. [aaron@phoenix ~]$ su -c "service httpd restart"
    + @6 {! c' w  a! y  z! k7 k
  13. Password:[輸入root密碼]$ j% e' M4 k6 \+ E0 J
  14. Stopping httpd:                                            [  OK  ]4 i' z/ s! |, b6 S' z2 g, X: m
  15. Starting httpd:                                            [  OK  ]% }& V& U3 K2 C- ]# V( U# U
  16. 7 A* i8 J) K; y* j
  17. #執行su與su -的差別(Shell環境是否跟著切換)- G, U8 s. v  Z# m+ z8 w$ S
  18. [aaron@phoenix ~]$ su
    / a( E) i- V. E
  19. Password:[輸入root密碼]
    $ \0 g: k% Y8 H9 q
  20. [root@phoenix aaron]# echo $PATH#列印PATH變數,發現還使用aaron的PATH變數+ Q) m% b- P; |/ C4 m* M
  21. /usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/aaron/bin
    4 J1 u+ ]- P* j5 Y
  22. 0 L! b/ R5 }1 M2 ]$ ]
  23. [aaron@phoenix ~]$ su -6 b5 i3 \' C' b- H4 H6 E; Z
  24. Password:[輸入root密碼]; h4 }2 ~7 E& I5 a$ S- Q0 t; M
  25. [root@phoenix aaron]# echo $PATH#列印PATH變數,使用root的PATH變數
    2 I: D# M: d  D
  26. /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
複製代碼
0 w5 r( z( s" ^  u
2. 設定sudoer
2 X5 D8 o$ A7 T% j) N
  1. [aaron@phoenix ~]$ su
    % Z. a5 q* l8 Z" T
  2. Password:[輸入root密碼]
    1 d, a! ^5 i) B( @! v& |! W

  3. 2 m2 R" N  b, ]. Q, U6 d
  4. [root@phoenix aaron]# vim /etc/sudoers& Z4 b: [5 Q+ ^3 O( ^' r5 ]
  5. ( t' x7 p; t( G5 h5 y& ~) t- b
  6. ## Allow root to run any commands anywhere: u& ]+ o: q- }5 C$ O7 L" r- |
  7. root    ALL=(ALL)       ALL
    ( k: f- ]# X- t" N
  8. ! _+ x( @5 _$ |  P0 {6 z8 o4 p
  9. ## Allow users to run any commands anywhere* m& n' ?. a1 Y7 A" k
  10. aaron   ALL=(ALL)       ALL#新增這條允許aaron可以執行管理員權限
複製代碼
2 n4 q3 y- n/ j! e! u+ k* Q3 L
3. 範例
  1. #沒有最高權限,所以就被擋了
    : T1 N6 C1 m1 u' t& F( ^
  2. [aaron@phoenix ~]$ service httpd restart2 H. R0 t. N1 M2 g; z
  3. Stopping httpd:) F( R' R3 h9 S: F7 Y# R, m7 [1 y
  4. rm: cannot remove `/var/run/httpd/httpd.pid': Permission denied
    " {4 Q& G2 R7 P1 r; O# \

  5. 5 U/ g: c, ]1 z- u% _- p2 r+ j
  6. Starting httpd:
    7 w! B% c* C* x/ e8 K8 n
  7. touch: cannot touch `/var/lock/subsys/httpd': Permission denied4 g8 `4 `( ^- ^7 m

  8. , r- X- `4 f$ V2 j9 X* n6 {
  9. #用sudo就可以( \, V' ?& v% _! x
  10. [aaron@phoenix ~]$ sudo service httpd restart
    ( ^; }/ G/ _5 [( m: Z; e* Z& W8 [
  11. [sudo] password for aaron:[輸入密碼]& [, D: I1 u0 q1 I( M) j
  12. Stopping httpd:                                            [  OK  ]( Y. z% A- ^( o9 T, j3 p5 v
  13. Starting httpd:                                            [  OK  ]
複製代碼
#su與sudo的差別在於是否要讓一般使用者知道root的密碼,如果用su就必須將root密碼分享出去,很有可能造成系統被侵入的危險。而sudo則是讓一般使用者有管理員權限,只要輸入自己的密碼即可,但同樣有風險,因為擁有管理員權限。
$ [6 `1 w& y$ D! ^2 X4 b7 I( N
可參考http://kezeodsnx.pixnet.net/blog/post/25810396





歡迎光臨 52AV手機A片王|52AV.ONE (https://www.52av.one/) Powered by Discuz! X3.2