LINUX.ORG.RU
решено ФорумAdmin

samba forse permissions

 


0

1

Привет, как запретить linux (виндовых нет) пользователям менять пермишшены на smb шаре?

Вот пример шары:

\[it]
path = /share/disk1/it
vfs objects = acl_xattr
msdfs root = no
writeable = yes
browseable = yes
public = no
dos filemode = no
hide unreadable = no
create mode = 0660
directory mode = 0770
force create mode = 0660
force directory mode = 0770
locking = 1
blocking locks = 1
strict locking = Auto
oplocks = 1
level2 oplocks = 1
fake oplocks = 0
csc policy = manual
valid users = @share_it_r @share_it_rw
force group = Domain Users
nt acl support = 0
inherit acls = 0
write list = @share_it_rw
inherit owner = no
inherit permissions = yes
read only = yes

мантим шару

sudo mount -t cifs  -o vers=1.0,user=$USER,cruid=$USER,sec=krb5 //servername/it /home/$USER/test
cd ~/test/

Ну и тест

touch file.test
ls -la file.test 
-rw-rw----+ 1 testuser Domain Users 0 Aug 31 13:52 file.test

chmod 600 file.test 
ls -la file.test 
-rw-------+ 1 testuser Domain Users 0 Aug 31 13:52 file.test

mkdir dir.test
ls -la | grep dir.test
drwxrwx---+  2 testuser  Domain Users         0 Aug 31 13:53 dir.test
chmod 600 dir.test/
ls -la | grep dir.test
drw-------+  2 testuser  Domain Users         0 Aug 31 13:53 dir.test
★★★★

Ответ на: комментарий от Pinkbyte

Не вижу глобального параметра unix extensions = no

делал. не помогает.

constin ★★★★
() автор топика
Ответ на: комментарий от Nastishka

А разве на маках NFS не работает?

Все везде работает, но есть куча причин, по которым мы используем именно smb. Вопрос не звучит как «что мне лучше использовать?» , вопрос звучит «какого хрена не работают force моды?»

constin ★★★★
() автор топика

Полагаю,это потому, что мейнтейнеры убрали force security mode из-за конфликта с ACL и предлагают всем радостно юзать ACL.

constin ★★★★
() автор топика
Ответ на: комментарий от Pinkbyte

В очереной раз «спасибо» мейнтейнерам Набросал вот такой тестовый скрипт, завтра причешу его получше.

#!/bin/sh
MON1="/share/disk1/it/"
MON2="/next/path"
MONX="/next/path"

scriptname=$0
fix_file=$1



monitor() {
    inotifywait -m -r -e attrib --format "%w%f" "$1" | while read NEWFILE
    do
    #call itself to fix chmod
    bash ${scriptname} ${NEWFILE}
    done                                                                              
}                                                                                     
                                                                                      
run_deamon() {                                                                        
    #run deamons
    monitor "$MON1" &                                                          
    #monitor "$MON2" &                                                         
    #monitor "$MONX" &                                                         
}                                                                                     
                                                                                      
                                                                                      
run_fix() {                                                                           
    stats=$(stat --format=%a $fix_file)                                               
    truestats="660"                                                                   
    [ "$stats" -ne "$truestats" ] &&  chmod 00660 $fix_file                           
    echo "$file"
}


[ $# -eq 0 ] && run_deamon || run_fix
constin ★★★★
() автор топика
Ответ на: комментарий от constin

ну и после рефакторинша

#!/bin/bash


monitor() {
    inotifywait -m -r -e attrib --format "%w%f" --fromfile /etc/default/inotifywait | while read TARGETFILE
    do
        [ "$(stat --format=%a $TARGETFILE)" -ne 660 ] && chmod 00660 $TARGETFILE
    done
}


monitor &



в файле /etc/default/inotifywait лежит список директорий
constin ★★★★
() автор топика
Ответ на: комментарий от constin

Окончательная версия


#!/bin/bash


monitor() {
    inotifywait -m -r -e attrib --format "%w%f" --fromfile /etc/default/inotifywait | while read TARGETFILE
    do
        TARGETFILE="${TARGETFILE//\ /\\\ }"
        #echo $TARGETFILE  #for debug
        if [[ -f $TARGETFILE ]]; then
                [ "$(stat --format=%a $TARGETFILE)" -ne 660 ] && chmod 00660 $TARGETFILE
        elif [[ -d $TARGETFILE ]]; then
            #[ "$(stat --format=%a $TARGETFILE)" -ne 770 ] && chmod 00770 $TARGETFILE
            echo "$(date) ${TARGETFILE} is folder" >> /var/log/monitor.log
        else
            echo "$(date) Something goes wrong with variable:  ${TARGETFILE}" >> /var/log/monitor.log
        fi

    done
}

monitor &
constin ★★★★
() автор топика
Последнее исправление: constin (всего исправлений: 2)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.