Yetki sorunu

Başlatan Nold, 29 Aralık 2016 - 11:20:59

« önceki - sonraki »

0 Üyeler ve 2 Ziyaretçi konuyu incelemekte.

Nold

Selam arkadaşlar,

Bilgisayarımda kurulu olan NX CADCAM programı var. Bazı moduller için kurulu olan kütüphane var, ama kütüphanelerin bulunduğu klasörlerde izin sorunu var. Ben gerekli olan bazı klasörlere kullanma izni verdim klasörlere sağ tıklayıp oradaki ayarlardan. Sormak istediğim bunu uçbirimden nasıl topluca yapa bilirim. Mesela usr altında ugs klasörü var. Yapmak istediğim ugs altındaki tüm klasörlere ve dosyalara tek komutla izin vermek.

mhmtkrktr

O dizin altında ki (dizin / dosya gibi) tüm bölümlerde mi yetki değiştirmek istiyorsun, yoksa sadece dizinler veya sadece şu özelliği olan dosyalar gibi belirli bir tür için mi olacak?
Ayrıca sahipliği nereye ait olacak? İhtiyacın olan düzenleme komutunu bulmuşsun zaten. İhtiyacını gören o komutu paylaşırsan buna göre birşeyler düşünülebilir.

Nold

Alıntı yapılan: mhmtkrktr - 29 Aralık 2016 - 12:25:56
O dizin altında ki (dizin / dosya gibi) tüm bölümlerde mi yetki değiştirmek istiyorsun, yoksa sadece dizinler veya sadece şu özelliği olan dosyalar gibi belirli bir tür için mi olacak?
Ayrıca sahipliği nereye ait olacak? İhtiyacın olan düzenleme komutunu bulmuşsun zaten. İhtiyacını gören o komutu paylaşırsan buna göre *bir şeyler düşünülebilir.

Tüm bölümlerin yetkisini değiştirmek istiyorum. Sahipliği root (yani normal kullanıcı orada değişiklik yapma imkanı olmasın, sadece o dosyayı okuya bilsin yani kullana bilsin içerisinde değişiklik yapmadan) olsun. Umarım sorunumu anlata bilmişimdir.

mhmtkrktr

#3
Senin sorunun cevabı basit gibi. Doğru anlamışsam find /dizin_yolu -exec sudo chmod -R 755 {} \; bu işi görecektir.
   
Senin sorudan yola çıkarak, daha kontrollü olacağını düşündüğüm bir betiğe başladım. Şimdilik yarım bırakıyorum. Yarın tamamlarım. Denemek istersen, aksiyon bölümü hazır olmadığı için seçilen ayarları uygulamaz. Yani, her dizin için istediğin gibi test edebilirsin.
Dizin adı bölümüne, dizinin sadece adı girilecek. Dizin yolu olmayacak. Aynı isimde birden fazla dizin varsa, betik yönlendirmesini yapacaktır.

#!/bin/bash

chk[1]=/tmp/chk1
chk[2]=/tmp/chk2

