轉自:
http://bbs2.chinaunix.net/thread-1734534-1-1.html
賴半仙注:
其實最好的辦法還是,用root用戶編寫腳本,最后在設置腳本權限的時候給這個腳本加上suid,命令很簡單chmod 4755 ooxx.sh 或者是chmod +s也行
設置了suid后,切換回普通用戶就可以執行這個腳本了,但切記有一點的是,腳本中調用root用戶特權命令一定要像下面那樣寫可執行文件的絕對路徑,不然普通用戶找不到。
#!/bin/sh
qqid=$(/sbin/pidof qq)
echo "qq_pid=$qqid"
做mysql 的select into 一個表的時候
發現mysql -uroot -proot odb -e"select *f rom t into 'a.txt'"
他總是保存文件在 /var/lib/mysql/odb下
當前用戶是aa 目錄 在 /home/aa
我寫了一些腳本
現在在腳本里需要從aa用戶切換到 root用戶 之后強制刪除a.txt(在 /var/lib/mysql/odb下)
在腳本里如何切換用戶到root ,如何在腳本里輸入密碼 ??
印象中是 sudo su -... 這樣的命令
如何用expect實現在sudo的時候自動輸入密碼?
http://bbs.chinaunix.net/thread-1733075-1-1.html
如何實現sudo命令不需要密碼?
http://bbs.chinaunix.net/thread-940013-1-1.html
昨天一個網友問如何能夠將輸入密碼的工作在shell里面自動完成,研究了一下,發現這種交互式的工作,普通的shell實現不了,據說可以借助 expect來搞定,所以初步學習了一下expect,成果和大家分享一下:
應用一:
實現從普通用戶“test”切換到root用戶,自動輸入root的密碼,不用在終端提示符下執行密碼輸入操作。
步驟:
(1)vi autosu.sh
(2)#! /usr/bin/expect -f //指定expect工具的路徑,如果不清楚具體路徑,可以用"which expect"命令來查看。
spawn su - // 在expect 中用"spawn"關鍵字來調用命令“su - ”
expect ":" //在執行了su - 命令之后,提示輸入密碼的提示符。例如你在執行了su - 命令之后,終端里面會出現提示“口令:”,那么你就可以在這里寫expect ":",或者expect -exact "口令:"
send "rootpasswd\r" //這里expect用send將你的root密碼自動輸入到上面的提示符之后。
interact //操作完成。
注意:這里強調一下執行腳本時要注意的地方,不能按照習慣來用sh ***.sh來這行expect的程序,會提示找不到命令,因為expect用的不是bash所以會報錯。執行的時候直接./***.sh就可以了。~切 記!
應用二:
從普通用戶切換到root之后,執行“ls”操作,調用執行aaa.sh,返回執行結果,間隔10S。
#/usr/bin/expect -f
spawn su - // 在expect 中用"spawn"關鍵字來調用命令“su - ”
expect ":" //在執行了su - 命令之后,提示輸入密碼的提示符。例如你在執行了su - 命令之后,終端里面會出現提示“口令:”,那么你就可以在這里寫expect ":",或者expect -exact "口令:"
send "rootpasswd\r" //這里expect用send將你的root密碼自動輸入到上面的提示符之后。
expect "#" //當遇到提示符以#結尾時,即為root權限時;
send "ls\r" //expect 用spend方法調用ls 命令,并且回車(“\r”)
expect "#"
send "sh aaa.sh\r" //調用sh aaa.sh,即執行一個腳本文件aaa.sh。
expect "#"
send "echo $?\r"
sleep 10
interact
http://download.chinaunix.net/download/0003000/2845.shtml
http://bbs2.chinaunix.net/thread-1734534-1-1.html
賴半仙注:
其實最好的辦法還是,用root用戶編寫腳本,最后在設置腳本權限的時候給這個腳本加上suid,命令很簡單chmod 4755 ooxx.sh 或者是chmod +s也行
設置了suid后,切換回普通用戶就可以執行這個腳本了,但切記有一點的是,腳本中調用root用戶特權命令一定要像下面那樣寫可執行文件的絕對路徑,不然普通用戶找不到。
#!/bin/sh
qqid=$(/sbin/pidof qq)
echo "qq_pid=$qqid"
http://dingwenming.javaeye.com/blog/629808
suid/guid是什么?
suid意味著如果A用戶對屬于他自己的 shell腳本文件設置了這種權限,那么其他用戶在執行這個腳本的時候就擁有了A用戶的權限。所以,如果
root用戶對某一腳本設置了這一權限的話則其他用戶執行該腳本的時候則擁有了root用戶權限。同理,guid意味著執行相應腳本的用戶則擁有了該文件
所屬用戶組中用戶的權限。
做mysql 的select into 一個表的時候
發現mysql -uroot -proot odb -e"select *f rom t into 'a.txt'"
他總是保存文件在 /var/lib/mysql/odb下
當前用戶是aa 目錄 在 /home/aa
我寫了一些腳本
現在在腳本里需要從aa用戶切換到 root用戶 之后強制刪除a.txt(在 /var/lib/mysql/odb下)
在腳本里如何切換用戶到root ,如何在腳本里輸入密碼 ??
印象中是 sudo su -... 這樣的命令
如何用expect實現在sudo的時候自動輸入密碼?
http://bbs.chinaunix.net/thread-1733075-1-1.html
如何實現sudo命令不需要密碼?
http://bbs.chinaunix.net/thread-940013-1-1.html
昨天一個網友問如何能夠將輸入密碼的工作在shell里面自動完成,研究了一下,發現這種交互式的工作,普通的shell實現不了,據說可以借助 expect來搞定,所以初步學習了一下expect,成果和大家分享一下:
應用一:
實現從普通用戶“test”切換到root用戶,自動輸入root的密碼,不用在終端提示符下執行密碼輸入操作。
步驟:
(1)vi autosu.sh
(2)#! /usr/bin/expect -f //指定expect工具的路徑,如果不清楚具體路徑,可以用"which expect"命令來查看。
spawn su - // 在expect 中用"spawn"關鍵字來調用命令“su - ”
expect ":" //在執行了su - 命令之后,提示輸入密碼的提示符。例如你在執行了su - 命令之后,終端里面會出現提示“口令:”,那么你就可以在這里寫expect ":",或者expect -exact "口令:"
send "rootpasswd\r" //這里expect用send將你的root密碼自動輸入到上面的提示符之后。
interact //操作完成。
注意:這里強調一下執行腳本時要注意的地方,不能按照習慣來用sh ***.sh來這行expect的程序,會提示找不到命令,因為expect用的不是bash所以會報錯。執行的時候直接./***.sh就可以了。~切 記!
應用二:
從普通用戶切換到root之后,執行“ls”操作,調用執行aaa.sh,返回執行結果,間隔10S。
#/usr/bin/expect -f
spawn su - // 在expect 中用"spawn"關鍵字來調用命令“su - ”
expect ":" //在執行了su - 命令之后,提示輸入密碼的提示符。例如你在執行了su - 命令之后,終端里面會出現提示“口令:”,那么你就可以在這里寫expect ":",或者expect -exact "口令:"
send "rootpasswd\r" //這里expect用send將你的root密碼自動輸入到上面的提示符之后。
expect "#" //當遇到提示符以#結尾時,即為root權限時;
send "ls\r" //expect 用spend方法調用ls 命令,并且回車(“\r”)
expect "#"
send "sh aaa.sh\r" //調用sh aaa.sh,即執行一個腳本文件aaa.sh。
expect "#"
send "echo $?\r"
sleep 10
interact
http://download.chinaunix.net/download/0003000/2845.shtml