sudo_allowed() {
  sudo -nl "$@" || (sudo -v && sudo -l "$@" &>/dev/null) && return 0
}
create_all_set() {
clear
  while IFS= read -r line; do
    echo -e "eski \t `stat -c '%a %u %g' $line`  `echo $line | sed "s/.*$log_dir//"`" \
    >>$edit_dir/authority_log.txt
    echo -e "yeni \t `stat -c '%a %u %g' $line`  `echo $line | sed "s/.*$log_dir//"`" \
    >>$edit_dir/authority_log.txt
  done <<< `find "$edit_dir"`
}
see_old_set() {
  while IFS= read -r line; do
    echo -e " `stat -c '%a %u %g' $line` \t `echo $line | sed s/.*$log_dir//`"
  done <<< `find "$edit_dir"`
}
action_selections() {
ignore='/bin\|/dev\|/lib64\|/root\|/sbin\|/sys\|/usr\|/boot\|/etc\|/lib\|/proc\|/run\|/srv'
if [[ `echo $edit_dir | awk -F/ '{print "/" $2}' | grep "$ignore"` != "" ]]; then
echo -e "\n Sisteminizin güvenliği açısından  `echo $edit_dir | awk -F/ '{print "/" $2}'` \
altında bulunan\n\n dizinlerin durumunu sadece görüntüleyebilirsiniz.\n\n Bu bölüm altında \
toplu düzenleme yapılamaz."
echo -ne "\n\n Dosya ve dizinlerin mevcut ayarlarını görmek istiyormusunuz?  [e/h] "
read -p "" bak ; [[ `echo $bak` = 'e' ]] && (clear; see_old_set)
echo -ne "\n\n Yeni bir seçim için [y] çıkış için herhangi bir tuşu kullanabilirsiniz : "
read -p "" sec ; [[ `echo $sec` = 'y' ]] && (clear; select_dir_name) || exit 0
else echo -ne "\n Şimdiki ayarları görmek istiyormusunuz?  [e/h] "
read -p "" bak ; [[ `echo $bak` = 'e' ]] && see_old_set
echo -e "\n Değişiklik durumunda bilgiler $edit_dir içerisine, \n\n \"authority_log.txt\" olarak yazılacaktır"
echo -ne "\n Ayarların uygulanmasını istiyormusunuz?  [e/h] "
read -p "" onay ; [[ `echo $onay` = 'e' ]] && create_all_set || exit 0 ; fi
}
check_all_set() {
[[ -z "$edit_groups" ]] && CHWN='sahipliği boş bırakıldı' || \
CHWN="sahipliği  $edit_groups  olarak seçildi"
clear; echo -e "\n\n Seçilen dizin : $edit_dir \n\n $CHMD \n\n $CHWN\n"
if [[ ! -z $edit_kod ]] || [[ ! -z $edit_groups ]]; then action_selections; else ls -l $edit_dir ; fi
}
check_edit_groups() {
mkdir /tmp/group_test 2>/dev/null
if sudo chown -R $edit_groups /tmp/group_test 2>/dev/null; then check_all_set
sudo rm -rf /tmp/group_test 2>/dev/null
else echo -ne "\n$edit_groups geçerli bir girdi değil \n\n"
sudo chown -R $edit_groups /tmp/group_test
echo -e "\ntekrar seçmek için [Enter] veya çıkış için [c] tuşunu kullanabilirsiniz : "
read -p "" answer ; sudo rm -rf /tmp/group_test 2>/dev/null
if [[ $answer = 'c' ]]; then clear; exit 0; else clear; select_edit_groups; fi; fi
}
select_edit_groups() {
clear
[[ -z "$edit_kod" ]] && CHMD='yetki düzeyi boş bırakıldı' || \
CHMD="yetki düzeyi  $edit_kod  olarak seçildi"
echo -e "\n LİSTE = `cut -d: -f1 /etc/group | xargs` \n\n Dosya sahiplik haklarını belirleyin\n\n Örnek :  root:root , \$USER:root veya \$USER:users gibi"
echo -ne "\n $edit_dir   $CHMD\n\n Sahiplik haklarını belirlemeden devam etmek isterseniz,\n\n seçimi boş bırakarak [enter] ile devam edebilirsiniz.. \n\n ==> Dosya / Dizin sahipliğini belirtin : "; read -p "" edit_groups ; clear
eval edit_groups=`echo $edit_groups`
[[ -z $edit_groups ]] && check_all_set || check_edit_groups
}
check_edit_kod() {
if [[ `echo "$edit_kod"|xargs|wc --chars` -eq 4 ]] && [[ `echo $edit_kod | grep '[8-9]'` == "" ]]; then  select_edit_groups
else echo -ne "\n $edit_kod geçerli bir değer değil\n\n \
tekrar seçmek için [Enter] veya çıkış için [c] tuşunu kullanabilirsiniz : "
read -p "" answer
if [[ $answer = 'c' ]]; then clear; exit 0; else clear; select_edit_kod; fi; fi
}
select_edit_kod() {
clear
echo -e "\n\n  777 = rwxrwxrwx \t 755 = rwxr-xr-x \t 700 = rwx------ \n  \
666 = rw-rw-rw- \t 644 = rw-r--r-- \t 600 = rw-------"
echo -ne "\n $edit_dir için yetki seviyesi belirlemeden devam etmek isterseniz,\n\n seçimi boş bırakarak [enter] ile devam edebilirsiniz.. \n\n ==> Yeni yetki kodunu girin.. : "; read -p "" edit_kod ; clear
[[ -z $edit_kod ]] && select_edit_groups || check_edit_kod
}
prohibited_area() {
if [[ `echo "$edit_dir" | grep -x "$(ls /|sed 's/^/\//g')"` != "" ]]; then
echo -ne "\n $edit_dir dizini bu şekilde toplu bir yapılandırmaya uygun değil\n\n \
Bu seçim bilgisayarınızda geri dönüşü olmayan kalıcı hasarlar verebilir !. \n\n
yeniden seçmek için [Enter] veya çıkış için [c] tuşunu kullanabilirsiniz : "
read -p "" answer
if [[ $answer = 'c' ]]; then clear; exit 0; else clear; select_dir_name; fi; fi
}

check_dir_name() {
if [ -d $edit_dir ]; then prohibited_area
echo -e "\n ==> $edit_dir dizini seçildi .."; select_edit_kod
else echo -ne "\n $edit_dir geçerli bir dizin ismi değil\n\n \
tekrar seçmek için [Enter] veya çıkış için [c] tuşunu kullanabilirsiniz : "
read -p "" answer
if [[ $answer = 'c' ]]; then clear; exit 0; else clear; select_dir_name; fi; fi
}
select_multi_dir() {
local ignore='/dev\|/root\|/sys\|/boot\|/proc'
rm ${chk[2]} 2>/dev/null; for dir in `cat ${chk[1]} 2>/dev/null | grep -v "$ignore"`; do
test -d $dir && echo $dir >>${chk[2]}; done
if [[ `grep -c '/[a-z0-9]' ${chk[2]} 2>/dev/null` -eq 1 ]]; then
edit_dir=`cat ${chk[2]}`; check_dir_name
elif [[ `grep -c '/[a-z0-9]' ${chk[2]} 2>/dev/null` -gt 1 ]]; then
echo ""; cat -n ${chk[2]}
echo -ne "\n Bu isimde birden çok dizin bulundu.\n Düzenlemek istediğiniz dizinin numarasını girin : " ; read -p "" num
num_dir=`cat -n ${chk[2]} | grep ".* $num"|awk '{print $2}'`
if [[ -d $num_dir ]]; then edit_dir="$num_dir"; check_dir_name
else check_dir_name; fi
elif [[ `grep -c '/[a-z0-9]' ${chk[2]} 2>/dev/null` -eq 0 ]]; then check_dir_name; fi
}
select_dir_name() {
echo -e "\n Bu betik, belirli bir dizine ve o dizine ait tüm alt bölümlere\n toplu yetki düzenlemesi vermek için hazırlanmıştır..\n"
echo -ne "\n ==> Düzenlemek istediğiniz dizinin ismini girin : "; read -p "" edit_dir
edit_dir=`echo $edit_dir | sed "s/'//g"`; log_dir=`echo $edit_dir | sed "s/'//g"`
if [[ ! -z $edit_dir ]]; then
find / 2>/dev/null -name "$edit_dir" -exec echo {} >${chk[1]} \;
if [[ `grep -c '/[a-z0-9]' ${chk[1]}` -eq 1 ]]; then
if [[ -d `cat ${chk[1]}` ]]; then edit_dir=`cat ${chk[1]}`; check_dir_name
else check_dir_name; fi; else select_multi_dir; fi; fi
}
if [[ `id -u` != 0 ]]; then
sudo_allowed 'echo' &> /dev/null
clear; select_dir_name
else exit 1; fi

if

@mhmtkrktr, @Nold kullanıcısı için sadece okuma ve değişiklik yapma iznine sahip olmasını istemiş. 777 kullanılması sakıncalı olur.

@Nold, değişiklik yapma izninden kastınız nedir? Çalıştırabilme mi yoksa yazma mı? Bu uygulamayı nasıl kurdunuz?

Nold

if
Alıntı Yap@Nold, değişiklik yapma izninden kastınız nedir? Çalıştırabilme mi yoksa yazma mı? Bu uygulamayı nasıl kurdunuz?


Çalıştırabilme. Programı root olarak kurdum.

mhmtkrktr

#6
Alıntı YapSormak istediğim bunu uçbirimden nasıl topluca yapa bilirim. Mesela usr altında ugs klasörü var. Yapmak istediğim ugs altındaki tüm klasörlere ve dosyalara tek komutla izin vermek.
@if, ben sanırım bu tarafına biraz fazla odaklandım. Komutu da buna istinaden örnek amacıyla kod etiketi olmaksızın verdim. Yetki seviyesini ihtiyacına göre kullanıcı kendisi belirleyecek. Hangi düzeyin, ne şekilde ihtiyacı karşılayabildiğini henüz bilmediğimiz için uygun olanı yazma şansımız yok sanırım. Kaldı ki işin birde sahiplik tarafı olabilir.
Fakat yine de söylediğinde haklısın, örnek için bile 777 biraz fazla kaçmış. Düzeltiyorum hemen. Teşekkürler.   


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 30 Aralık 2016 - 22:32:14

Uygulama bölümünü eklemeden, betiği son kez güncelledim. https://forum.ubuntu-tr.net/index.php?topic=54916.msg614337#msg614337
/home /opt /var gibi belli başlı dizinlerin dışında sadece görüntüleme yapacak şekilde fonksiyonlar ekledim. Renklendirmesi falan derken biraz uzayacak sanırım.
Bundan sonrası github veya bitbucket üzerinden devam edecek.

if

Alıntı yapılan: Nold - 30 Aralık 2016 - 16:10:11
if
Alıntı Yap@Nold, değişiklik yapma izninden kastınız nedir? Çalıştırabilme mi yoksa yazma mı? Bu uygulamayı nasıl kurdunuz?


Çalıştırabilme. Programı root olarak kurdum.

Nasıl kurdunuz derken .DEB paketi olarak mı kuruluyor yoksa derlenerek mi?

@mhmtkrktr, internet üzerinde gördüğü komutları direk uygulayan arkadaşların olduğunu düşününce 777'den olabildiğince kaçınmak gerektiğini düşündüğüm için izinlerin 777 olarak değiştirilmesini uygun bulmuyorum. Yanlış anlamanızı istemem, yoksa siz benden daha bilgilisiniz.

Nold

#8
@İf

Alıntı YapNasıl kurdunuz derken .DEB paketi olarak mı kuruluyor yoksa derlenerek mi?

@mhmtkrktr, internet üzerinde gördüğü komutları direk uygulayan arkadaşların olduğunu düşününce 777'den olabildiğince kaçınmak gerektiğini düşündüğüm için izinlerin 777 olarak değiştirilmesini uygun bulmuyorum. Yanlış anlamanızı istemem, yoksa siz benden daha bilgilisiniz.

Yukarıda belirtmemiştim ama kullandığım sistem CENTOS. 6.2 sürümünden bu yana kullanıyorum şu anda 6.8 sürümüne geldi. Programı özel script ile kurdum, programın orjinal kurulum dosyalarından kurdum yani. .iso dosyası var ve script aracılıyla programın kurulumunu yaptım.

bu da scrip tin içeriği: 

#!/bin/sh

if [ ! -x "$1" ]];
then
echo "Usage: sudo $0 <path-to-ug_install-script>"
echo "for example: sudo $0 /tmp/SIEMENS/nx100/ug_install"
exit 0
fi

echo
echo Bypassing Siemens PLM NX Linux distro check....
echo

mkdir /tmp/bin

cat <<EOF > /tmp/bin/grep
#!/bin/sh
GREP_PATH=

if [ -x /bin/grep ];
then
GREP_PATH=/bin/grep
fi

if [ -x /usr/bin/grep ];
then
GREP_PATH=/usr/bin/grep
fi

if [ ! -z \`echo \${1+"\$@"} | \$GREP_PATH -ioe "/proc/version"\` ] && [ ! -z "\`echo \${1+"\$@"} | \$GREP_PATH -ioe "RED HAT"\`" ];
then
exit 0
fi

\$GREP_PATH \${1+"\$@"}<&0
EOF

chmod +x /tmp/bin/grep
PATH=/tmp/bin:$PATH "$1"
RES=$?

echo "Setup Ended: $RES"
rm -rf /tmp/bin
exit 0